A Zig and Qt6 application launcher that starts in 140ms on my machine, and sometimes in 20ms.
Every few months I install another app launcher, convince myself this is the one, and then about a week or so later I uninstall it because something small irritates me or it cannot do what I want it to do. After repeating this process about a dozen times, I finally gave up looking and wrote my own.
I settled on Zenkai, from Dragon Ball—a power-up after a hard battle—because I wanted it stronger and faster after every iteration, including performance rabbit holes that maybe shave off 20ms. I wanted it cross-platform (Linux, macOS, Windows), fast, and beautiful: press a hotkey, type two letters, hit enter, and have the launcher gone before I registered it was there.
Zenkai Uses Qt and Zig
I chose Zig and Qt6. Zig feels like C with sane memory management tools that trusts you to be a craftsman. Qt I chose because I have shipped Qt applications professionally, like its widget set, and it is cross-platform. I picked the two things I already loved and hoped the rest would sort itself out.
Zenkai Is Fast
$ zenkai --debug --quit-when-shown
[zenkai] window fully visible in 140ms
Anything under 200ms is perceived as instantaneous. With plugins loaded, 100–200 apps parsed and icons rendered, I got it down to 140ms. Without plugins and with no-icons, it can be 20–70ms until fully interactive. Breaking the startup down put everything I actually wrote at about 14.75–20ms of the 140; the rest was Qt building widgets and the compositor putting pixels on the screen.
Zenkai Is Beautiful
There is a false dichotomy that you can either have a beautiful product or a fast one. A launcher that looks beautiful but takes four seconds to open is not a beautiful launcher. A launcher that starts instantly but looks like a settings dialog is not a great launcher either. I wanted both.
The goal was good defaults before any config, plus easy theming via QSS. A theme in zenkai is a data file rather than code—that is why there are 65 of them (gruvbox, dracula, catppuccin, tokyo night, nord, rose pine, high-contrast accessibility themes, a native Windows theme that reads your accent colour, and more).
Zenkai Is Yours Too
Flags like --menu let you add custom entries without writing code. The rest is Lua through ziglua, so themes and actions can be extended without rebuilding. The sandbox took the most work: capabilities get removed rather than policed, there is an instruction limit so a plugin infinite loop cannot hang the Qt event loop, and errors go to the log attributed to the plugin.
What I Want It To Become
I want more command-palette capabilities (clipboard history, quick calculations, scripts, window control), a Hyprland commander mode, less technical debt, and still lower startup times. None of the parts I am actually proud of were the plan—the lazy icons, deferred scan, and stubbornness about a number came from iteration.
Check it out at zenkai-launcher.netlify.app; the source is on GitHub. Follow-up posts will cover performance, beauty, and cross-platform details.