Why did OmniWM switch from Swift to Zig ? #252
Replies: 2 comments 4 replies
-
|
As I started writing my reply, it quickly turned into a manifesto 😂 That said, rest assured that animation optimization is actively being worked on. The first performance patch should be pushed within the next few hours. "Workflow experience that allows the community to do what they love easier" There are many reasons why parts of OmniWM are being ported to Zig, but the core reason is simple: I want OmniWM to be a project that welcomes different kinds of builders. I want it to be a place for the low-level tinkerers, the people who care about every byte, every cycle, and every hidden abstraction. The Zig, C, and assembly crowd should feel just as at home here as macOS developers who live in Swift and know the platform inside and out. OmniWM should not belong to one niche or one programming culture. It should be a meeting point. I also want this project to be something people can learn from. It should be approachable enough for students who want to understand how systems fit together, and solid enough for professors who want a real project their students can study, extend, and test themselves against. OmniWM should not just be software people use. It should be software people grow through. On a personal level, Zig has won me over. Its philosophy speaks to what I value: nothing hidden, nothing disguised, and as little distance from the machine as possible while still being practical to work with. It feels honest. It feels readable. It feels like a language that respects both the computer and the programmer. For people coming from C, it is also a natural fit. Rust is not out of the question in some abstract sense, but for a macOS tiling window manager, Zig, C, and Swift feel far more aligned with the shape of the problem. My hesitation with Rust is not really about difficulty. It is about the culture that too often forms around it. Not everyone in that world is like this, but the pattern is hard to ignore: a GPL project gets stripped down, rewritten in Rust, relicensed under MIT, loses half its features, and suddenly attracts praise, stars, and sponsorships simply because it wears the right badge. That is not innovation. That is branding. I have no interest in building for applause at the expense of substance. Omni, true to its name, is meant to become more than a tiling window manager. The goal is a real macOS desktop environment: cohesive, practical, powerful, easy to install, easy to configure, and dependable enough to simply work. I want to bring as much of the Hyprland and Niri workflow experience to macOS as is technically possible, not as imitation for its own sake, but because that way of working has value and people deserve access to it on the platform they use. Above all, Omni must remain free. Completely, permanently, and without loopholes. No bait and switch. No future enclosure. No pretending community contributions matter while preparing to funnel them into private profit later. If people give their time, their ideas, their fixes, and their trust to this project, that contribution should remain part of a commons that cannot be taken away from them. That is the vision. Not just a window manager, but a serious, community-built desktop environment for macOS. Open to different kinds of programmers. Useful to learners. Grounded in technical substance. Built to last. Built to stay free. |
Beta Was this translation helpful? Give feedback.
-
|
Here is current worked on performance patch not yet finished but in a few hours (keep in mind this is downgraded fps gif): |
Beta Was this translation helpful? Give feedback.


Uh oh!
There was an error while loading. Please reload this page.
-
Hello,
I’m using macOS and was looking for a window manager similar to Niri on Linux. I discovered OmniWM, and it’s exactly what I needed.
First of all, thank you for the amazing work—animations are smooth and the overall experience is great.
However, after upgrading to version 0.4.7.4, I noticed that animations have become laggy, which makes it a bit uncomfortable to use. I read online that this might be related to the transition from Swift to Zig.
Could you explain why this migration was necessary? I’m curious about the technical reasons behind it.
Thanks again for your work and your time!
Beta Was this translation helpful? Give feedback.
All reactions