Navision
EN RU
Download

Beta 1 · first public beta

Ubuntu, run by AI

Navision is a desktop for Ubuntu with its own Wayland compositor in Rust. An assistant on your own Claude Code or Codex subscription writes code and runs the system. Anything the mouse can do, it can call as a command.

base
Ubuntu 26.04 · x86_64
compositor
Wayland · Rust · Smithay 0.7
agents
Claude Code · Codex · ACP
remote
macOS · QUIC · Metal
status
Beta 1
The Navision desktop: top bar, the Settings window with the first-run welcome, and the Dock

Install Dockersample

Install Docker and check that it works

Installing the package. It needs root:
sudo apt install docker.io

Password window

Docker is installed, hello-world ran

+

~/projectsAsk first37%

This is how the compositor works: frames appear only where something changes. In between it sleeps, and the screen keeps the last frame.

frames in the last 6 seconds: 72 of 360

  • 45ms

    from compositor start to first frame

    Median of five starts without a monitor. On a 4K monitor: 261 ms.

  • 0.2per second

    wakeups of the whole idle desktop

    With a still wallpaper: 0 ms of CPU and 0 ms of GPU per second.

  • 10.3ms

    from mouse click to screen

    Median on a 4K 120 Hz monitor; 95th percentile 14.2 ms.

  • 73MB

    memory of all desktop processes

    In the same run GNOME Shell takes 176 MB and KDE Plasma 330 MB.

nova-brain · nova-agentd · nova-mcp

Claude Code in a window, not a terminal

The Assistant is a chat with projects and history. Your agent's official CLI does the work, so your subscription works as it is: Navision does not touch tokens and never calls a model API itself.

  • Any agent, several subscriptions

    Claude Code and Codex are connected directly. OpenCode, Gemini CLI and Qwen Code come through the ACP protocol. You can switch agents mid-chat.

  • The chat runs Ubuntu

    "Install Docker", "what is loading the server", "fix the test". File links in answers open Files.

  • Dispatcher

    A separate session on a fast model hands tasks to background agents, comes back to them, and answers by voice. It changes nothing itself.

  • Jobs on a schedule and on events

    Every hour, on weekdays, non-stop, or on a CI or GitHub event. For example, an agent on your local model hunts for bugs and your subscription triages what it finds.

  • Work outlives the window

    Agents live in the nova-agentd background service. Close the window or restart the shell and they keep going.

The Assistant window: projects on the left, an answer with links to a screen recording

comp.sock · nova-ctl · MCP

Every button is a command

The compositor has a control socket and an MCP server. Whatever you do with the mouse, an agent does with the same command and the same result. Up to 16 calls run in parallel.

  • windows and desks
  • monitors
  • launching apps
  • settings
  • screenshots and recording
  • accessibility tree
  • ui_tree
  • ui_find
  • ui_act
  • mouse and keyboard input
  • voice and music
  • test browser

nova-rootd · polkit · nova-cage

An agent you can trust with the system

An agent's root command does not run until you have seen it in full and typed your password. Every command goes this way; nothing is remembered for five minutes.

  1. sudo apt install …The agent calls sudo inside its sandbox.
  2. nova-sudoInstead of sudo, a Navision client passes the command over D-Bus.
  3. nova-rootdThe root broker. It learns who is calling from the kernel, not from the caller.
  4. polkit · auth_adminpolkit asks for the admin password on every command.
  5. password windowThe command is shown in full; dangerous ones are flagged: rm -rf /, mkfs, dd.
Assistant, Agents and jobs: a Local agent model server and a Find bugs job
  • No user process ever sees the password

    It goes only to polkit's system helper. Neither the agent nor the Assistant window receives it.

  • A sandbox for every CLI

    The agent runs in bubblewrap, like Flatpak apps. .ssh, .gnupg, .aws, .kube, the keyring and browser profiles are hidden. It has no access to input devices.

  • Doors to the outside are opened explicitly

    systemd services, Dispatcher tasks and subtasks go through separate narrow doors. Anything that runs outside the sandbox (autostart, .bashrc) is read-only for the agent.

  • Your own model server

    A local LLM by address and key: an Anthropic-compatible API works through Claude Code, an OpenAI-compatible one through Codex. The key is kept in the keyring.

nova-comp · frame_clock · nova-hold

A frame is drawn only when something changed

