Where Does LiveKit Store Config and Recordings?
LiveKit configures via livekit.yaml, keeps call state in Redis, and writes recordings through egress to object storage.
Last updated
LiveKit itself stores no media on disk. The SFU routes live audio and video, keeps room state in Redis, and forgets everything when calls end. Persistence arrives through two side doors: config files that define behavior, and the egress service that exports recordings.
The server reads livekit.yaml through the config flag or env body. Egress takes its own YAML with API keys, the same Redis address, and one upload target among S3, Azure, GCP, or a mounted local path. Deploy tooling drops a full working set into /opt/livekit.
Where LiveKit stores this, by platform
./livekit.yaml
Ports, Redis address, keys, and TURN blocks. Pass by flag or env body. Deploy generator writes a complete copy to /opt/livekit.
./egress-config.yaml
API keys, shared Redis, and the single upload target for recordings. Local paths need the directory mounted into the egress container.
Frequently asked questions
How do I record LiveKit rooms to disk?
Attach the egress config with S3, Azure, or GCP output, or a mounted local path in full local filenames. The SFU alone records nothing.
Egress cannot reach my LiveKit server. What is misconfigured?
Point Redis at the same address in both configs and open the UDP port range plus TCP 7881. Mismatched Redis splits the cluster so rooms never meet.
Is there a guided self-host setup?
Use the deploy generator for your domain. It writes livekit.yaml, compose files, redis.conf, and Caddy wiring into /opt/livekit ready for systemd.
Notice an outdated path? Let us know.