Install
ReplayVOD ships as a Docker Compose stack. On macOS and Linux a one-line installer wraps the same steps; on Windows, clone the repo and run Docker Compose yourself.
Requirements
Section titled “Requirements”- A Twitch developer application (for
TWITCH_CLIENT_IDandTWITCH_SECRET). - Your numeric Twitch user ID (for
OWNER_TWITCH_ID). - Docker (Docker Desktop on Windows).
ffmpegis bundled in the Docker image.
Installer (macOS / Linux)
Section titled “Installer (macOS / Linux)”curl -fsSL https://replayvod.com/install.sh | shThe installer:
- Clones the latest release tag into
~/replayvod/(falls back tomainbefore the first release). - Writes
server/.envfrom the example and generatesSESSION_SECRETlocally. - Prompts for
TWITCH_CLIENT_ID,TWITCH_SECRET, andOWNER_TWITCH_IDif a terminal is available. The secret prompt is hidden. - Starts ReplayVOD with
docker compose up -d, which pulls the prebuilt image.
Overrides
Pick a different directory or database profile:
curl -fsSL https://replayvod.com/install.sh | \ REPLAYVOD_DIR=/srv/replayvod REPLAYVOD_PROFILE=postgres shPin a specific version (tag or branch) instead of the latest release tag:
curl -fsSL https://replayvod.com/install.sh | REPLAYVOD_REF=v1.2.3 shConfigure without starting containers:
curl -fsSL https://replayvod.com/install.sh | REPLAYVOD_NO_START=1 shManual Docker
Section titled “Manual Docker”Clone the repo and run Docker Compose. This is the only path on Windows, and works on macOS and Linux if you want full control.
git clone https://github.com/befabri/replayvod.gitcd replayvodcp server/.env.example server/.env$EDITOR server/.envdocker compose --env-file server/.env --profile sqlite up -dgit clone https://github.com/befabri/replayvod.gitSet-Location replayvodCopy-Item server/.env.example server/.envnotepad server/.envdocker compose --env-file server/.env --profile sqlite up -dFill TWITCH_CLIENT_ID, TWITCH_SECRET, and OWNER_TWITCH_ID in server/.env before starting, and generate SESSION_SECRET (any 32-byte hex string, e.g. openssl rand -hex 32). The EventSub HMAC secret is generated and stored in the database automatically.
docker compose up -d pulls the prebuilt image ghcr.io/befabri/replayvod:latest (linux/amd64 and linux/arm64); add --build to build from the local source instead. Use --profile postgres to run against Postgres.
Build from source
Section titled “Build from source”Requires Go 1.26+, Node 22+, Task, and ffmpeg on PATH.
git clone https://github.com/befabri/replayvod.gitcd replayvodtask setup # go mod download + npm installtask dev # server on :8080, dashboard on :3000task build # production buildsInstall layout
Section titled “Install layout”Directory~/replayvod/
Directoryserver/
- .env
- config.toml
- docker-compose.yml
Directorydata/
- …
Same layout, wherever you cloned the repo (typically %USERPROFILE%\replayvod\):
Directoryreplayvod/
Directoryserver/
- .env
- config.toml
- docker-compose.yml
Directorydata/
- …
Required environment
Section titled “Required environment”After install, fill these in server/.env:
TWITCH_CLIENT_ID=...TWITCH_SECRET=...OWNER_TWITCH_ID=...SESSION_SECRET=... # installer generates this, or: openssl rand -hex 32For a public deployment also set:
PUBLIC_BASE_URL=https://your-domain.exampleThe Compose file derives CALLBACK_URL and FRONTEND_URL from PUBLIC_BASE_URL.
Next steps
Section titled “Next steps”- Open http://localhost:8080 and sign in with Twitch.
- Tune recording behaviour and storage in
server/config.toml. - If you need EventSub but can’t expose a public HTTPS endpoint, set up the Connect relay.