Contents

Run it

Self-hosting

The Docker kit runs the bridge, avatar page, and dashboard on your own server. It keeps the service ports bound to loopback.

Requirements

Use a Linux VPS with Docker Engine and the Compose v2 plugin. The documented minimum is 1 vCPU and 512 MB. You need an OpenAI-compatible LLM endpoint, its API key, a JEV gate endpoint, a Twitch bot account and OAuth token, and GOOGLE_API_KEY for TTS. You can run -setup on a laptop and copy the generated secrets to the server.

Install

Self-hosting is in early access: the installer and the container image are not public yet, so we set up the first self-hosted installs by hand. Message Telegram @ameobius and we'll send you the kit and help you start it.

The kit is created in ~/stream-mate/ by default. Configure TWITCH_NICK, TWITCH_OAUTH, TWITCH_CHANNEL, LLM_*, JEV_ENDPOINT, and GOOGLE_API_KEY in .env.

Check the install

Check that Compose reports the container as healthy, that the health endpoint responds, and that the bridge joined chat.

cd ~/stream-mate
docker compose ps
curl -s http://127.0.0.1:8432/healthz
docker compose logs -f

For OBS, add a Browser Source at http://localhost:8432/.

Dashboard

Issue a dashboard login token from the running container, then open the dashboard and paste the token.

docker compose exec stream-mate /bridge -config /config/config.json -issue-token streamer

The dashboard listens on port 8440. To reach it from another machine, create an SSH tunnel:

ssh -L 8440:127.0.0.1:8440 vps

Optional public access

Keep the service ports on loopback and put a TLS reverse proxy in front. A public HTTPS URL is needed for EventSub and billing webhooks.

mate.example.com {
  reverse_proxy 127.0.0.1:8440
}

Updates and rollback

The installer adds a nightly update entry at 04:17 by default. The update script resolves the image to an exact digest and recreates the container only when that digest changes. Data in the data volume—including memory, counters, dashboard tokens, and settings—survives updates.

STREAM_MATE_CHANNEL=latest follows merges to main; stable follows tagged releases. Before the first version tag, latest is the default; after a version tag publishes stable, the channel can be switched to stable. Use ~/stream-mate/update.sh --rollback to return to the previous digest. You can pin STREAM_MATE_IMAGE to a registry tag or digest.

Own config and tenants

To use your own config, uncomment the ./config.json:/config/config.json:ro mount in docker-compose.yml. For multiple streamers, follow the multi-tenant reference.