Stream your Steam Deck screen to any browser.
Hardware accelerated, one-tap start from Game Mode.
Steam Deck (Game Mode)
┌────────────────────────────────────────────────────────┐
│ │
│ Gamescope → kmsgrab → FFmpeg (VAAPI H.264) │
│ │ │
│ ┌───────┴────────┐ │
│ │ │ │
│ MPEG-TS HTTP MediaMTX RTSP │
│ (stream_server) (WebRTC relay) │
│ │ │ │
│ :7770 :8889 │
│ │
│ Decky QAM: [Start Streaming] Quality Method │
└────────────────────┬───────────────┬───────────────────┘
│ │
┌──────▼──────┐ ┌──────▼──────┐
│ mpegts.js │ │ WebRTC │
│ ~500ms │ │ ~200ms │
│ Any browser │ │ Any browser │
└─────────────┘ └─────────────┘
- One-tap streaming from Steam Deck QAM (Quick Access Menu)
- Two streaming methods:
- MPEG-TS - stable, ~500ms latency, works everywhere
- WebRTC - lower latency ~200ms via MediaMTX
- VAAPI hardware encoding - H.264 on AMD GPU, near-zero CPU usage
- Quality presets - 480p30, 720p30, 720p60, 1080p30, 1080p60
- Live stats - viewers, bytes sent, encoder status in QAM
- Auto-restart - recovers from capture failures
- No Desktop Mode required - works entirely in Game Mode
Search for Prysm in the Decky plugin store (coming soon).
curl -sL https://raw.githubusercontent.com/hostsrc/decky-prysm/main/install.sh | bashDownload Prysm-v0.2.0.zip from Releases, extract to ~/homebrew/plugins/, restart Decky.
- Open a game on your Steam Deck
- Press
...(QAM button) - Find Prysm in the plugin list
- Choose Method (MPEG-TS or WebRTC) and Quality
- Tap Start Streaming
- Open the URL on any device on the same network
- Steam Deck running SteamOS 3.5+
- Decky Loader installed
- FFmpeg with VAAPI (pre-installed on SteamOS)
- Game must NOT have
ENABLE_GAMESCOPE_WSI=0in launch options
PRYSM
┌─────────────────────────────┐
│ [Start Streaming] │ ← one tap
│ Status: Ready │
│ Method: MPEG-TS (~500ms) ▾ │
│ Quality: 720p 30fps ▾ │
│ Audio: [on] │
└─────────────────────────────┘
When streaming:
┌─────────────────────────────┐
│ [Stop Streaming] │
│ Status: Streaming │
│ URL: http://192.168.1.50:.. │
│ Viewers: 1 │
│ Sent: 56.2 MB │
│ Encoder: Active · 720p30 │
└─────────────────────────────┘
Tested on Steam Deck with Hades over WiFi and Ethernet:
| Metric | 720p30 | 1080p30 |
|---|---|---|
| Bitrate | ~5 Mbps | ~8 Mbps |
| Decoded FPS | 29 fps | 29 fps |
| Dropped frames | <1% | ~4% |
| Buffer | 0.4s | 0.4s |
| CPU usage | <3% (VAAPI) | <3% (VAAPI) |
# Clone
git clone https://github.com/hostsrc/decky-prysm.git
cd decky-prysm
# Install deps
pnpm install
# Build
make build
# Deploy to Steam Deck
make deploy DECK_IP=192.168.88.197
# Create distribution zip
make distdecky-prysm/
├── src/ # Decky frontend (TypeScript/React)
│ ├── index.tsx # Plugin root
│ ├── components/
│ │ └── ViewerPanel.tsx # Main streaming panel
│ ├── hooks/
│ │ └── usePrysmStatus.ts # Status polling
│ └── lib/backend.ts # Typed backend callables
├── main.py # Decky Python backend
├── server/
│ └── stream_server.py # MPEG-TS HTTP server
├── backend/
│ ├── mediamtx.yml # MediaMTX WebRTC config
│ └── prysm-engine/ # Rust streaming engine (future)
├── bin/
│ └── mediamtx # MediaMTX binary (WebRTC mode)
├── dist/index.js # Built frontend bundle
├── plugin.json # Decky plugin metadata
├── package.json
├── Makefile # build/dist/deploy commands
├── install.sh # One-liner installer
└── LICENSE # GPL-3.0-or-later
- MPEG-TS streaming with mpegts.js viewer
- WebRTC streaming via MediaMTX
- VAAPI hardware H.264 encoding
- Quality presets (480p → 1080p60)
- Live stats in QAM
- Auto-restart on capture failure
- Decky Plugin Store distribution zip
- Audio streaming
- Native PipeWire capture (replace kmsgrab)
- Native Rust streaming engine
- QR code for mobile viewer
- Discord Go Live automation
This project is licensed under the GNU General Public License v3.0 (GPL-3.0).
The Decky Plugin Template portions are licensed under BSD-3-Clause (see full LICENSE file).
If you just use Prysm - do whatever you want, it's free.
If you fork or modify Prysm - you must:
- Keep the source code open (you can't make it proprietary)
- Include this same GPL-3.0 license
- State what you changed
If you distribute Prysm - same as above, plus you must provide the source code.
In short: you can use, study, modify, and share it freely - but you can't close-source it. Anything built on Prysm stays open.



