In November, I released Inferno: an open-source collection of Metal shaders for SwiftUI developers, making it easy to create gorgeous special effects in your iOS apps. https://github.com/twostraws/Inferno
GitHub - twostraws/Inferno: Metal shaders for SwiftUI.

Metal shaders for SwiftUI. Contribute to twostraws/Inferno development by creating an account on GitHub.

GitHub
Two months later, I released Vortex: a high-performance particle effect system for SwiftUI, so you can bring effects such as confetti, fireworks, fire, and more into your apps. https://github.com/twostraws/Vortex
GitHub - twostraws/Vortex: High-performance particle effects for SwiftUI.

High-performance particle effects for SwiftUI. Contribute to twostraws/Vortex development by creating an account on GitHub.

GitHub
Today, another two months later, I just released my third and final open-source project, at least for now. It's called Ignite, and it's a Swift static website generator. Your entire site is written as Swift code, then compiled to HTML, JavaScript, and CSS. https://github.com/twostraws/Ignite
GitHub - twostraws/Ignite: A static site generator for Swift developers.

A static site generator for Swift developers. Contribute to twostraws/Ignite development by creating an account on GitHub.

GitHub

Why is Ignite different from other Swift website frameworks?

- Your sites automatically adapt to mobile, iPad, and desktop.
- You get modern web components in Swift – accordions, carousels, dropdowns, and more just work.
- Accessibility is baked into your HTML out of the box.

You can build a whole website using Swift if you want, or bring in Markdown and have those files become pages – it builds on Apple's fantastic swift-markdown library for lightning fast Markdown parsing. Just like Jekyll in Ruby, you can select layouts right in your Markdown.
It has a delightful, SwiftUI-like API, and where possible I've used similar names for elements and modifiers – get started by cloning the starter template. But it's built for the web: not replacing CSS/JavaScript, but building on top of them so you get great results fast.
I've gone out of my way to document all the code as best as I can, and there's a new sample website that demonstrates a wide variety of controls alongside the code it takes to produce each piece of output: https://ignitesamples.hackingwithswift.com
Home

My Awesome Site
Ignite is open source and available today – I'm grateful to the folks at @tryswiftconf for giving me the chance to announce it. There are *so many* small ways anyone can get involved, and I would really love to see folks helping no matter how small the contribution.

In particular:

- Write a small code sample demonstrating using one element.
- Write just one test, proving that a given Ignite element configuration produces the correct HTML output.
- Submit fixes for typos, unclear comments, and more.

It's all welcome! 🙌

If you're not sure about making a pull request, I'm happy to help! And once you've managed it once, I promise the next once is easier. There are *lots* of opportunities to get involved, so please do ✨

@twostraws I'm super interested in this project! Burnt out on package.json and friends after 10 years of it.

If we have questions about the project, how would you recommend one asks? Is Mastodon the right place, or a github issue? Somewhere else?

@twostraws I've filed a few feature requests! Happy to contribute implementations if you agree with them!
@fbartho An environment() modifier would be *epic* and most appreciated – I'd love to see this implemented, and would really appreciate a PR from you for it! Gosh, if we could nail that, then we could perhaps use property wrappers to access things like site/content data, rather than relying on the publishing context being passed around.
@twostraws I’ll take a look at `environment()` — probably on Monday or Tuesday! (Though I could be fooling myself in thinking I’ll be able to avoid trying it tomorrow)
@twostraws Looks awesome. I love the pics of your dogs. They're adorable. I would love to help out. I don't think my skillset is high enough yet to be very beneficial, but I do know testing is important. All I can do is try.

@twostraws lovely idea, nicely done!

(Noticed one small bug tho on the linked example, the “Buttons” link is broken)

@twostraws Congratulations on and thanks for launching so much cool open source stuff!

I found two bugs with the header in Safari: the menu button jumps to a new line which makes the bar overlay the top of the content and the Examplesite logo was gone after switching from In-App to Standard Safari.

@twostraws seeing a couple css issues at the top on mobile if you don’t already have them in your backlog

