Skip to content

Example Apps

Each example in examples/ is a complete runnable app (ND_SCRIPT=examples/<name>/main.tsx), and each doubles as the acceptance surface for a framework capability. The screenshots below are captured from the real hosts: the AppKit shell on macOS and the GTK host under GNOME, both rendering the same unchanged app tree.

The hello-world app: a click counter plus Suspense and useTransition running under a ticking re-render. Source

The counter example on macOS (AppKit)

The counter example on GNOME (GTK)

The smallest real app: a single-pane task list showing the menu-bar and toolbar chrome machinery scaled down to one window. Source

The tasks example on macOS (AppKit)

The tasks example on GNOME (GTK)

A three-pane note-taking app (folders, list, editor) with native chrome, a menu bar, search, and pinning — the framework-suitability stress test. Source

The notes example on macOS (AppKit)

The notes example on GNOME (GTK)

A two-pane preferences window built from the boxed-list widgets: real AdwPreferencesGroup rows on GTK, grouped form rows on macOS. Source

The settings example on macOS (AppKit)

The settings example on GNOME (GTK)

Every widget in one tabbed window — the acceptance surface the drive scripts assert against. Source

The widget gallery example on macOS (AppKit)

The widget gallery example on GNOME (GTK)

The <sourcetree> sidebar widget: sections, a three-level chain, captions, badges, and per-row actions. Source

The sourcetree example on macOS (AppKit)

The sourcetree example on GNOME (GTK)

Terminal-style split panes over @nativedesktop/panes, with the layout persisted through createStore. Source

The panes example split into three panes on macOS (AppKit)

The panes example split into three panes on GNOME (GTK)

A Ghostty-style tabbed terminal: every tab is its own <window tabGroup> root running an independent shell over a real PTY. Source

The terminal example running a shell on macOS (AppKit)

The terminal example running a shell on GNOME (GTK)

A small Min-style browser with native system tabs — one <webview> per tab window, popups and downloads routed through app events. Source

The browser example with a loaded page on macOS (AppKit)

The browser example with a loaded page on GNOME (GTK)

Every dialog surface in one window: app-level dialog.*, per-window showAlert / openFile / saveFile, and the dialog-scripting hooks automation uses. Source

The dialogs example with a native alert open on macOS (AppKit)

The dialogs example with a native alert open on GNOME (GTK)

A controlled Cmd-K palette used as a directory picker: the app owns the query and recomputes the result list per keystroke. Source

The command palette example with the palette open on macOS (AppKit)

The command palette example with the palette open on GNOME (GTK)

Two windows driven by one React tree, with a live <webview> that portals between them without reloading. Source

The multiwindow example on macOS (AppKit)

The input-synthesis probe: sliders, tables, checkboxes, and text fields laid out as deterministic targets for the pointer / drag / keys automation RPCs. Source

The gestures example on macOS (AppKit)

The gestures example on GNOME (GTK)

The survivable error policy: caught render throws, report-and-survive rejections, and the fatal crash overlay. Source

The errors example with a caught boundary error on macOS (AppKit)

The errors example with a caught boundary error on GNOME (GTK)

The HIG design-gap batch: an inspector split pane, a prominent toolbar button, and edge-to-edge content. Source

The inspector example on macOS (AppKit)

The inspector example on GNOME (GTK)