Swift Package Indexing

News
Packages

Creators & Guests

Host
Dave Verwer
Independent iOS developer, technical writer, author of @iOSDevWeekly, and creator of @SwiftPackages. He/him.
Host
Sven A. Schmidt
Physicist & techie. CERN alumnus. Co-creator @SwiftPackages. Hummingbird app: https://t.co/2S9Y4ln53I

What is Swift Package Indexing?

Join Dave and Sven, the creators of the Swift Package Index open-source project, as they talk about progress on the project and discuss a new set of community package recommendations every episode.

There's one thing we should definitely talk about, and that's that we passed 300 packages adopting documentation this last week.

Oh, that's great news. I was meaning to take a look at that the other day, actually, but you beat me to it.

Yeah, I mean, I do have this little spreadsheet where I track over time the number of packages that we have and also the number of packages adopting documentation.

So we launched this almost nine months ago and we have now five and a half percent of all packages

opting into documentation hosting.

And now these are opting in, not ones that actually opt in via pointing to their own documentation.

So there's probably a few more that have documentation links on the site,

but that, you know, the docs, we aren't hosting the docs for them.

But I kind of thought back when we launched this,

I mean, we never talked about any goals or ideas we might have with respect to how many

we'd expect over a certain amount of time.

But I thought at the time, because I was, I had been tracking how many packages have

an SPI.yaml file in their project for quite a while now.

And that had been around 5%, I think, at the time we launched the documentation hosting.

And I thought it would be really amazing if we'd managed to get 5% on board within a year

or something.

And I think that's probably way more than to be expected.

So here we are, nine months and a bit.

I know actually that's eight months and a bit and it's five and a half percent.

I thought that's really great.

So adoption has been really great by authors.

The traffic is also great to see.

So this is not just the adoption.

People are using it.

So the traffic on the documentation pages is, I think, of the order of 10%, which is

significant.

And just in my own use, whenever I do backend stuff, because there's quite a few packages

that we're using that have documentation and host it with us, my way of looking up documentation

really is search for the package with my little Raycast shortcut that makes that really easy.

Go to the package page, click through to the documentation, and then that's how I browse

documentation for packages and I think that's a great sign that I actually want to use it

that way and for me, there's a couple of cases where I've opened pull requests for packages

that have their own documentation but didn't have a documentation link on our site so they

still host it themselves and I open the pull request to at least point the documentation

link to their site just to make it very easy and a common entry point in the documentation,

that's what I really like. I exactly know where to go and where to check whether there's

documentation and I think that's really great.

Yeah, no, I think it's remarkable that we've got that level of adoption.

To get 5% of packages just having documentation, it is a landmark, let alone for us to be the

host of 5%.

I think it's a real testament to the fact that people are actually using DocC.

And I think the more I use DocC, the more I like the tool.

It's a really nice documentation tool.

And I think that is proven out by the fact that people are really using it.

They're really adding documentation.

And then of course, for them to use us to host it is a cherry on the top.

But I think the DocC team deserve a lot of credit for what they've done.

Yeah, absolutely.

I think it's really easy to get started with documentation because it's interesting.

I think the difficult part in documentation is the hosting bit.

You know, we've sort of shipped this thing to take that pain away.

And once that's gone, it is really just a matter of, I mean, obviously

doing the legwork and adding the documentation to your

functions and methods and structs and classes and so on.

But also it's very easy to add like entry.

I think what's really important and key for documentation

is to have a little entry page that explains the package and

guides you to the symbols that are actually relevant, right?

A wall of symbols isn't really helpful as documentation.

Just a little markdown page that points to

getting started topics and you know these are the

the key entities that you need to know about

you know when you're using this when you're using this package.

I think that's really important and that's also very easy to do because

all it takes is create a markdown file, drop it in the folder structure and

And off you go.

And because it's so easy to do that part of it,

I think that really plays into Doxy's hands here

and in having so many packages

with documentation available.

- The one thing I'm a little surprised about

is how the word is spreading about this.

Because yes, we have a little note

on our add a package page that says,