@twostraws Can you talk about SEO? (I have zero knowledge about it, and I usually use plugins for my WP sites, but I'm intrigued by this)

P.S. I saw the robots file config, but I'm curious if there are more advanced considerations.

@twostraws this looks really cool. I'll dig into it later. Sleep time. But can it be used to generate static sites dynamically? I mean with loops and access to data from my own app and have it generate the static html pages from that?
@tapforms It's Swift code that runs on your Mac when you build the site. It already has support for loops and conditions to generate HTML based on various conditions of your choosing, but you can of course extend that further.
@pixelpartner Oh snap! Yes, I see now that’s still on my todo list 🙃 That would be a welcome PR 🙂
@twostraws This is hilariously typical. I just moved my WordPress site to Hugo last week and then this arrives! Guess what I will be doing over Easter?
@twostraws
Very happy to see this, thank-you Paul!
I’ve been using another Swift-based static site generator, but it hasn’t been updated for ages, and I’m afraid it’ll stop working one day.
Will definitely play with Ignite! ❤️
@twostraws Thank-you Paul! Will have to check this out. After I cry a little bit having spent the last four days fine-tuning the CSS for a website publishing workflow I’d built using another static site generator. 😂

@twostraws Ignite looks very interesting- definitely will be looking into it!

FYI- your description on github says "state-site generator".

@twostraws I am oh so tempted to rewrite my entire site now. This is fantastic
@twostraws This is *really* exciting. Definitely gonna play with it, I've always toyed with things like Jekyll but never enjoyed needing to deal with Ruby!
@twostraws this is amazing! Congrats! Can’t wait to try
@twostraws This looks great for generating a personal website. A great addition would be WebFinger to connect to social media accounts. https://webfinger.net
WebFinger

@twostraws I was going to submit a pull request for a small addition to the README that I thought would be helpful. But after cloning the repo and creating a new branch with my change I got a permissions error trying to push the branch to Github. (Using the SourceTree app.) It has been five years-plus since my last pull request at my most recent corporate job. Any tips for remedial users like me would be helpful.
@twostraws
I’m feeling pretty dumb here. How do I build and run the sample? I don't see an Xcode project or workspace, and I've never ever built Swift from the command line.
@twostraws When I add the package in Xcode, I get the error Failed to resolve package dependencies. This is a brand new Xcode project.
@tapforms @twostraws Is this with Xcode 15.3? I had similar issues and went back to 15.2. Happier now.
@titociuro @twostraws Yes 15.3. The package that shows in the project navigator also has nothing in it when I allow Xcode to add it anyway.
@tapforms @twostraws Yup. Seen it. My SPM issues have been reduced dramatically (actually, not an issue anymore) with 15.2.
@titociuro @twostraws but I wonder if maybe the package file needs something setup differently for Xcode 15.3?
@tapforms @twostraws Perhaps? But here’s the thing… I have seen issues with Vapor and other packages as well. Even the packages disappear from what a few seconds earlier was all fine. And then a barrage of errors. My limited interaction proved frustrating with 15.3 so I went back. I wasted way too much time chasing I-don’t-know-what. And the message wasn’t helpful at all, so I bailed.
@titociuro @twostraws Interesting. I have many other SPM packages in my Xcode 15.3 project without any issues. Something with this package won't work though. I don't really want to go back to Xcode 15.2 though. Hopefully Paul can think of a solution for this package. I'd like to write a database export function using Ignite to build a website from a database.
@twostraws It would be really great if you (or someone else) could create a quick video or blog post (step by step) showing how one can create a simple site. I cloned both the Starter and Samples and Neither compile so I am stuck figuring out how to start. Brain fog😶‍🌫️😶‍🌫️
@StewartLynch @twostraws same for me. Maybe my first request will be to improve the starter site.
@StewartLynch @twostraws I commented out the code that was preventing compilation and it was a nice starting point
@ramzesenok @twostraws I have it sorted now too. I just imported from the samples into the starter kit. There was also an error in the Samples repo where it was pointing to an incorrect commit from the main repo.