Shop our hardware preflashed OpenPuck dongles and Steam Machine gear, 15% below Etsy Shop now →

SteamOS · Bazzite · CachyOS · Steam Deck · Windows (beta)

Run your gaming PC from the couch.

Couchside puts a remote and a controller for your living-room Linux gaming PC on your phone, with a live dashboard of the box beside them. When the TV goes black, your phone is the screen: see whether the box is alive, read the logs, restart the display, or pick up a virtual controller. None of it leaves your Wi-Fi.

steamdeck  ● online   os SteamOS 3.6  service 2.9.117  tls pinned  mode Game
cpu 47.0°C   batt 100% charging   mem 6.1 / 15.6 GB   /home 118 / 512 GB
display 1920×1080 @ 60 Hz · HDMI · docked   audio HDMI   uptime 9h 12m

Free for a week, then a one-time $7.99 unlock.

one payment · no subscription · no accounts · no ads · or build it yourself

● LIVE the real app, running in your browser against a mocked box

app 2.9.60 · web build · nothing here talks to a real machine

Install the service on the box.

One command. It installs a small stdlib-only Python service with no dependencies, prints a PIN and a QR, and stays running. Re-run it any time; it keeps your token and pairings.

01 · setup

Linux SteamOS · Bazzite · CachyOS · Steam Deck

$ curl -fsSL https://couchside.tv/install.sh | bash

Read the script first → New Steam Deck? Run passwd once in Desktop Mode so the installer can ask for permission. With Decky Loader installed, the same command adds a Couchside panel to the Quick Access Menu.

Windows 10 / 11 beta

> irm https://couchside.tv/install.ps1 | iex

PowerShell; it asks for admin via UAC. Read the script first → Linux came first and is the more polished of the two; the Windows service is newer, so file anything you hit. Unprivileged service, fixed allowlist, no root daemon.

pair

Scan for your box, type the PIN

Open Couchside and tap Scan for boxes. The box shows a short PIN on its own screen; type it in and you are paired. No IP addresses or tokens to copy. The QR the installer prints works too.

use

Stay on the couch

Watch the vitals, restart a wedged display, tail the logs, or flip to the controller. You never have to go find a keyboard again.

opt-ins

Extra powers stay off by default

couchside allow-system-updates on, allow-updates, allow-launchers. Each is enabled only on the box, never from the phone, and each grants one fixed root-owned wrapper rather than a blank sudo. Details in the README →

What it does.

Vitals, rescue and input for the machine under the TV. The parts you reach for from the couch, one line each.

02 · spec sheet
CapabilityDetailWhere
Live dashboardCPU temperature (Linux; on Windows it depends on the motherboard), load, memory, per-disk usage, uptime, every GPU, the Display / Audio signal actually going to the TV, and the health of every service you watch. Refreshed every few seconds.linux · windows
Rescue actionsRestart the display session (the wedged gamescope black screen), reboot, power off. Grouped by danger, double confirm on the destructive ones.linux · windows
Desktop ⇄ Game ModeOne tap either way, no keyboard or mouse. Optionally hold the Guide button on a controller to trigger the handoff without the phone.steamos · bazzite
Virtual controllerA standard Xbox pad the box cannot tell from plastic: sticks, D-pad, ABXY, triggers, haptics. Landscape full-screen mode, a one-handed MOVE mode, and controller themes.linux (uinput) · windows (ViGEmBus)
Swipe, trackpad, keyboardAn Apple-TV-style swipe surface for Kodi and Big Picture, a relative-mouse trackpad, and a keyboard that types straight into the box. Combos panel for copy, paste, undo and media keys.linux · windows
Log viewerRecent error logs for any watched service, from your phone, without an SSH session.journald · event log
PairingPIN shown on the box's screen, or the QR the installer prints. No IP addresses, no tokens to copy.all
TV and powerA real remote for a smart TV on your network: D-pad, OK/Back/Home, power, volume, input, an on-screen keyboard. LG webOS, Roku, Android / Google TV, Hisense; Samsung in beta. HDMI-CEC and RS-232 where the box has them; a spare Raspberry Pi adds CEC via the Pi bridge. Box-side volume, mute, sleep and wake.linux (roku on windows)
Remote desktopSee and drive the whole desktop. Hardware-decoded H.264 where the box can encode, still frames where it cannot. Tap where you want to click.linux / wayland · opt-in
Audio outputMove sound between HDMI, a Bluetooth speaker and the built-in output in one tap, including whatever is already playing.pipewire / pulseaudio
Front-panel lightColour, brightness, off. Light-bar sequences on hardware that has them.where supported
Decky LoaderInstall, repair, update or remove Decky and its plugins from Setup. Opt in once on the box; a box without Decky is left untouched.steamos · bazzite
Skins and colour packsSix skins with a live preview, colour packs (OLED Black, Steam, Nord, Dracula), accents, an optional alarm pulse for a hot vital.app
Three phone screens side by side: Actions, Console and Launch
actions · console · launch — shot against a real box

