Skip to content

1.0 readiness#

Resolved — 1.0 shipped

v1.0.0 was tagged 2026-06-09 (now at v1.0.6). This page is kept as the ledger that justified the tag; the "genuinely open" items below are the 1.x backlog.

A grounded ledger of where margo stands for a 1.0 tag, measured against Hyprland, niri, and mango (the dwl fork margo descends from).

Source of truth

This page is a summary. The authoritative records are /road_map.md (what's shipped / queued / blocked), protocol-comparison.md (side-by-side Wayland protocol audit), and manual-checklist.md (the real-hardware QA gate). When in doubt, trust those over any summary.

Verdict#

Functionally at or above the 1.0 bar — and now released as such. By margo's own roadmap, Phase 1 (catch-and-surpass-niri) is closed and Phase 2 (quality & growth) engineering goals are met. margo's Wayland protocol surface (60+ delegate_*, 15/17 tier items + 5 bonus — output_power shipped in 1.0.2) is broader than niri's and far past mango's; against Hyprland the only real distance is plugin-ecosystem breadth and a few hardware/upstream-blocked capabilities.

The pre-1.0 QA gate (running manual-checklist.md green on real hardware) was cleared and v1.0.0 shipped on 2026-06-09.

Already shipped (do NOT list these as gaps)#

A non-exhaustive list of things that are done — recorded here because they were once mistaken for gaps in a shallow review:

  • Screencast / portal — margo-portal is a full xdg-desktop-portal backend (xdp-gnome / 5 Mutter D-Bus shims + PipeWire + frame pacing + damage + cursor + HiDPI + windows_changed). Monitor and window capture. Roadmap P7 ✅ 9/9 phases.
  • XWayland — selection/clipboard bridge, HiDPI env, popup focus, fullscreen honoured, xwayland-satellite. (state/handlers/x11.rs.)
  • Multi-monitor hotplug — backend/udev/hotplug.rs; runtime DRM mode change + disable/enable output; wlr-output-management + adaptive-sync plumbing. Cursor warp is in the manual checklist.
  • Lock screen — ext-session-lock-v1 via mlock (PAM); checklist §5 carries the keyboard-input regression history.
  • Config validation — mctl check-config + parser unknown-key warnings.
  • Docs — full mkdocs site (config reference, IPC, HDR/portal/scripting design, protocol comparison + matrix, roadmap, manual checklist).
  • Man pages — man/{margo,mctl,mshellctl}.1, installed by both install.sh and the PKGBUILD into /usr/share/man/man1/.
  • Compositor scripting — embedded Rhai engine with mid-event-loop hooks (scripting Phase 3 ✅). (WASM is the shell plugin tier.)
  • Animations — 5/5 types (open/close/tag/focus/layer) + analytical spring physics, unit-tested; hardware cursor + direct scanout.
  • Input — keyboard/pointer/touchpad + swipe gestures, caps-to-ctrl, input-method + text-input + virtual-keyboard (OSK apps work).
  • HDR / colour — wp_color_management_v1 Phase 1 shipped; fp16 linear composite math + GLSL/CPU parity (Phase 2 scaffolding).

Genuinely open#

Real, and margo's to fix#

  • Multi-GPU / hybrid-graphics offload — only primary_gpu / primary_node today; no GpuManager. Single-GPU works; iGPU+dGPU PRIME offload is not implemented. The one real capability gap vs niri/Hyprland. Matters on dual-GPU laptops; irrelevant on single-GPU machines.

Blocked / deferred (per roadmap §15.10 — not effort)#

  • P13 wp_tearing_control_v1 (game tearing / immediate flip) — upstream-blocked: smithay's DrmCompositor exposes no tearing / async page-flip. Advertising it would be a no-op until smithay lands it.
  • ~~P12 zwlr_output_power_management_v1~~ — SHIPPED in 1.0.2 (DPMS via the recoverable request_dpms deferred-queue path; input-wake
  • VT-switch both recover).
  • P11 wp_drm_lease_device_v1 (VR headsets) — architecture-blocked: lease_request needs synchronous DrmDevice access that the MargoState / BackendData split deliberately walls off. Lowest value.
  • HDR Phase 2/3/4 runtime — fp16 swapchain switch + ICC LUT need a smithay DrmCompositor reformat API that isn't exposed yet (~80 LOC waiting upstream).

Pre-1.0 QA (not new code)#

  • ~~Run manual-checklist.md green on real DRM hardware (the existing gate).~~ Done — cleared ahead of the v1.0.0 tag (2026-06-09).

Nice-to-have (1.x / polish — not 1.0 blockers)#

Two items previously listed here were wrong — they already ship

Earlier revisions listed interactive overview for all layouts and window grouping/tabbed stacking as gaps. Both shipped and are verified against road_map.md §15.6: overview(m){grid(m)} is one dynamic grid over all visible clients (not scroller-only) with an Alt+Tab MRU cycle, hot-corner, and 4-finger swipe; grouping/stacking is provided by deck, monocle, scroller (niri columns), and the overview switcher. Do not re-list them.

  • A Hyprland-style persistent per-group tab-bar chrome — the only piece of grouping not present. Grouping itself already works (deck/monocle/scroller/ overview); this is cosmetic polish, not a capability gap.
  • i18n / Turkish UI for mshell.
  • Touch-first OSK app packaging (the input-method protocols are ready).
  • A second-pass config parser with a real grammar (better error messages).