once you've added your package,

don't forget we can build your documentation for you.

But apart from that,

we've not really talked about it very much.

And we've talked about it on the podcast,

But I don't see where the word is spreading,

and I'd be interested to know how the word is spreading.

I guess it must be in some level, word of mouth.

- Yeah.

- Because on a package page,

like if you add your package to the index,

if you look at that package page,

there's actually not much to tell you as a package author

that we would build your documentation.

You'd have to go and either go back to that

add a package page,

Or is it mentioned on the information for package maintainers?

I don't think it is actually.

We should probably do that.

- I thought we had a link.

I'm not sure though.

- Oh, we do.

Yes, we do.

- One thing I think we could do, perhaps should do,

is because I think the SPI.yaml file is discovered.

Well, not the yaml file,

but the badges and the build system are discovered

by just having the badges on your package page, right?

So because it exposes it to GitHub.

So if you browse a package on GitHub and you see the badge

and you're interested in the badge, that links back to us.

So we have sort of extending our service surface in a sense

because on GitHub we're also exposed via the platform

support and Swift version support links.

And I think that spreads.

I know in the past, when I saw a badge

that I'd never seen before, I was curious,

well, how did they get coverage on this?

And then obviously when you inspect the badge, you see,

oh, this is this service that's being used to populate the data

and create the badge.

And I think that's how people discover the badges.

I think what we could do is also have a documentation badge

that links, you know, recreates our dock button

on our package page to also be available as a click target

on a plain and simple GitHub page,

which would then obviously if you don't have it

and you just recognize it and see it,

would also lead you to investigate how that badge is created

or how it's being used.

- And that badge would link straight through

to the documentation for that package?

- I suppose it could, yeah.

- Yeah, yeah, that's a good idea.

The other thing that we could do is,

as one of our nightly tasks,

we could start looking at every package in the index

and you could actually start to figure out

whether they had documentation comments

and if they did, open a pull request with an SBI YAML.

(laughs)

- Yeah, it would be, or look at least for Doc C,

the Doc C pages, I think that'll be a very strong

signal as well, yeah.

Yeah, that's another, we could at least prompt authors

to ask if they're interested in having it hosted.

- Exactly, I wasn't really meaning it

as a completely serious suggestion,

but you know what we could actually do

is we could start potentially flagging somewhere, not doing anything with the repository, but

flagging somewhere that after a build, if there appear to be some compatible documentation,

we could start flagging that to ourselves somewhere to maybe see if that's something

worth pursuing.

Yeah.

Yeah.

That's interesting.

Yeah.

There was another little thing slightly related to documentation that I worked on last week

that I thought might be interesting to talk about,

and that is a doc archive size histogram.

So we've talked about our doc uploader

for quite a bit in the past.

This is not about the doc uploader itself,

it's about the issue that we were addressing with it,

and that's that doc archives vary in size

quite significantly, and we'd seen a handful of repositories

that had lots of documentation, both in megabyte size

and file count, but we had no real good idea how many there really are.

What's the distribution across all these 300 packages with documentation?

How many are there where it's really small and how many are there where it's 100 megabytes or more?

So we had this task in the back of our minds for quite a while now to actually log that

and report it back to the server.

And we'd done that, so we have collected the data, but it doesn't stop there.

you just then want to visualize that somehow,

create a histogram so you can see the distribution of sizes

and file counts across the different packages,

know how many are there in the various buckets.

And that was really interesting

because I've done a lot of graphing and reporting,

graphical reporting in the past.

And my go-to tool has always been Python, Matplotlib,

and then sometimes Report Lab to create PDF reports

out of various graphs.

but it's always been this tool, Matplotlib,

pretty much all the time to create graphs,

Jupyter notebooks, which is sort of like

a Python playgrounds kind of thing

where you can interactively create little Python snippets

and create a little program that then creates graphs

or whatever it is.

I mean, Jupyter supports all manner of things

that you can throw into a Python script.

But this time around, I thought,

well, let's, we're in Swift land.

