Single Container
Everything runs in one container - web UI, API, PostgreSQL, and voice server. No orchestration needed. Works with Docker, Podman, or nerdctl.
Voice engine status
The self-hosted release currently uses LiveKit as the voice engine. We are building a custom voice engine internally and will transition self-host to it once feature-complete. LiveKit is battle-tested and production-ready - your deployment will work well today and the migration path will be seamless.
Self Host
Single container, zero external dependencies. PostgreSQL, voice server, API, and web UI all bundled in one image. Pick your container runtime, run one command, and you have a fully functional voice server at localhost:3000.
Everything runs in one container - web UI, API, PostgreSQL, and voice server. No orchestration needed. Works with Docker, Podman, or nerdctl.
Your data stays on your hardware. Own authentication, storage, and infrastructure policies. No external calls, no telemetry, no platform lock-in.
User sessions, rooms, and messages persist in a named volume across restarts. Built-in backup and restore commands for database portability.
Get Started
Clone the repo and run the script for your container runtime. Access the web interface at http://localhost:3000 and enter a nickname to begin.
./scripts/podman.sh up
./scripts/docker.sh up
./scripts/nerdctl.sh up
Or build from source: git clone https://github.com/lag-app/self-host.git && cd self-host && ./scripts/docker.sh build
1
Container
0
External Dependencies
3
Container Runtimes
MIT
License
Open these ports on your firewall for remote access. All voice media uses UDP for the lowest possible latency.
3000 TCP Web interface7880 TCP Voice signaling (HTTP)7881 TCP Voice signaling (TCP)50000-50200 UDP Voice media streamsOverride defaults with environment variables. Most values auto-configure for local development - only set what you need to change.
SESSION_SECRET Auto-generatedSession token signing key
EXTERNAL_IP Auto-detectedPublic IP for voice connectivity
LAG_VOICE_KEY devkeyVoice server API key
LAG_VOICE_SECRET secretVoice server API secret
LAG_IMAGE ghcr.io/lag-app/self-host:latestContainer image reference
LAG_NAME lagContainer identifier
All management through a single script. Replace <runtime> with podman, docker, or nerdctl.
up Pull and start the containerdown Stop container, preserves datarestart Stop then restartbuild Compile from source and launchlogs Stream container outputstatus Display container state and port mappingsshell Access bash terminal inside containerbackup [file] Export PostgreSQL databaserestore <file> Import database from backupnuke Remove container and data permanentlySet EXTERNAL_IP to your server's public address. Verify UDP port forwarding for 50000-50200 and check
container logs.
Confirm ports 3000 and 7880 are not already in use. Run the status command to check container state.
Run nuke followed by up for a full factory reset. This removes all data permanently.
Lag self-host is fully open source. Read the code, fork it, contribute back. Issues, pull requests, and feature discussions all happen on GitHub.