Relationship to niri
Atrium is a permanent fork of niri, not a tracking branch. Upstream fixes are cherry-picked into the parts that are niri’s; the parts that are Atrium’s own diverge for good.
niri’s: cherry-pick fixes
src/backend/, src/handlers/, src/render_helpers/, src/protocols/, src/utils/. The compositor plumbing. Atrium modifies them only for a bug upstream has not fixed yet, and takes the upstream fix when it lands.
Atrium’s own
src/layout/ (workspace model, TilingLayout, five algorithms), src/ui/, atrium-config/, atrium-ipc/, resources/.
Adapted: touched carefully
src/atrium.rs, src/input/mod.rs, src/ipc/. The bridge between upstream code and the layout. Changes here are surgical: add the action dispatch, do not restructure.
Grafting
Each niri release is triaged commit by commit into four buckets: take (cherry-pick with -x for auditability), adapt (a bug idea that applies to Atrium’s rewritten code, ported by hand), skip (scrolling-layout features, systemd and dinit integration, packaging, CI), or batch. A ledger records the cursor and the standing skips so nothing is re-litigated. Atrium is currently synced with niri v26.04.
Smithay
Atrium pins a private Smithay fork by revision, carrying robust-context creation (EGLContext::new_robust_with_priority) for GPU recovery. A graft that bumps niri’s Smithay pin rebases the fork branch onto the new pin and updates both revisions together.
Names that stay niri’s
Shader uniforms (niri_scale, niri_progress, and the rest) are a public API for custom shaders and are not renamed. Comments citing GitHub issues on niri are historical references and stay. Everything else is atrium: the crate, the Atrium state struct, ATRIUM_* environment variables, ~/.config/atrium/.
Version string
Atrium’s own version is CalVer (YYYY.MM.MICRO, no v prefix, so a bare number is ours and v26.04 is niri’s). The niri base is reported alongside, as in atrium 2026.09.0 (niri v26.04).