let's use Swift because SwiftCharts has been introduced last year at WWDC

and I hadn't actually used it for anything.

So I thought, well, I'm just going to throw this into a little SwiftChart real quick.

And I found there's actually a histogram class or struct that comes with the package.

So it's very easy to just take data and throw it into this thing,

add it all wholesale and then have created a histogram.

just give it the bin count that you want and the range that you want it to graph.

And then you can draw that into a SwiftUI chart.

And then that obviously is very easy to add into a SwiftUI canvas.

So effectively what I did is I threw these two charts together,

both the megabyte size histogram and the file count histogram,

and threw that into a canvas.

And that was really easy to do.

I mean, I was done by the time I'd probably be done setting up my Python environment again,

because I hadn't used Python in quite a while and it's always a bit of a pain setting up

Python virtual environments and then Matplotlib you typically need to compile because it has

C modules and all that.

So if you're not set up for this, it can take a bit of time to actually get started.

So this was really smooth and really great.

It looked fantastic.

So the output was really good.

And then I thought, well, A, I should post about this.

So I posted about this in Macedon, showed a little graph,

and there was, it was really interesting.

And people asked, well, can you actually

create a PDF from this?

And then I looked around a bit,

and obviously on Paul Hudson's

Hacking with Swift page there is a snippet

that explains how you create a PDF from a SwiftUI view,

which was also very easy.

So I have a playground with a button

to export a PDF of that view.

And that is effectively the same thing you can do

in Jupiter, all in Swift, really high quality.

In fact, I think the PDF is unique

in the sense that it is resizable.

So this is a, it's not a rasterized PDF.

You can actually select the text and zoom in

and you, yeah, really high quality zoom.

There's no stairs or anti-aliasing or anything,

which I think is the case with Jupiter.

So I was really, really pleasantly surprised

with the outcome of this little experiment.

And I can really recommend, if you have something to chart,

a simple and quick thing, give Swift charts a go and a Swift Playground because that might

be all you need.

What's also really great about this is if you've done any sort of data processing in

Python, it's really nice on one hand that Python doesn't have strong typing that you

can just throw data at it.

But once you reach a certain level of complexity with your data, it's also very easy to get

confused about which slice of data should I be looking at?

Am I actually looking at this dictionary or am I looking at the nested dictionary in the

dictionary?

Because beyond the first level of nesting, you get hopelessly confused about where you

actually are.

Whereas in Swift, you can strongly type all these things.

So you know exactly what object you're looking at.

You can be sure that value you're plotting here is a certain type because you've made

that type yourself and you don't get confused when you look at the data.

I saw you talking about this and I think you also mentioned that it was maybe not faster,

but a similar amount of time that it took you to create these histograms as it would

have done in Python.

Oh yeah.

I mean, if someone is set up to do this in Python, I think the effort is pretty much

the same, you know, because you have a very simple data structure that you pipe into a

histogram.

And it's a really great use of a Swift Playground, actually.

Yeah.

I love that.

you see the data, I mean, it's effectively just like Jupyter. And that's what I love about Jupyter

as well, because you get this immediate feedback. There's no build run loop, really. I mean,

under the hood, it is, of course, but it's hidden away. And it's so immediate that you don't really

notice it. That makes it a really pleasant experience. And you can even more so I think

in Python, because in Python, the results, you sort of need to rerun the sheet, if I remember

correctly, but in SwiftUI the view actually sits off to the side and if you modify the page a bit,

the page layout, and that's very easy to do then and has a really nice feedback cycle

where you have the view to the side that shows you the page what it looks like and gives you

this really good control over what your result is and the output. And obviously more so than

Matplotlib in SwiftUI, you have the full power of SwiftUI at your disposal, right? You can

you can overlay this thing with anything because you can have a ZStack and then

put stuff on top of your graph, next to your graph, all your layout commands are available to you.

And I think that's amazing. That's a really great environment to work on this kind of thing.

And is it worth talking about the results that you found?

Yeah, maybe briefly.

Or the generation of them that was interesting.

Well, I think we didn't talk about the results all that much because

