Warning
Nemo is in a Beta state, it's safe to use but breaking changes are possible.
A configuration-driven desktop application framework. Define UI, data sources, and event handlers in XML -- Nemo renders a native, GPU-accelerated application.
Built on GPUI.
curl -fsSL https://raw.githubusercontent.com/geoffjay/nemo/main/scripts/install.sh | shInstalls the latest release binary to ~/.local/bin (override with NEMO_INSTALL_DIR,
or pin a version with NEMO_VERSION=v0.6.0).
brew install geoffjay/tap/nemoDownload the archive for your platform from the latest release
and verify it against checksums.txt.
-
macOS: the app and binary are not code-signed or notarized, so Gatekeeper blocks them on first launch. Remove the quarantine attribute after downloading:
xattr -dr com.apple.quarantine /Applications/Nemo.app # app bundle xattr -d com.apple.quarantine ./nemo # CLI binary
-
Linux: the
.tar.gzbinary is dynamically linked. Either install the.deb(which pulls in its dependencies automatically) or install the runtime libraries:sudo apt-get install -y libfontconfig1 libfreetype6 libvulkan1 \ libxcb1 libxkbcommon0 libxkbcommon-x11-0 libwayland-client0
cargo build --release
# binary at target/release/nemonemo --app-config app.nemoA minimal application (app.nemo — a single-file component entry):
<app title="Hello Nemo">
<window title="Hello Nemo" />
<theme name="kanagawa" mode="dark" />
</app>
<template name="app">
<stack id="root">
<label id="greeting" text="Hello, World!" />
</stack>
</template>
The application entry is an
app.nemosingle-file component. Legacyapp.xmlentries are no longer supported — the loader rejects them; rename toapp.nemo(remove the<nemo>wrapper, move the<layout>body into<template name="app">). XML remains valid only inside<include>fragments.
- Declarative UI -- Component trees defined in
.nemosingle-file components - Live data binding -- Connect timer, HTTP, WebSocket, MQTT, Redis, and NATS sources to components
- Scripted logic -- Event handlers written in RHAI
- Theming -- Built-in themes (Kanagawa, Catppuccin, Tokyo Night, Gruvbox, Nord) with dark/light modes
- Extensible -- Native plugin support via dynamic libraries
nemo --app-config examples/basic/app.nemo # minimal single-file app
nemo --app-config examples/calculator/app.nemo # calculator with RHAI handlers
nemo --app-config examples/sfc/app.nemo # single-file components
nemo --app-config examples/components/app.nemo # full component galleryConfigurations are available in the examples directory:
- app-shell: Application shell layout (sidenav + pages + header/footer bars)
- basic: A minimal application
- calculator: A calculator application
- complete: Kitchen-sink example with variables, includes, and routing
- components: The component gallery — every built-in component with live examples
- custom-theme: Defining a custom theme
- data-binding: Data sources (timer, HTTP, MQTT, WebSocket, Redis, NATS) bound to components
- data-streaming: A live streaming dashboard
- dev-dashboard: The Nemo dev dashboard
- pid-control: A PID control demo
- router: Client-side routing between pages
- sfc: Single-file components with child components
- svg: SVG rendering
- task-list: A task list application
Full documentation is available at geoffjay.github.io/nemo or locally via zensical serve.
Plugin API documentation is also available for nemo-plugin, nemo-plugin-api, and nemo-wasm-guest.
MIT OR Apache-2.0
