Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/nestrilabs/nestri/llms.txt

Use this file to discover all available pages before exploring further.

The Steam runner is the primary way to play your existing Steam library through Nestri. It installs Steam inside a Linux container, launches it in Big Picture mode (also called “tenfoot”), and streams the display directly to your browser over WebRTC. Proton Experimental is pre-configured as the default compatibility tool, so most Windows games work without any manual setup.

How it works

The Steam runner container is built on the runner-common base image and adds:
  • Steam — installed via the Arch Linux package manager (pacman)
  • Proton Experimental — set as the default compatibility tool via config.vdf, so Windows games run automatically through Wine, DXVK, and VKD3D
  • Big Picture mode — Steam launches with steam -tenfoot -cef-force-gpu, which forces the controller-friendly UI required for input to work correctly in the browser
When the container starts, supervisord launches nestri-server alongside Steam. The nestri-server process captures the Wayland display, encodes video using GStreamer and your GPU, and sends the stream to the relay.
Big Picture mode (-tenfoot) is required. It enables controller input passthrough and provides a UI designed for remote interaction. Desktop mode is not supported in the current runner.

Container image

ghcr.io/nestrilabs/nestri/runner:nightly-steam-v3
The image is rebuilt nightly from the dev branch. No stable tags are published yet — pin to a specific digest if you need reproducibility. Before you can browse your library, you need to connect your Steam account to your Nestri profile. Nestri uses Steam OpenID for authentication — your Steam credentials never pass through Nestri’s servers.
1

Open the Nestri web app

Sign in at nestri.io with your Nestri account.
2

Navigate to account settings

Go to Settings → Linked accounts and click Connect Steam account.
3

Authenticate via Steam OpenID

Nestri calls GET /steam/popup/:id, which redirects you to https://steamcommunity.com/openid/login. Log in with your Steam credentials.After authentication, Steam redirects back to the Nestri API at /steam/callback/:id. Nestri verifies the OpenID response, fetches your Steam profile, and stores the link. The popup closes automatically.
4

Confirm the link

Your Steam display name and avatar appear under Linked accounts. You can link multiple Steam accounts to one Nestri profile.

Start streaming

1

Launch the Steam runner container

Start the container on your GPU-equipped machine. Replace YOUR_RELAY_HOST and my-room with your values.
docker run -d \
  --name nestri-steam \
  --gpus all \
  -e RELAY_URL="ws://YOUR_RELAY_HOST:8088" \
  -e NESTRI_ROOM="my-room" \
  -e RESOLUTION="1920x1080" \
  -e FRAMERATE="60" \
  -e VIDEO_CODEC="h264" \
  -e VIDEO_BITRATE="6000" \
  --restart unless-stopped \
  ghcr.io/nestrilabs/nestri/runner:nightly-steam-v3
The runner requires GPU access (--gpus all for NVIDIA, or the equivalent device passthrough for AMD/Intel). Without it, the container falls back to software encoding, which is too slow for real-time gaming.
2

Wait for Steam to sync your library

On first launch, Steam downloads your library metadata and any pending updates. This can take a few minutes depending on your internet connection. You can watch progress in the container logs:
docker logs -f nestri-steam
3

Open the Nestri web app and connect

Go to nestri.io, navigate to your session by room name, and click Play. Steam Big Picture mode appears in your browser.
4

Select and launch a game

Browse your library in Big Picture mode and launch a game. Proton Experimental handles Windows compatibility automatically.

Proton and compatibility

The Steam config file at ~/.local/share/Steam/config/config.vdf inside the container sets Proton Experimental as the global default compatibility tool:
config.vdf
"InstallConfigStore"
{
    "Software"
    {
        "Valve"
        {
            "Steam"
            {
                "CompatToolMapping"
                {
                    "0"
                    {
                        "name"    "proton_experimental"
                        "config"  ""
                        "priority" "75"
                    }
                }
            }
        }
    }
}
This means every game that does not have a per-game override uses Proton Experimental. You can override this for individual games from within Big Picture mode under Properties → Compatibility.
If a game has a verified Steam Deck rating, it is very likely to work with this setup — the runtime environment is similar to SteamOS.

Environment variables

The Steam runner inherits all runner-common environment variables. The most relevant ones for Steam:
VariableDefaultDescription
RELAY_URL(required)WebSocket URL of your relay node
NESTRI_ROOM(required)Unique room identifier for this session
NESTRI_LAUNCH_CMDsteam -tenfoot -cef-force-gpuCommand used to launch Steam — change with care
RESOLUTION1280x720Stream resolution (WxH)
FRAMERATE60Stream framerate (5–240)
VIDEO_CODECh264Video codec (h264, h265, av1)
VIDEO_BITRATE6000Target bitrate in kbps
GPU_VENDOR(auto)Select GPU by vendor (nvidia, amd, intel)
GPU_INDEX(auto)Select GPU by index when multiple GPUs are present
Do not change NESTRI_LAUNCH_CMD unless you know what you are doing. Removing -tenfoot disables Big Picture mode and breaks controller input.

Troubleshooting

Each runner container has its own Steam session. If you launch two containers with the same Steam account simultaneously, Steam will sign one out. Use a separate Steam account per container, or stop one container before starting another.
Check whether the game is listed as Steam Deck Verified or Playable on ProtonDB. For games rated Borked, no Proton version may work reliably. You can also try switching to a specific Proton version in the game’s Properties → Compatibility settings from within Big Picture mode.
The runner uses PipeWire with a virtual loopback device. If audio is missing, check that PipeWire and WirePlumber started correctly inside the container:
docker exec nestri-steam supervisorctl status
All services should show RUNNING.
Controller input requires Big Picture mode (-tenfoot). If you modified NESTRI_LAUNCH_CMD and removed this flag, restore it. Also confirm your browser supports the Gamepad API — Chrome and Edge have the most complete support.

Next steps

Heroic Games Launcher

Stream Epic Games Store and GOG titles with the Heroic runner.

Custom runner containers

Build a container for any Linux-compatible application or game.

Streaming server configuration

Tune GPU selection, encoding parameters, and bitrate settings.

Self-hosting overview

Full hardware requirements and deployment guide.

Build docs developers (and LLMs) love