Four pieces move a frame from a machine to your browser. Each has its own page; this one shows how they connect.
The host captures and encodes
A Rust application on the machine you reach. It captures the display, encodes on the GPU and publishes to whichever transport the session uses. On Windows it can run as a service and drive a virtual display.
The services broker the session
A Rust API handles accounts, machines, plans and invites. A signaling server introduces host and viewer to each other and hands out relay access when a room needs one.
The transport carries the media
WebRTC for one to one, Media over QUIC for rooms. Both are encrypted end to end by the protocol itself.
The web client paints it
A Nuxt application decodes in the browser, keeps video, audio and input on one clock, and sends your input back.
By layer
Backend
Rust, Tokio, Axum, PostgreSQL, Redis.
Frontend
Nuxt, Vue, TypeScript, Tailwind CSS, Vite.
Real time
FFmpeg, WebRTC, QUIC, Media over QUIC, ViGEmBus.
What each layer owns
| Concern | Lives in | Why there |
|---|---|---|
| Capture and encode | Host | Closest to the GPU and the display |
| Accounts, plans, invites | Services | One source of truth for who may open what |
| Introductions and relays | Signaling | Neutral ground both sides can reach |
| Decode, sync, input | Web client | Nothing to install on the viewing side |