The compositor is one event thread with no just-in-case timers. A client, an input device or the deadline of a specific frame wakes it. The rest of the time it sleeps.

  1. Sleep until an event

    No polling and no idle loops. What is not visible is not animated.

  2. Damage only

    Only the changed area is redrawn. The still bottom of the scene is flattened into one layer.

  3. vblank minus budget

    A frame starts as late as possible. The budget is not a constant: it is measured from recent frames.

  4. The same frame

    A fast app gets its signal early and makes the current frame. A GPU buffer is applied when its fence signals.

  5. Cursor outside frames

    A separate thread moves the pointer on its own display plane without waiting for the scene.

Two refreshes of a 120 Hz monitor. The pointer makes the first, a mouse click the second. Measured on a real 4K monitor.

  • 0–3.3ms/s

    Late frames (hitch) across all scenarios

    That is 0–2 late frames out of 600. Below 5 ms/s the eye does not notice. Before the new frame architecture, opening a window gave 323 ms/s.

  • 0.74–1.83ms

    GPU time per frame

    Idle 0.74–0.77 ms, focus change 1.63 ms, smooth scrolling 1.83 ms.

  • ≈ 0.2s

    Compositor restart

    The monitor does not go dark: the old process's last frame stays on screen until the new one's first.

Test machine: Ryzen 9 9900X, integrated Radeon (2 CU RDNA2), Samsung Odyssey G8 32″ 4K 120 Hz, ×1.5 scale, HDMI, 1 kHz mouse, kernel 7.0. All live figures come from one machine.

  • A crash loses no work

    A separate process, nova-hold, keeps the Wayland socket and brings the compositor back. Terminals live in nova-keeper and return with 10,000 lines of history. Agents run in their own service.

  • What survives a restart

    Navision's own apps and Qt 6 programs reconnect. GTK, Chrome, Electron and X11 reopen in the same places, Chrome with its tabs. Unsaved work in a GTK program is lost.

  • What is not there yet

    VRR works only under a fullscreen window. Direct scanout of a window to a display plane is on only for windows without a Navision frame, and is not yet verified on a monitor.

scripts/benchmark · 2026-11-06 · 92aa33cd

Compared with GNOME, KDE and Sway by one command

scripts/benchmark starts every desktop without a monitor on the same GPU, at 3840×2160, with the same client programs. Everything is measured from outside, from /proc and the kernel's GPU counters: the comparison uses no internal Navision counters.

First window, ms

From compositor start to the first shown frame of a window.

  • Navision91.4
  • Sway 1.11105.6
  • Weston 14152.6
  • KWin 6.6171.0
  • KDE Plasma 6.6172.5
  • Mutter 50198.1
  • GNOME Shell 50553.7

Memory at idle, MB

PSS of every desktop process: compositor, shell and the services it started.

  • Sway 1.1145.8
  • Mutter 5056.2
  • Navision73.3
  • Weston 1482.7
  • KWin 6.6139.6
  • GNOME Shell 50176.4
  • KDE Plasma 6.6329.8

App launch, ms

From launch to the window's first frame in Navision. Its own apps and Chrome.

  • Terminal12.5
  • Editor32.0
  • Settings33.1
  • Files34.7
  • Assistant35.8
  • Chrome221.2

Cost of a 4K frame, GPU ms

Time the GPU itself spends on one full frame, by scene.

  • nothing changed0.0
  • wallpaper step0.7
  • empty desk1.4
  • terminal1.8
  • two monitors2.0
  • Settings2.5
  • Files2.6

Idle wakeups per second

How many times a second the desktop wakes while you do nothing. Lower is better.

  • Mutter 500.0
  • Sway 1.110.0
  • KWin 6.60.4
  • Navision · still wallpaper0.5
  • GNOME Shell 505.0
  • KDE Plasma 6.67.2
  • Navision · live wallpaper149.9

Window animation, GPU ms per second

What a program that redraws on every frame costs the desktop.

  • Mutter 5084.3
  • KWin 6.684.8
  • KDE Plasma 6.685.9
  • Sway 1.1198.2
  • Navision108.5
  • GNOME Shell 50146.3
The full comparison table
Desktopidle: CPU, ms/sidle: wakeups/sidle: GPU, ms/sanimation: CPU, ms/sanimation: GPU, ms/sclient frames/shitch, ms/s
Navision · live wallpaper8.7149.924.430.0108.560.00.0
Navision · still wallpaper0.00.50.021.0107.360.00.0
GNOME Shell 50.12.05.00.038.0146.360.00.0
KDE Plasma 6.6.61.07.20.018.585.960.00.0
KWin 6.6.60.00.40.017.084.860.00.0
Mutter 50.10.00.00.021.584.360.00.0
Sway 1.110.00.00.015.098.262.30.0