But luckily, I mean, what it showed is a very steep drop off.

So really, we don't need to be that concerned about size per se, because it's effectively

just three packages, well, two packages where one has two versions, like the default branch

and the tagged version has a very large doc set and another package which only has a default

branch version, I believe.

So it's really only three doc sets that are large or a bit too large to be honest.

And all the rest I think are below 100 megabytes, certainly below our 500 megabytes cutoff.

So there aren't any packages that we're currently tracking that are above our cutoff.

And we have special case the one, right, because it's Swift syntax to actually onboard it beyond

our normal cutoff.

So it has a special cutoff.

we're not dropping lots of packages due to that, which is good to know.

When are we getting Swiftcharts for the web? That's my question.

That's actually interesting because once you have PDF or a way to create PDF,

it's very easy to just create a PNG or whatever you want for the web, right?

Even an SVG, yeah.

Is there something to create SVG from SwiftUI?

Probably not directly, right? But maybe via PDF?

Might be an interesting little...

Potentially via PDF.

Yeah.

I don't think there would be anything directly for SwiftUI to SVG, but yes, maybe.

The next version of the site will be built entirely with SwiftUI.

So the only thing that I had for news this week is a little refactoring actually, but

it's not worth talking about it on the thing.

So whenever we add new pages to the site or new things to the site, there's always that

question of, does it need a bit more design?

Does it need a little bit more, like does it need any custom UI?

it fit in with the rest of the site.

And over time, we had a few little things that were all custom, that were all built

just in whatever, whatever mood I was in that day, wasn't a terrible mess, but we

had a couple of little things that were like that.

And at the end of the supporters page that we talked about on the last episode, I

noticed that again, I'd built one more little kind of box to click on, which would

take people out to our GitHub sponsors link.

And I thought, well, I wonder if there's a, there's a few of these across the site.

And so I did a little bit of refactoring on the design side of things and made

what I've called the panel button, which is a cross between a kind of panel of

information, and it also acts as a button in itself.

And we're now using those across the site in a few places, mainly on the

homepage and then once on the supporters page, and it's basically just a little

panel, it's not designed to be huge.

If you look on the homepage, the four panels that you see there, the podcast

link, the link to our supporters page and the two advertising sponsors links

that we have on the homepage there, they are now all power buttons.

And the reason I'm mentioning really is it's the kind of thing that now gives us

the ability to know that we have that design element that we can use potentially

elsewhere.

We don't have a formal design system.

The design side of things is really only me working on that.

And so I'm not dealing with teams of designers

who all need to be able to do something consistently,

but it is nice to occasionally come back and say,

what common elements are we doing common tasks with

and seeing if we can actually create some kind of standard

for that across the site.

And so that was a little enhancement that went live

since we last spoke about the supporters page.

- Right, I think that covers the news, doesn't it?

- It does.

Shall we do some packages?

Yeah, I can kick us off this week with a package called Yorkie.

And this may be a very UK centric reference, but the only Yorkie I knew

before now was a chocolate bar in the UK when I was a kid, it's

nothing to do with chocolate bars.

Instead, it is a, an SDK for building real time collaborative applications.

And the reason that this stood out to me is that a common conversation

between you and I and a common research topic from you and I has been for a

collaborative markdown editor.

And actually just to go off on a slight little tangent for a second, we have

actually found one recently that we have been using for a couple of little things.

And I quite like actually, it's called HackMD and that's, that's our current

best guess at it, but, but it's not perfect.

And so this Yorkie iOS SDK is for a tool called Yorkie and it's an open

source server that you can run yourself.

If you want to, you want to stand up a server yourself, you can run this Yorkie

server and it basically helps you create real-time collaborative editing.

I don't think it's specific on what the, the thing that is being edited is.

It is more of a mechanism to help you with that.

And I haven't looked into Yorkie itself more than that, but I did think, I didn't

I think it was maybe our next project idea to finally solve that markdown if it's a problem.

And maybe Yorkie is the way that we do it.

So the package got added to the package index this week and it stood out to me as something

