Tracking issue for the Linux tray gap documented in platform/linux/host/README.md ("Honest gaps") and absent from rivet/system on Linux (Windows Shell_NotifyIconW and macOS NSStatusItem both have first-party support).
Evidence from dogfooding: 3 of 4 app rewrites currently in flight (movebit, brainfuel, syncpilot) are tray-resident apps on their primary platforms; on Linux they can only fall back to single-instance activation to reopen a window today.
Proposal sketch (compositor caveats acknowledged):
- Host-side: a
rivet::system::Tray adapter over StatusNotifierItem (org.kde.StatusNotifierItem) — KDE/native support, GNOME via AppIndicator extension, with documented behavior when no host is present (like Notifications today: capability probe, no-op fallback).
- Backend-side: mirror the existing
set-tray-menu! Racket API on the Linux adapter so apps get the same contract as Win/macOS.
- Define the fallback story when no StatusNotifierItemHost exists (GNOME without extensions): single-instance activation as the reopen path (already first-party).
Happy to contribute the PR against platform/linux/system if the contract shape sounds right.
Tracking issue for the Linux tray gap documented in
platform/linux/host/README.md("Honest gaps") and absent fromrivet/systemon Linux (WindowsShell_NotifyIconWand macOSNSStatusItemboth have first-party support).Evidence from dogfooding: 3 of 4 app rewrites currently in flight (movebit, brainfuel, syncpilot) are tray-resident apps on their primary platforms; on Linux they can only fall back to single-instance activation to reopen a window today.
Proposal sketch (compositor caveats acknowledged):
rivet::system::Trayadapter over StatusNotifierItem (org.kde.StatusNotifierItem) — KDE/native support, GNOME via AppIndicator extension, with documented behavior when no host is present (like Notifications today: capability probe, no-op fallback).set-tray-menu!Racket API on the Linux adapter so apps get the same contract as Win/macOS.Happy to contribute the PR against platform/linux/system if the contract shape sounds right.