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). - 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:
- Asks where to install ReplayVOD. The default is
~/replayvod/. - Asks for a version tag or branch. Press Enter for the latest release tag.
- Asks for a database profile. The default is
sqlite; choosepostgresif you want Compose to start Postgres too. - Asks for the public URL. Press Enter for local-only
http://localhost:8080, or enter your HTTPS domain for a public server. - Writes
server/.envfrom the example and generatesSESSION_SECRETlocally. - Prompts for
TWITCH_CLIENT_IDandTWITCH_SECRET. The secret prompt is hidden. - Asks whether to start containers now, then runs
docker compose up -dif you say yes.
Manual 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 and TWITCH_SECRET in server/.env before starting, and generate SESSION_SECRET (any 32-byte hex string, e.g. openssl rand -hex 32). OWNER_TWITCH_ID is optional; leave it empty and the first successful login becomes owner. 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=...SESSION_SECRET=... # installer generates this, or: openssl rand -hex 32OWNER_TWITCH_ID=... # optional; empty = first login becomes ownerFor a public deployment also set:
PUBLIC_BASE_URL=https://your-domain.exampleThe server derives its Twitch OAuth callback and dashboard redirects 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.