interesting.

Nice.

Yeah, I've seen Simon, help me out, what's his last name?

Stuffring.

Stuffring, exactly.

He's currently porting Brunstone to the Mac.

So I think slowly but surely all the pieces are coming into play.

I also saw Joe Heck blog posting, blogging about CRDTs again.

So I think the stars are slowly coming into alignment that hopefully someone will put

it all together and create a really innovative and nice marketer, editor that allows you

to collaborate and work on documents across the web with comments and all that.

I'm not super happy with HackMD.

The main problem for me is that when you lose connection,

you can't even edit it locally.

But yeah, especially a native client would be really great.

So maybe this is the tool to go for.

Interesting, your key.

- A native client would be great,

but it has to support, table stakes for me is

that it has to support commenting and that kind of thing.

There's a lot of work in adding those kind of features

and a lot of collaborative editors don't go that far.

And so, yeah, I agree that HackMD has its limitations,

but it's certainly, it's the best I've used so far.

But there is, I think there is actually

a serious opportunity here for somebody

to build a tool like this.

I do not think this is a solved problem.

- No, I really hope so.

I mean, let this be, once everyone's done

with their Macedon clients, let's do this.

Right, so that's my first package.

Excellent. My first pick is called Potent Codables by, well, it's just Outfox, which

is a company. And this is a package to deal with, well, codables, encoding, decoding of

data. And obviously the big days of custom codable implementation is sort of gone since,

that are over since Codable shipped with Swift.

- Yeah, I had to check the date for a second there.

- When did Codable ship?

Was that Swift, just Swift 5?

I don't know, it's been, or Swift 4 even,

I don't remember, it's been in the language so long,

and it's the go-to way of really, you know,

dealing with data encoding and decoding.

But there are cases where you need something more,

and this is a package that gives you more.

So one example that immediately springs to mind

is something we had to do recently.

So we have two different JSON files.

I mean, different in the sense the content is different,

but the schema is the same.

So they have the same shape and we need to merge them together.

Now we know one top level key

and all the entities below that key,

we want to merge together.

But because we don't know the rest of the document structure,

we can't really write out the codable to read those in,

merge them and write them out again, right?

If we only define that one top-level key that we're interested in,

we'd be stripping out all the other data that's part of the thing.

So Codable doesn't really work here.

What we're using right now is the normal JSON serializable, I think it's called,

the foundation class that deals with JSON encoding and decoding just generically,

and not with any...

where you don't need to define the struct up front,

you can just load it in, look for your keys, and then merge it.

And this package does the same thing.

It also interfaces with Codable, so it's a bit of a mix of both.

And it also comes with support for both JSON, YAML, and other formats.

So if you have this particular mix of requirements,

this might be an interesting package for you, for instance,

if you need to write both JSON and YAML.

You could use just this package rather than, you know,

use the normal Foundation Codable and then, you know, YAML for YAML encoding.

And obviously it also supports a couple of other formats that might be interesting to you.

It also promises easier implementation of custom serialization formats, so if you have needs for that,

this might be interesting to you.

It does come with extensive docs, so that's always nice.

And it supports all platforms that we are testing for, so all of Apple's platforms as well as Linux.

So this looks like a really nice package if you have encoding, decoding needs that go a bit beyond

of what Foundation or Swift as a language provides.

And that's potent codables by Outfox.

- I think it's also a great confirmation

that the problem of passing data

between systems will never be solved.

- Yeah, and you know, the default format JSON,

which pretty much is the default, has its problems, right?

If you slot the most space saving of formats around,

so if that's your constraint,

this package has other options,

I think there are specifically binary formats that are specifically made to be a little

bit more compact.

Although I do feel we're in a pretty good state these days where JSON has become really

a standard for doing this kind of thing and everyone's kind of settled on it and it feels

like a relatively calm situation for data import and export between various systems,

whether it be manual or real time.

We do feel like we're in a reasonable position

at the moment.

- Yeah, I mean, I think Jason will get you a long, long way.

And then the beauty of Codable is

