Real native widgets
GTK4 with libadwaita on Linux, AppKit on macOS. The same widget classes a native app would use, not a styled approximation of them.
Your app runs as two processes. A Bun/TypeScript child renders a React tree over a local protocol
into a Zig host that owns real native widgets. No embedded browser, no DOM. The widgets your JSX
describes are GtkBox, AdwHeaderBar, NSButton, NSSplitView, so one tree renders in Liquid
Glass on macOS and Adwaita on GNOME without a lookalike layer in between.
Real native widgets
GTK4 with libadwaita on Linux, AppKit on macOS. The same widget classes a native app would use, not a styled approximation of them.
Built for coding agents
Every widget is inspectable and drivable over a JSON-RPC socket from the moment it mounts.
getTree returns an accessibility tree with roles and live values; agents click, type, and
wait on real widgets.
Theme-neutral styling
style is geometry (padding, layout), cssClasses reaches named design-language classes.
Dark mode follows the system automatically on both platforms.
React 19, for real
Hooks, Suspense, transitions, and hot reload, driving native widget trees instead of a DOM.
Share code, not UI
react is a peer dependency, so a shared hooks/logic package resolves to one instance across
a NativeDesktop app, a web app, and React Native in the same monorepo.