Configuration
Environment Variables
Complete .env configuration reference
NixStream configuration lives in .env on manual installs, or in .env.docker.example for Docker (install.sh copies it to .env).
Application
| Variable | Description |
|---|---|
APP_NAME | Display name (Nixstream in Docker) |
APP_URL | Public URL (no trailing slash) |
FRONTEND_URL | Frontend origin |
EDGE_BASE_URL | Public URL of nixstream-edge (player-reachable) |
EDGE_INTERNAL_URL | Internal Edge URL for health checks (Docker: http://edge:8080) |
EDGE_SIGNING_SECRET | Shared HMAC secret with Edge |
EDGE_SESSION_TTL_VOD | VOD playback session TTL in seconds (default 7200) |
EDGE_SESSION_TTL_LIVE | Live playback session TTL in seconds (default 21600) |
EDGE_SESSION_PREFIX | Redis key prefix for sessions (default edge:play:) |
EDGE_AUTO_CONNECTED | true in Docker so Edge integration is connected without manual setup |
APP_DEBUG | false in production |
APP_ENCODING_MAX_RESOLUTION | Max encode height (default 4000) |
Database
| Variable | Docker | Manual |
|---|---|---|
DB_HOST | db | 127.0.0.1 |
DB_DATABASE | nixstream | your database |
DB_USERNAME | nixstream_user | your user |
DB_PASSWORD | generated | your password |
Redis & queues
| Variable | Description |
|---|---|
QUEUE_CONNECTION | redis |
CACHE_STORE | redis |
SESSION_DRIVER | redis |
REDIS_HOST | redis (Docker) or 127.0.0.1 |
REDIS_QUEUE_RETRY_AFTER | 7200 (encoding job timeout) |
Media encoding
| Variable | Description |
|---|---|
FFMPEG_BINARIES | FFmpeg path |
FFPROBE_BINARIES | FFprobe path |
SHAKA_PACKAGER_BINARIES | Shaka Packager path |
media_cli_path | bin/media-vod (in config/media.php) |
Whisper transcription
| Variable | Docker default |
|---|---|
WHISPER_CLI_PATH | /opt/whisper/whisper-cli |
WHISPER_MODELS_PATH | /opt/whisper/models |
Live streaming
| Variable | Description |
|---|---|
MEDIA_SERVER_HOST | Media API URL |
MEDIA_SERVER_API_KEY | API key (auto-generated in Docker) |
MEDIA_SERVER_INGEST_IP | Public IP for RTMP |
MEDIA_JWT_SECRET | JWT signing secret |
MEDIA_LIVE_API_PORT | 8888 |
MEDIA_LIVE_RTMP_PORT | 1935 |
OAuth integrations
| Variable | Provider |
|---|---|
VIMEO_CLIENT_ID / VIMEO_CLIENT_SECRET | Vimeo |
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET | Google Drive |
DROPBOX_CLIENT_ID / DROPBOX_CLIENT_SECRET | Dropbox |
Redirect URIs use {APP_URL}/api/auth/{provider}/callback.
Broadcasting
BROADCAST_CONNECTION=log disables Reverb/WebSockets by default in Docker. Real-time features use polling, not WebSockets.
Config files
Additional settings in core/config/:
media.php: Encoding CLIedge.php: nixstream-edge base URL, signing secret, session TTLvideo.php: Video defaultsacl.php: Role permissions
Edge tenant settings (Integrations UI)
These are stored per tenant in the settings table (not .env):
| Key | Default | Description |
|---|---|---|
edge_base_url | from EDGE_BASE_URL | Public Edge URL for this tenant |
edge_verified_at | (none) | Set when Test connection succeeds |
edge_require_user_auth | 0 (off) | Bind playback sessions to user or share link |
edge_max_concurrent_devices | 0 | Max simultaneous sessions per user when auth is on |
Configure in Settings > Integrations > Edge. See Integrations, Edge.