Where Navision loses. With the live wallpaper that is on by default, an idle desktop wakes 150 times a second and keeps the GPU busy for 24 ms/s; the other desktops sleep. With a still wallpaper it is 0.5 wakeups. Animating a window costs the GPU 108 ms/s: more than KWin (85) and Sway (98), less than GNOME Shell (146). Sway and bare Mutter use less memory. The desktops draw different things (GNOME draws a panel, bare KWin only a background), so this compares cost, not looks. Weston is left out of the table: its headless mode paces frames at about 40 Hz on its own.

Measured 2026-11-06, commit 92aa33cd. AMD Ryzen 9 9900X (24 threads), 59.5 GB, integrated Radeon Granite Ridge, Mesa 26.0.8, Ubuntu 26.04.1, kernel 7.0.0-42. Headless, virtual 60 Hz vblank, medians. GNOME Shell 50.1, KWin and Plasma 6.6.6, Mutter 50.1, Weston 14.0.2, Sway 1.11.

nova-remoted · QUIC · wgpu / Metal

Remote Navision: a server with no GPU, an interface drawn by your Mac

Navision runs on any Ubuntu server, and the client draws the Dock, windows, menus and animations itself. Interface motion therefore does not depend on the network: the server sends only what changed.

  • The server needs no graphics card

    Programs, agents and services run on the server. It renders on the CPU.

  • Your Mac drives the shell

    The Dock with magnification, menus, opening, closing and dragging windows, and switching desks are animated by the client on its own clock, with the same code as the system itself. Metal draws it.

  • A scene, not video

    The shell arrives as a list of shapes, and only as changes. Images are sent once. There is no video codec, so text is always sharp.

  • Other apps' windows as tiles

    An unchanged tile is not sent, a single-colour one goes as one colour, scrolling goes as a move. zstd and LZ4 compress the rest.

  • One QUIC connection

    UDP, TLS 1.3. Pointer motion travels as datagrams. The interface model outranks sound, and sound outranks pixels.

  • SSH key sign-in

    No passwords. The client gets the server certificate's fingerprint over SSH; the one-time pass lives for two minutes.

Ubuntu server

No graphics card, no monitor. Programs, agents and services run here.

Your Mac

Draws the Dock, windows, menus and animations itself, with Metal.

What we do not promise. We have not measured network latency yet, so there are no figures for it here. Programs on the server run without GPU acceleration. The client is Mac-only for now, on Apple Silicon, and is not notarized. With sound you need a link of at least 1.5 Mbit/s.

Cargo.toml · 98 crates · CI

Rust from the compositor to the apps

Its own compositor on Smithay, not a fork. One event thread, no async runtime. The window domain knows neither Wayland nor the GPU and is checked by ordinary unit tests.

  • 98

    crates

    Each has one responsibility. A file with more than 600 lines of code fails CI.

  • 518k lines

    of Rust

    Including tests.

  • 7,236

    unit tests

    Every PR runs the tests of the crates it touches; main runs them all.

  • 127

    scenarios on a copy of the system

    Each starts its own headless copy of Navision. A fast set runs on every PR, all of them every night.

  • Compositor

    Rust 2021 · Smithay 0.7 · calloop

    Smithay with one patch of our own: the cursor plane updates outside the shared frame.

  • Rendering

    GLES · llvmpipe · Pixman

    Fallback paths render on the CPU: that is how GPU-less checks and Remote Navision run.

  • Text and raster

    cosmic-text · swash · tiny-skia

    Layout can be computed without a GPU, so tests cover it.

  • Control

    JSON socket · MCP · D-Bus (zbus)

    The mouse, the command line and an agent call the same commands.

  • Sign-in and security

    bubblewrap · polkit · PAM · greetd

    Proven system mechanisms instead of home-made ones.

  • Sound and screen recording

    PipeWire · VAAPI / FFmpeg

    The GPU encodes screen recordings.

  • Remote

    QUIC (quinn) · TLS 1.3 · CBOR · zstd · wgpu

    The same shaders, rewritten in WGSL, draw the interface on the Mac.

  • Terminal

    foot · alacritty_terminal · nova-keeper

    A session lives in its own process and survives a shell restart.

  • Accessibility

    AccessKit · AT-SPI

    One tree for the Orca screen reader and for the agent.

rule 2 · resources on demand

What runs while you do nothing? Nothing

