Skip to content

Nemo

Nemo is a configuration-driven desktop application framework. Define your UI layout, data sources, and event handlers in XML configuration files and RHAI scripts -- Nemo handles rendering, data flow, and state management.

Built on GPUI, Nemo produces native, GPU-accelerated desktop applications from declarative configuration.

What Nemo Does

  • Declarative UI -- Define component trees in XML instead of writing rendering code
  • Live Data Binding -- Connect HTTP APIs, MQTT brokers, Redis, NATS, WebSockets, and timers directly to UI components
  • Scripted Logic -- Write event handlers in RHAI, a lightweight embedded scripting language
  • Theming -- Ship with built-in themes (Kanagawa, Catppuccin, Tokyo Night, Gruvbox, Nord) or define your own
  • Extensible -- Add custom components and data sources via native plugins

Quick Example

A minimal Nemo application consists of a single app.xml file:

<nemo>
  <app>
    <window title="Hello Nemo" />
    <theme name="kanagawa" mode="dark" />
  </app>

  <layout type="stack">
    <label id="greeting" text="Hello, World!" />
    <button id="action" label="Click Me" on-click="on_button_click" />
  </layout>
</nemo>

Run it:

nemo --app-config app.xml

Project Structure

A typical Nemo application looks like this:

my-app/
  app.xml            # Main configuration
  scripts/
    handlers.rhai     # Event handler scripts
  plugins/            # Optional native plugins

Where to Go Next