Architecture
The substrate, mapped.
Programs at the top, substrate in the middle, adapters at the boundaries. Read top to bottom for the platform shape.
Principles
- 01
Programs are first-class
Each program owns its domain. The launcher is a composition of programs, not a single monolith.
- 02
Substrate is shared
Realtime, social, presence, app rail, notifications, messaging — common machinery.
- 03
Adapters at boundaries
Source adapters (Steam, Epic, GOG) sit at one boundary; federation adapters at another.
- 04
Domain → state → action → execution
Library's layering pattern. Other programs follow it where it fits.
- 05
Engine packages are dependency-free
Spatial engine is pure Dart and Flame, zero knowledge of host concerns.
The stack
Launch flow
User clicks Launch on a game tile
→ Library widget
→ ActionResolver (which CTA, which source, which path)
→ Source adapter (Steam / Epic / GOG / Eternia / manual / emulator)
→ Execution layer
→ Process spawns
→ Presence updates ("in game")
→ Notifications dispatch to friends
→ Centrifugo personal channel emits updateThe spine pattern from Library, generalized where it fits
Substrate roster
The realtime substrate
Nexus is the umbrella for chat, presence, voice, streaming, and spatial — the realtime substrate that every program plugs into. Chunks A–I shipped; Chunk J is in active rewrite.
DMs, channels, threads, broadcasts
Every conversation lane in one shell — DMs, server channels, threads, broadcast public channels. Rich content renderers for polls, tasks, embeds, and commerce flows.
Friends, profiles, presence
Friends, followers, blocks, profiles — native and federated Bluesky in the same panel. Three async lanes with distinct cache lifetimes so nothing blocks or goes stale.
The sidebar that learns
The left sidebar in the launcher ranks tile candidates from recency, frequency, unread, social, temporal, and day-profile signals. Pinning is a first-class action.
Local-first inbox
Notifications inbox with realtime synthesis, read-state, swipe-to-dismiss, deep-link routes, and native Windows toast bridging.
Sticky, debounced, restored
Online / away / invisible state with batch lookups. Manual state is sticky; auto-transitions never clobber it. Server restores last-asserted state on reconnect.
Launcher-wide media session
Theater, floating, and mini modes for stream and media playback across the launcher. Design-stage — no implementation commits yet.