that you can just swap it out, right?

If it's a detail of how you serialize

your data structures mostly,

and allows you to just swap it out for something better

if you have special needs around size

and perhaps speed as well then.

- Great.

My second package is Typography Kit by Ross Butler.

And this is not a new package at all,

but it did just have a major new release three days ago.

So it's been in development actually for five years,

which is a long time for any package,

but it's a little bit like what we were talking about

with the design system for the package index, actually.

It allows you to create standard look and feel

across your application using custom fonts,

but also supporting dynamic type,

which is something that has become easier over the years,

but certainly five years ago,

I don't think it was even possible five years ago,

certainly this solved a big problem at the time.

And this week's release of it adds colors into the mix.

So you can still specify a custom font

and have it react to dynamic type changes

and look at a standard look across your application,

but you can now also add standard colors for text

and standard secondary primary and secondary colors for text

and fallback colors, things like that.

And I think that's a nice extension.

You know, it's quite easy when you create a package

to want to keep adding stuff to it.

But sometimes that can be the wrong choice,

but I think this looks like a really solid extension

of keeping it within what the original package

was intended to do, which is create a standard look

feel for your application. And typography

and colors definitely go hand in hand

and so I thought this was a great extension

of that. Really nice, yeah. And I see it has

support for SwiftUI as well, right? Which

is really nice. And UIKit. Yeah,

I mean, you know, five years that was

probably. Of course, five years there was

no SwiftUI.

My second pick is called, it's also about text, it's called Rich String Kit by Robbie Moyer.

And this is a decorative DSL for building rich text in Swift, as the description says.

And that's really nice, I mean the selling point really is, just if you look in the readme,

it gives you a NS attributed string definition,

you know, to create a short paragraph of text with certain styling,

you know, a font of a certain size, a bolded font element, a logo attachment.

And I'm trying to read through this Swift attributed string declaration of it,

and I find it really hard to pick out what the actual embellishments are.

There's a range that does something else strong.

So that's, that is emphasized.

If you read by comparison the TSL or Result Builder made attributed string,

you can just read it, you know, that you see a plain text part,

then there's a Swift label with an attachment,

a foreground color change and a bold system font being applied.

And that's a really nice use case for Result Builders making something

very easy and readable and extensible by extension.

because the declaration reads really well and emphasizes the parts that you're actually configuring.

So all the machinery of setting up the different data structures that you need are hidden away

and you can really focus in on the data that you're actually presenting.

Yeah, I think when we first got result builders,

everybody wanted to use a result builder for everything and suddenly everything was a result builder.

But there are some good, there are some really solid good use cases and this sounds like one of them.

Yeah, so that's Rich's string kit by Robbie Moyer.

Fantastic. So my final package for this week is that number kit, which is by Frederick Jack.

And this is a package that I think is one of those where it's the perfect use for a package,

because if there's one thing that I never want to do, it's write a formatter or a validator

for validating VAT.

It is one of those tasks that I am extremely happy that somebody else has picked up.

And that's what Frederick has done with this.

So I have in the past, and in fact, I do still use this on the iOS dev jobs website.

I have integrated the online VAT number checker.

There is the EU run a VAT number checking API service that you can use and you pass

of that number and it will not only check whether it's valid, it will check whether it's real,

which is a great service, but that obviously requires an online connection and all the rest

of it. What this does is it takes an enormous number of countries, in fact I think all of

the European countries, and has all of the rules for their VAT numbers. It's the kind of thing that

not everybody's going to need this package, but if you need it this is going to save you so much

time because one of the things that is difficult about this is just finding all

the different formats for these numbers. Yeah. Does it also check online? Does it

have the option to validate it like fully or what is that other scope? I

don't believe it does. I think this is purely a validation library and not an

actual check. Right. Interesting. So it's the kind of thing that this

this actually popped onto my radar a little a couple of weeks ago and I was

toying with whether to even mention it because it is so niche but it's the kind

I love packages like this because I never want to write that code.

Yeah.

So I want to give my thanks to Frederick for solving that problem.

