source 

Your key is the address. Plug in, tap, play.

no macos arm64 build yet

release history

Games over QUIC: low-latency SteamOS streaming over iroh
Work in progress. Not a finished product.

why goq

  1. Your key is the address

    The FIDO2 key's hmac-secret seeds the iroh identity. Host and client derive the same node ID from the same physical key. No pairing codes, no accounts.

  2. Headless Sigil host

    A pure-Rust daemon on bare-metal Linux, no desktop, no display. Gamescope runs a private SteamOS session; PipeWire feeds a hardware H.264 encoder.

  3. Controller-first

    A virtual Xbox-style gamepad, keyboard, and relative mouse injected via uinput. D-pad PIN pad and a Back+Start escape chord, built for a couch.

  4. Audio included

    PipeWire capture to Opus in bounded datagrams, played back through an AudioWorklet next to the WebCodecs picture.

  5. Bounded everything

    Frame handoff capped at four, decode queue at two, every buffer bounded. Stale frames are dropped, not queued, so latency never drifts.

  6. One host, a few viewers

    Three viewers by default, eight at most, sharing one encoded stream over end-to-end encrypted iroh links, relay-assisted when a direct path isn't possible. Exactly one holds the controller. No third-party streaming service.

hardening next

The first target stays deliberately narrow: hardware H.264 at 1280×800/60. Bounded Iroh/MoQ media objects have landed: video now rides prioritized, cancellable groups with explicit GOP boundaries and keyframe recovery, and the legacy media tiers and JPEG fallback are gone. One to many viewers has landed as well: one encoded generation now serves up to eight authenticated viewers with a single transferable slot-0 input focus and per-peer revocation, while legacy clients stay strictly exclusive. These are the promoted steps still ahead.

  1. promoted · control

    Adaptive bitrate

    Feed RTT, loss, backpressure, and decode backlog into a bounded controller with measured recovery and no queue growth.

  2. promoted · motion

    Motion-sensitive resolution

    Favor fresh, smooth motion at lower resolution, then restore detail after motion settles without breaking pointer mapping.

  3. promoted · codec

    Auto Codec

    Select from end-to-end hardware support and measured latency. H.264 remains the safe baseline; compression ratio alone never wins.

how it works

sigil · bare-metal linux
  1. Steam and your game
  2. headless Gamescope session
  3. PipeWire video + audio capture
  4. hardware H.264 + Opus encode
gamepad + kb/m injected via uinput
portal · native app
  1. native iroh endpoint
  2. WebCodecs + AudioWorklet
  3. picture and sound appear
  4. controller, keyboard, mouse
any machine, near or far

three taps to steam

  1. provision sigil

    Run the Sigil setup command on a dedicated AMD Bazzite machine. It accepts only signed runtime packages; Gamescope becomes the headless display. A controller-first Decky Loader plugin manages the appliance from the couch. First-time pairing still needs a shell on the host.

  2. open portal

    Download the Portal build for your client machine and verify its published SHA-256. Tap your FIDO2 key; the D-pad PIN pad keeps onboarding couch-friendly.

  3. tap to play back+start

    Tap the same key anywhere else: SteamOS appears, your controller just works. Hold Back+Start for a second to escape the session.

You'll need a FIDO2 key with hmac-secret support (YubiKey, Google Titan, …) and an AMD Bazzite machine for Sigil. The first Portal release targets macOS arm64. It is ad-hoc signed rather than Apple-notarized, so macOS blocks the first launch until you allow it. Linux and Windows are built and attested every release but are not published; build from source until they pass their own acceptance gate. Runbook and source →