Remote desktop built on Moonlight and Sunshine. Stack and specification.

A company's Windows workstation arrives as a video stream in the browser or in a native window of the GGS desktop app: over WebTransport straight from our own data server, never by way of the API.

In development

As of October 2026

The way a picture travels

Browser or desktop app

WebCodecs in a worker

Data server

Go · WebTransport

Stream bridge

moonlight-common-c

Windows workstation

Sunshine

At a glance

The key figures of the remote desktop, backed by the code.

  • Up to 3840 × 2160

    Resolution, 1920 × 1080 at 60 frames per second by default

    Sunshine integration

  • WebTransport

    Over QUIC with TLS 1.3; picture and sound never pass through the API

    Data plane in Go

  • Self-hosted

    Our own data server, Windows workstations with Sunshine

    Architecture

How a session runs

From the click on “Connect” to the workstation being locked.

  1. Sign in

    Sign-in goes through the website, in the desktop app as well, using the same accounts.

  2. Pick a computer

    In the list of computers you have been granted, one click on “Connect” is enough.

  3. Check and ticket

    The API checks rights and policy, reserves the workstation and issues a one-time ticket that is valid for 60 seconds and bound to the session and the server.

  4. Connect

    The session window opens a WebTransport connection over QUIC to the data server and presents the ticket.

  5. Stream

    Each session has its own process talking to Sunshine on the workstation. Picture and sound are passed through without re-encoding and decoded in the app.

  6. End

    Closing the window ends the session. The workstation is locked, and only then is it free again.

The stack

Six parts with clear boundaries: the API steers, the data server streams, the app shows.

  • Browser and desktop app

    In the browser or in the desktop app (Electron and React): WebTransport and WebCodecs run in a worker, sound in an AudioWorklet.

  • Data plane

    A service in Go with quic-go and webtransport-go. It checks tickets, enforces policy and runs the sessions.

  • Stream bridge

    moonlight-common-c with ENet and nanors, as a process of its own per session. It speaks GameStream to Sunshine.

  • Control plane

    TypeScript on Bun with Elysia and Better Auth: session brokering, rights, policies and audit. Data in PostgreSQL, occupied seats in Redis.

  • Contracts

    Protobuf with buf and Connect RPC: the same messages across every language boundary.

  • Workstation

    Windows 11 Pro with Sunshine from the stable releases. Sunshine captures the screen, encodes it and plays back the input.

Picture and sound as a video stream.

Straight from your own data server.

Never through the API.

Specification

Picture

Codec
H.264
More codecs
HEVC and AV1Planned
Resolution
up to 3840 × 2160, 1920 × 1080 by default
Frame rate
60 frames per second by default
Colour
Rec. 709, 4:2:0
Bitrate
derived from resolution and frame rate, 2 to 100 Mbit/s
Encoding
on the workstation by Sunshine: NVENC, AMF, Quick Sync or software
Decoding
WebCodecs in the browser and in the desktop app, tuned for low latency
Policies
resolution, frame rate and bitrate can be capped per group

Sound

Codec
Opus, 48 kHz
Channels
stereo
Microphone
not transmitted

Input

Keyboard
by key position; the workstation's layout applies
Mouse
absolute, or relative with pointer lock, five buttons
Mouse wheel
vertical and horizontal
Fullscreen
with keyboard lock; shortcuts go to the workstation
Ctrl+Alt+Del
not transmitted
Clipboard, files, devices
through an agent on the workstationPlanned
Touch and game controllers
not intended

Transport

Protocol
WebTransport over HTTP/3 (QUIC)
Data path
picture, sound and input directly between app and data server, never through the API
Re-encoding
none; the data server passes Sunshine's stream through
Reconnecting
within a grace period, 90 seconds by default
Relay and NAT traversal
for sites without a direct connectionPlanned

Security

Sign-in
the website's accounts, including OIDC, LDAP and groups
Rights
per group and computer; policies are merged restrictively
Tickets
single-use, valid for 60 seconds, bound to session and server, signed with Ed25519
Encryption
TLS 1.3 with a pinned certificate to the data plane; the link to the workstation is fully encrypted
Pairing
with Sunshine, automatic, with nothing for users to do
Isolation
a process of its own per session
End of session
locks the workstation
Audit
session events are logged, picture, sound and clipboard never

Platforms

macOS
Apple silicon and Intel
Windows
x64 and ARM64
Linux
x64, as AppImage and deb
Browser
Chrome and Edge, without an app of its own
Mobile
not intended
Workstation
Windows 11 Pro with Sunshine
Data server
container image, self-operated

Licences

Stream bridge
moonlight-common-c under the GPL-3.0, separated from the rest of the server as a process of its own
ENet, nanors
MIT
Sunshine
GPL-3.0; not shipped, installed from the official releases
Desktop app
contains no GPL code

Status

Built
control plane with session brokering, tickets, rights, policies and audit; data plane with reconnecting; automatic pairing; the session in the browser and in the desktop app's session window
Tested
end to end against Sunshine in a Linux container and in a Windows VM
Open
a test on workstation hardware with a GPU, and production operation; latency figures follow after that
Planned
clipboard, files and devices; HEVC, AV1 and beyond 4K; relay and NAT traversal

Questions about the remote desktop

Answered briefly; the details are in the specification.

Also on GGS Network

The other pages, in short.

  • GGS3-DB

    The in-memory database with the PostgreSQL protocol, with stack, measurements and specification.

  • Team

    Who designs, builds and runs GGS Network.

  • Status

    Whether the website, API and services are reachable right now, measured continuously.