Yeah, I think that's a perfect use case for dependency, right?

This is the stuff you just want to have someone else deal with.

But it's also, you just get all of the changes for free whenever there are updates to these

formats, which is fairly rare with VAT numbers, I think, but still.

Yeah.

Right. My third pick is called Swifty Creatives by Yuki Kuvashima.

So I'm just going to read the description. It's a bit hard to describe what this package does.

Creative coding framework for Swift. Built on Apple's metal. Inspired by processing.

Oh wow. Okay.

This probably doesn't tell you much, but if you look at the readme, it demos what it does.

and the description in general is a bit sparse,

but I find it really interesting just for the demos that it shows.

Think of the kind of package where you can define geometrical structures

and then animate them or create procedurally variations of them.

And this is sort of what the examples demonstrate.

The first one is lots of different cubes, rectangles arranged

and they're rotating, they're semi-translucent.

It looks really interesting.

You can imagine all sorts of use cases for this kind of thing,

whether it be an animated logo or a loading spinner or certain explorations.

Maybe you want to show disk size breakdowns with these boxes, that sort of stuff.

Graphing, there are some examples that show 3D bar graphs are probably the greatest

graphing tool in the world. The applications for those are really...

they're probably more for demonstration purposes than actual use, but it shows what the library can do

And there are various other examples on that page.

And it goes, you know, it's just rotating text,

showing a nice little tree.

It's a bit like Fractal where a tree structure

is being created.

I think these are called Lindenmayer systems.

And one interesting thing about this package is

it also has two example projects that it links to,

which in themselves are interesting.

The first one is about this tree that I just talked about,

this Lindenmayer system,

which is an app where you can configure

creation parameters, so the color or the, I guess the number of nodes, and you know, the branching, you control how many branches it creates.

And it gives you various, very different shapes of the tree that it creates.

Interesting tool just to look at, and I presume

I can imagine you're building that or playing with that, it's also quite interesting.

And the other example is called Stable Fluids, and this is a sort of

plane and I guess you can use touch input to poke the plane and the plane is effectively a fluid and then it

Sort of swooshes around and creates waves and stuff and it's it's really interesting what this package

Apparently allows you to do with this sort of stuff and it's based on metal

So I suppose it's quite performant. I think does its its name justice Swift creative

I can see someone who's good at this sort of stuff

to create really interesting visualizations.

- Well, and that's the thing with processing is that,

I mean, processing has been around for a long time now.

And I'm sure that when the people who created processing

first created it, had no idea what it would be used

to create in the future.

And if you look at some of the things

that people are doing with processing these days,

it is unbelievable.

And you can create beautiful, beautiful art, all animated and doing whatever you wanted to do.

And so this feels like if there is a, if it was inspired by processing and certainly looking at these two examples,

there is potentially a very bright future ahead for possibilities of a package like this.

Yeah. And just a quick word, one other note that I made, it looks like this gives you a language

sort of similar to core graphics, where you can create your primitives and structure them,

just that it uses metal for rendering and it has a SwiftUI interface.

So you can create this, I think these objects are called sketches,

so you can create a sketch and then plug that sketch into a SwiftUI view

with certain camera and drawing configurations and it'll do its thing.

So it looks really interesting.

There we go.

So I think that just about wraps it up for another episode of Swift Package Indexing.

Was there anything else you had before we finish?

No, that's it. I think we should perhaps mention as part of our outro a couple of links maybe.

So we have a Discord, we'll put a link in the show notes.

We also have an account on Mastodon, the Swift Package Index at mas.to, m-a-s dot to.

And we'll put that link in the show notes as well.

And I think we should maybe also give a shout out if you have any suggestions, comments,

questions about the podcast, hit us up. Maybe you have packages to recommend. That might be

interesting. And we should also say hello to the few people who heard our promotion of the Discord

last time, came into Discord and said that they even heard it on the podcast. So hello to you all

who did that. Yeah, that was great. Stop by, say hi. All right, well, we'll talk to you in a couple

of weeks. See you in two weeks. Bye bye.