Prefer a managed LiveKit instance? Point
LIVEKIT_URL at the internal
signaling address and LIVEKIT_PUBLIC_URL at the client-facing domain.1
Clone and prep configuration
.env, but for local development it’s often clearer to generate a config file and pass it to Sayna:- config.yaml
- .env
2
Start LiveKit + Redis
LiveKit needs Redis for state. Run both with Docker Compose:Keep this stack running so Sayna can reach LiveKit on the internal network (
ws://localhost:7880 or ws://livekit:7880 if you use the Docker Compose file).3
Run Sayna locally
If you created or simply Whether you use config files or env vars, make sure the Sayna container can resolve the LiveKit hostname (
config.yaml, run:cargo run when environment variables are already loaded (e.g., via .env).Prefer Docker? Add a Sayna service to the same Compose file so it shares the network with LiveKit:livekit) and expose port 3001 to your host machine.4
Smoke test
config message, and queue a speak payload to hear a synthesized clip. Use /livekit/token to mint attendee tokens if you mirror audio into LiveKit.Next steps
Review the architecture
Understand the moving parts before you customize providers or pipelines.
Call every REST endpoint
Learn what
/voices, /speak, and /livekit/token expect.Stream over WebSockets
Explore the message schemas for low-latency experiences.
Harden authentication
Pick between API secrets and delegated JWT validation.