How It Works
Astral Travel is a remote desktop app that wraps a streaming engine and peer-to-peer tunnel into a simple two-screen interface.
GPU Detection & Encoding
When you start hosting, the app detects your GPU and selects the optimal hardware encoder:
| GPU | Vendor | Encoder | Codec Priority |
|---|---|---|---|
| NVIDIA (GTX/RTX) | nvidia | NVENC | HEVC > H.264 |
| AMD (Radeon) | amd | VAAPI | HEVC > H.264 |
| Intel (integrated/Arc) | intel | VAAPI | H.264 |
| Unknown/None | — | Software | H.264 |
The viewer asks for a picture that matches its own screen: the same resolution (up to 4K) and 60 fps, or 120 fps on a 120 Hz screen. Bitrate follows the resolution automatically. Only the host's main monitor is streamed.
No manual tuning required.
Network & Encryption
Astral Travel connects machines that can already reach each other: the same office or home network, or both machines on the same Tailscale tailnet. It opens nothing to the internet and uses no relay server.
- Each share gets a fresh password, and a code stops working the moment sharing stops.
- Pairing uses a new certificate for every connection; the host only accepts viewers that paired with the current code.
- The stream itself is encrypted (AES-GCM).
Connection Codes
The connection code (e.g. AT-0810-M2GN-B1J6-…) contains:
- Up to 4 addresses for the host (office network first, then Tailscale)
- The host's one-time sharing password
- A checksum, so a mistyped code is rejected instantly
The code is base64url-encoded and dash-separated for readability. Share it via any messaging app — it's not sensitive beyond enabling a connection attempt, and the TLS fingerprint prevents man-in-the-middle attacks.
Architecture
┌─────────────────────────────────┐
│ Electron App │
│ ┌───────────┐ ┌────────────┐ │
│ │ React UI │ │ Main Proc │ │
│ │ (renderer)│◄─┤ (electron) │ │
│ └───────────┘ └─────┬──────┘ │
│ │ │
│ ┌─────────────┼──────┐ │
│ │ │ │ │
│ ┌────▼────┐ ┌─────▼───┐ │ │
│ │ Tunnel │ │Streaming│ │ │
│ │ (p2p) │ │ Engine │ │ │
│ └─────────┘ └─────────┘ │ │
└─────────────────────────────────┘- React UI — Three screens (home, host, client). Communicates with the main process via IPC bridge.
- Main Process — Manages the streaming engine, GPU detection, tunnel, and auto-configuration. All process spawning happens here.
- Network — Direct connection over the local network or Tailscale. No relay, no router changes.
- Streaming Engine — Bundled and managed silently. Handles video encoding, streaming protocol, and input forwarding.
The renderer never touches system APIs directly. Everything goes through 5 IPC methods exposed on window.at.