Original, CSS reference, AppLib.
Original, CSS reference, AppLib.
Obviously can't miss dark mode.
Not planning to copy OSX, but I had a blast rebuilding this title bar today.
Next is polishing and settling on a design direction. Less is more.
Made good progress on my Git GUI alternative, similar to Tower or Fork, built entirely on GPUI and my own SwiftUI/AppKit library.
Does most of what I need. Uncovered a lot of issues with AppLib on the way. Fixing those has left the API in a much better state.
Actually am quite far already. Did you see my video from 10d ago below?
Building two apps with it now as alternatives for Fork and Spotlight/Raycast. This way I can quickly improve the API of AppLib as I build these apps and discover areas that need more attention.
bsky.app/profile/did:...
Bringing a modern, Linux-first analogy of SwiftUI/AppKit, Quartz, and some core apps to Linux. All of this, adjusted to what's possible today - think OSX Snow Leopard but it's 2026.
#Swift devs, how important is hot reloading to you when working on an app?
Many components still don't work properly, but we're close to parity with the Rust version.
Anyone wants to port a simple macOS app to Linux? Be my alpha tester.
So if I actually want Swift, thereβs no real GPUI alternative. Which means rebuilding a similar API on top of Skia.
And that means⦠way more code. Code I now have to maintain. I'm in limbo.
I thought about writing the low-level parts in Rust and then binding a high-level Swift API on top.
But GPUI for example all closures and borrowed state. Doesn't cross language boundaries well.
Reactivity with @ State and @ Binding done.
We did it! Just before bedtime. Fully working window system in Swift. Connects to Wayland compositor, creates XDG toplevel window, and initialized Skia EGL context. Next, I need to draw the same components as in my original Rust version.
I'm in Swift bindings hell.
Skia bindings implement. Yoga bindings implemented. wlroots bindings implemented. libinput bindings implemented.
I'm so close to rendering a window surface!
Getting Yoga bindings working with Swift is a pain.
With Swift, I'll have to rely on a lot of C/C++ code, I guess.
In Rust I can use Taffy as a layout system. In Swift, I will have to bind C/C++ libs like Yoga. Definitely not as fun as "cargo add".
Throwing Opus at this.
With Swift, I'll have to rely on a lot of C/C++ code, I guess.
In Rust I can use Taffy as a layout system. In Swift, I will have to bind C/C++ libs like Yoga. Definitely not as fun as "cargo add".
Throwing Opus at this.
Will report back. π«‘ It's been bumpy so far haha.
Porting AppLib to Swift today as an experiment. I want to compare the ergonomics between #Rust and #Swift.
My guess is Swift will feel better day-to-day for building UI. Rust may still be the better strategic choice in other ways.
My Ghostty shell froze for weeks.
It turned out Ghostty reloads its config, which reloads fish, which runs nvm, which costs ~500ms.
Lazy-loading nvm fixed it.
If you're on Ubuntu but not LTS, you're on your own.
Then there's reactivity. I could switch to Iced and get it built in, or bolt a reactive layer onto GPUI myself.
To get macOS people to take Linux seriously, a Swift-based path might feel less like moving to a different planet, as long as AppLib ends up with an API thatβs close enough to AppKit.
Itβs early enough that I can still change direction, so Iβm asking the annoying question: am I using the right stack?
Rust + GPUI is working, but I keep wondering if Swift would be a better fit, simply because the language was designed with SwiftUI-style ergonomics as a first-class idea.
Another Fork user?
Lately I find myself wanting even more of that: more checks, more linting, more pushed into the compiler, so that it helps me converge on something that's actually correct.
I've noticed that as writing code gets easier with LLMs, I'm more grateful for Rust's borrow checker, not less.
The problem shifted from "can I write this?" to "does this actually make sense?". Strong compile-time checks help with that. They force things to be explicit.
I used Jellyfin to watch a movie yesterday.
Setup was seamless. It just worked. Iβd heard a lot about it, but I was still pleasantly surprised. That kind of experience is rare now.
The only hiccup was packaging: the deb and repo only support LTS, so I ended up using Docker.
Is anyone rolling their own docs system on top of Next.js instead of using Nextra or Fumadocs? I want to setup and host docs for AppLib and am not happy with the options I've tried so far.
I just had one of those "You should think before you talk"-moments...
Thank you, Kuba.
Latest macOS Mail doesn't have a button to fetch mails anymore. I use this all the time, because I don't like waiting for the mails to arrive with over 10 mail accounts.
Now I need to click through the top menu or remember the hotkey.