One-click platform deployments: For platform-specific guides (Fly.io, Railway, Render, etc.), see the vexa-lite-deploy repository.
Overview
Why Vexa Lite?- Single container — All services bundled, no multi-service orchestration
- Stateless — All data stored in your database; easy to redeploy
- No GPU required — Uses the Vexa remote transcription service
- Built-in Redis — No external Redis needed (optional external Redis supported)
- Interactive bots — TTS (text-to-speech) and virtual camera included
Included Services
Vexa Lite runs the following services internally via supervisord:| Service | Internal Port | Description |
|---|---|---|
| API Gateway | 8056 | Main entry point (the only exposed port) |
| Admin API | 8057 | User and API token management |
| Bot Manager | 8080 | Bot lifecycle management (process orchestrator) |
| Transcription Collector | 8123 | Stores transcription segments in PostgreSQL |
| WhisperLive | 9090 | Transcription relay (routes to remote service) |
| MCP Service | 18888 | Model Context Protocol for Claude/Cursor |
| TTS Service | 8059 | Text-to-speech via OpenAI API |
| Redis | 6379 | Built-in message broker |
| Xvfb | — | Virtual display for headless browsers |
| PulseAudio | — | Audio server for TTS playback |
localhost. Only port 8056 is exposed externally.
Quick Start
Production: Remote Database
Development: Local Database
The container automatically runs database migrations on startup. Fresh databases are initialized with the full schema.
Environment Variables
Required
PostgreSQL connection string. Supports both
postgresql:// and postgres:// schemes.Example: postgresql://user:pass@host:5432/vexaAlternatively, set individual variables: DB_HOST, DB_PORT, DB_NAME, DB_USER, DB_PASSWORD.Secret token for admin operations (creating users, minting API tokens).
Transcription service endpoint.Default:
https://transcription.vexa.ai/v1/audio/transcriptionsAPI key for the transcription service. Get yours from vexa.ai/dashboard/api-keys.
Database
You can useDATABASE_URL or individual variables. If both are provided, DATABASE_URL takes precedence.
PostgreSQL hostname.
PostgreSQL port.
Database name.
Database user.
Database password.
SSL mode for database connections. Set to
require for cloud-hosted databases (Supabase, Neon, AWS RDS, etc.).Redis
Vexa Lite includes a built-in Redis server. IfREDIS_HOST is localhost or unset, the internal Redis is used automatically. To use an external Redis, set REDIS_HOST to your Redis server address.
Redis hostname. Set to an external address to use external Redis instead of the built-in server.
Redis port.
Full Redis URL. If provided, individual Redis vars are parsed from it.Example:
redis://user:password@redis-host:6379/0Interactive Bots (TTS & Virtual Camera)
OpenAI API key for text-to-speech (temporary — will be replaced by local TTS, see #130). Required for the
/speak command to work. Without this, bots can still join meetings and transcribe, but TTS will be unavailable.Recording Storage
Recording storage backend:
local, minio, or s3.Directory for local recording storage. Mount a volume here for persistence.
S3 / MinIO storage variables
S3 / MinIO storage variables
For
For
STORAGE_BACKEND=s3:| Variable | Default | Description |
|---|---|---|
AWS_REGION | us-east-1 | AWS region |
AWS_ACCESS_KEY_ID | — | AWS access key |
AWS_SECRET_ACCESS_KEY | — | AWS secret key |
S3_BUCKET | — | S3 bucket name |
S3_ENDPOINT | — | Custom S3 endpoint (for non-AWS providers) |
S3_SECURE | true | Use HTTPS for S3 connections |
STORAGE_BACKEND=minio:| Variable | Default | Description |
|---|---|---|
MINIO_ENDPOINT | — | MinIO server endpoint (e.g., minio:9000) |
MINIO_ACCESS_KEY | — | MinIO access key |
MINIO_SECRET_KEY | — | MinIO secret key |
MINIO_BUCKET | vexa-recordings | MinIO bucket name |
MINIO_SECURE | false | Use HTTPS for MinIO connections |
Transcription
Transcription backend. Use
remote to route audio to the Vexa transcription service (recommended). Use faster_whisper for local CPU-based transcription (slow, development only).Whisper model size when using local transcription (
WHISPER_BACKEND=faster_whisper). Options: tiny, base, small, medium.Set to
true to skip the startup connectivity check to the transcription service. The URL and API key are still required but won’t be validated at startup.Logging
Log level for all services. Options:
debug, info, warning, error.Health Check
The container includes a built-in health check that polls the API Gateway:- Interval: 30s
- Timeout: 10s
- Start period: 90s (allows services to initialize)
- Retries: 3
Recording Storage
For production, use object storage so recordings persist across container restarts:Build from Source
To build the image locally from the Vexa repository:vexa-lite:dev image. See make help for additional commands (push, set-latest, etc.).
Database Setup
Supabase
Supabase
- Create a project at supabase.com
- Click Connect on the project page
- Select method: Session pooler
- Copy the connection string
- Set
DB_SSL_MODE=require
Neon
Neon
- Create a project at neon.tech
- Copy the connection string from the dashboard
- Set
DB_SSL_MODE=require
Local PostgreSQL
Local PostgreSQL
--network vexa-network and DB_HOST=vexa-postgres.Next Steps
- Create users and API tokens: Admin API
- Set up a dashboard UI: Vexa Dashboard
- Configure interactive bots: Interactive Bots
- Platform-specific guides: vexa-lite-deploy repository