This is a review question for every change. Services start when first needed and stop when they are not.

  • XwaylandX11 programs. Starts with the first window in 40 ms and gives back 90 MB when it leaves. stops after 10 s
  • nova-sysdWi-Fi, Bluetooth, sound and brightness while the control centre is open. stops after 10 s
  • nova-wifidWi-Fi as root, on call. stops after 10 s
  • nova-rootdRoot broker, on an agent's first command. stops after 10 s
  • nova-portalThe system file chooser. stops after 10 s
  • nova-voxdVoice: dictation and reading aloud. on request
  • nova-recdScreen recording video. one process per recording
  • nova-authPassword check. one process per attempt
  • nova-remotedRemote Navision server. stops after 10 min with no client
  • nova-soundInterface sounds. stops after 1.5 s of silence

ARCHITECTURE.md · comparison

How Navision differs from GNOME, KDE, COSMIC and niri

Only here

  • A control socket with MCP for agents

    GNOME exposes D-Bus and extensions, niri has niri msg. Here an agent sees the interface tree and presses what you press.

  • Terminals and agents survive a shell crash

    In GNOME on Wayland a shell restart closes your programs. COSMIC and niri do not keep the Wayland socket in a separate process.

  • Window logic is tested without Wayland

    Stacking order, tiles and desks are plain code with unit tests; no graphics need to start.

  • A smooth mouse wheel in other apps

    One wheel click is spread over 18 steps in 150 ms for GTK, Qt Widgets and the terminal: GTK 3 gets 9 frames instead of one. KWin, Mutter, Sway, Hyprland and niri do not do this.

Where others are stronger

  • COSMIC is more mature

    It has more mature code, tree tiling and its own toolkit.

  • The bar and Dock live inside the compositor

    As in GNOME: one GPU context and cheap glass. The price is that a bug in the bar takes the compositor down, which is why a restart is built to lose nothing.

  • Idle with a live wallpaper

    KWin, Mutter and Sway do not wake at all when idle. Navision manages that only with a still wallpaper.

nova-app · nova-voxd · nova-monitor

A whole system, not a theme

Its own apps share one toolkit and open in 32–36 ms. Other programs work as usual.

Navision Monitoring: CPU, memory, network, disks, the busiest programs and the log
  • Assistant

    Chat with agents, projects, history, the Dispatcher and scheduled jobs.

  • Terminal

    Tabs on ⌘T drag between windows. Links and paths are clickable. A line that is not a command goes to the agent on Enter.

  • Files

    Quick Look for office files and PDF. It is also the system file chooser.

  • Editor

    A code editor with syntax highlighting.

  • Monitoring

    CPU, memory, disks, network and temperatures on one page. 20 desktop widgets and an Ask the Assistant button.

  • Screenshots

    Screenshots with markup, and screen recording.

  • Disks

    Partitions and formatting.

  • Settings

    Accounts, Wi-Fi, Bluetooth, appearance and monitors, in the spirit of macOS.

  • Voice

    Dictation into any field in Russian and English, answers read aloud, and Conversation with the Assistant with echo cancellation. Engines: Soniox and OpenAI.

  • Motion

    Springs modelled on SwiftUI. An interrupted animation keeps its velocity. There is a Reduce motion mode.

  • Other apps

    Chrome, Electron, Qt and GTK run as native Wayland clients, X11 through Xwayland. Wine works.

  • Games

    Steam opens as a separate game mode on Super+G and is frozen while Navision is on screen.

install.sh · Beta 1

Install with one command

The first public beta. CI builds both downloads from changes that passed every check.

Navision for Ubuntu

Beta 1 · Ubuntu 26.04 · x86_64 · 177 MB

The installer looks at the machine and sets up packages, services and sign-in. All that is left is to sign in and enter your accounts: on first sign-in Settings → Accounts opens.

curl -fsSL https://github.com/snemesh/navision/releases/download/latest-main/install.sh | sh

Running the same command again updates the system. To remove it: sudo novaos-setup remove from a text console.

Remote Navision

Preview · macOS · Apple Silicon · 15 MB

Open the dmg and drag Remote Navision to Applications. The build is not notarized: the first time, press Open Anyway in System Settings → Privacy & Security.

Download RemoteNavision.dmg

The server needs Navision, passwordless SSH key sign-in and UDP ports 60100–60199 open.

  • Ubuntu 26.04, x86_64 only. There are no ready builds for other versions.
  • An AMD, Intel or NVIDIA graphics card. Every measurement here was taken on AMD. The installer sets up the NVIDIA driver, but Navision has not been verified on NVIDIA yet: expect bugs.
  • The interface is in Russian for now. Dictation understands Russian and English.
  • Bring your own subscription. Agents run through the official Claude Code or Codex CLI on your account.