Recorded on a real box.

A phone driving Steam Big Picture over home Wi-Fi. Nothing mocked up.

03 · footage
menus and input modes
library and launch
typing into the box

What talks to what.

Tap a task to watch where the traffic goes. Then pull the internet cable and see what changes. (Spoiler: almost nothing.)

04 · wire
YOUR HOME · WI-FI INTERNET Your phonethe Couchside app Gaming PCservice · port 8787 TVHDMI App Store · Playunlock check · app updates GitHubservice source · installer Couchside clouddoesn't exist · nothing to hack

The app and the service speak plain HTTP with a bearer token, phone to box, on your Wi-Fi. Pick a task above to see exactly what moves where.

Pay once. Or don't pay at all.

The service on your box is fully open source (MIT). The app is source-available: read it, or build it onto your own phone for free for personal use. The one-time price buys the ready-made build from the stores, kept updated, and supports the work behind it.

05 · pricing

“I love opening my phone, finding my favorite game, and hitting launch, so by the time I've walked over to my gaming spot it's loaded and ready to go. Once it fits your setup, you'll get it. That's why the unlock is one payment instead of another monthly bill.”Taylor, maker of Couchside

$7.99once, after 7 free days

Try free for 7 days, then unlock once

Download it free and use every feature for a full week, no commitment. If it earns a spot in your living room, keep it forever. One payment, one time, no accounts. Everything is a subscription these days. I hate that, so Couchside isn't one. The money funds this project and supports my family.

$0build it yourself

Compile it from source

The app's full source is on GitHub: read it, compile it onto your own phone with Expo, tweak it for yourself. Source-available for personal, noncommercial use (PolyForm Noncommercial); the service and installer are MIT, so you can even build your own client. Same software, your labor instead of $7.99. All I ask is that you don't repackage and sell it.

It never leaves your network.

Couchside talks only to the service on your own LAN. There is no cloud in the middle, because there is no cloud at all.

06 · security
  • Token auth. A per-box bearer token minted on the box and stored in your phone's keychain. Only a paired phone can talk to the service; couchside new-token revokes every phone at once.
  • TLS, pinned at pairing. The service serves HTTPS with a self-signed certificate whose fingerprint rides the pairing QR. A box presenting a different key is treated as unreachable, never downgraded.
  • Least privilege. The service runs an exact, audited allowlist of commands and nothing else. A client id is looked up, never interpolated; subprocess is always an argv list.
  • No telemetry. No analytics, no crash reporting, no first-party endpoint at all. The only outbound traffic is GitHub for signed updates and the stores for the unlock.
  • Auditable. The service is MIT and a single stdlib-only Python file. The app's source is public too. The security page also says what this design does not protect against.

verify it yourself, from any machine on your LAN

curl http://YOUR-BOX.local:8787/api/ping

The discovery surface: version, hostname, ports, fingerprints. No token, no control.

curl -i http://YOUR-BOX.local:8787/api/status

Returns 401. Everything that changes state needs the bearer token.