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-portalis 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-v1viamlock(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 bothinstall.shand thePKGBUILDinto/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_v1Phase 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_nodetoday; noGpuManager. 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'sDrmCompositorexposes 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 recoverablerequest_dpmsdeferred-queue path; input-wake - VT-switch both recover).
- P11
wp_drm_lease_device_v1(VR headsets) — architecture-blocked:lease_requestneeds synchronousDrmDeviceaccess that theMargoState/BackendDatasplit deliberately walls off. Lowest value. - HDR Phase 2/3/4 runtime — fp16 swapchain switch + ICC LUT need a
smithay
DrmCompositorreformat API that isn't exposed yet (~80 LOC waiting upstream).
Pre-1.0 QA (not new code)#
- ~~Run
manual-checklist.mdgreen 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).