Skip to content

NativeDesktop

Write React. Ship real native widgets — GTK4/libadwaita on Linux, AppKit on macOS. No DOM, no WebView, no Electron.

A Bun/TypeScript child process renders a React tree over a local binary protocol (NDP) into a Zig host that owns real native widgets. There is no embedded browser and no DOM — the widgets your app renders are GtkBox, AdwHeaderBar, NSButton, NSSplitView. One React tree automatically adopts both platforms’ current design languages (Liquid Glass on macOS, Adwaita on GNOME), because there’s no facsimile layer standing between your JSX and the platform’s own widget toolkit.

Real native widgets

GTK4 + libadwaita on Linux, AppKit on macOS — the same widget classes a native app would use, not a styled-to-look-native approximation.

Automation-first

Every widget is inspectable and drivable over a JSON-RPC socket from the moment it mounts — coding agents are a first-class consumer, not an afterthought.

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.