Desktop field Plate 61 Route §61
Plate 61

The single-window tool

One window that does one thing. No router, no async layer, no crate you added because you might need it.

Three crates: the types, the store, and the app. Settings, an About card that does not claim a local build is a release, and self-update that installs in place are already wired — they are the chrome every desktop app owes its users and none of it is your problem.

The template's AGENTS.md says what to add when this stops fitting. Each thing it names is one of the other two templates.

What you are carrying

model

The domain types. Pure serde, no gpui.

store

Atomic JSON under `~/.<app>/`, plus the keychain.

app

gpui and guise: theme, menu bar, window, overlays.

Start it

scripts/new.sh Acme ~/Dev/acme --template minimal

What it looks like

crates/app/src/main.rsrust
use atlas::prelude::*;

fn main() {
    Application::new().run(|cx: &mut App| {
        // Read the store before the window opens, so the theme follows the
        // saved preference on the first frame instead of flashing the default.
        let store = store::Store::new();
        let settings = store.settings();

        Scheme::new().build(scheme_for(&settings)).init(cx);
        Chrome::new("Acme").docs("https://github.com/wess/acme").install(cx);

        MainWindow::versioned("Acme", env!("CARGO_PKG_VERSION"))
            .size(900.0, 640.0)
            .open(cx, move |cx| root::Root::new(store, cx));
    });
}

Read next

Desktop architecture Scaffolding Gotchas
Type to search guides and package references.