Skip to main content

Prerequisites

  • Python 3.11+ (python --version)
  • Git
  • Node.js 18+ if you are working on the dashboard frontend (src/dashboard/frontend/)

Clone and install

1

Fork and clone

2

Create a virtual environment and install

The dev extra pulls in the livekit and dashboard extras plus pytest, ruff-adjacent tooling not covered by pre-commit (mypy is installed separately, see below), and the ClickHouse/DuckDB test dependencies. Every voicegw subcommand needs the livekit extra: cli/__init__.py imports the LiveKit CLI module at package load time, so an editable install without it fails to import voicegateway.cli at all.

Pre-commit hooks

The hooks run ruff check --fix and ruff format on every commit (.pre-commit-config.yaml). They do not run mypy: mypy runs in CI only. Run it locally before pushing:
See Code Style for why mypy is pinned below 2. To run the pre-commit hooks manually on all files:

Running tests

asyncio_mode = "auto" is set in pyproject.toml, so async test functions run without a @pytest.mark.asyncio decorator. See Testing for fixtures and patterns.

Verify everything works

Dashboard frontend

There is no separate dashboard backend process. voicegw serve (the daemon) serves both /v1/* and /api/* plus the built React SPA at /, all on one port (0.0.0.0:8080 by default). voicegw dashboard does not start anything; it opens your browser at that same address. To work on the frontend with hot reload:
The Vite dev server runs on http://localhost:5173 and proxies /api, /v1, and /static/branding to http://localhost:8080. npm run build produces the production bundle the daemon serves from disk.

Documentation site

Docs source lives in this repo under docs/. Mintlify renders it at https://docs.voicegateway.dev from the default branch. Change the docs in the same PR as any behavior or API change; see Contributing.

Environment variables for development

The _test_env autouse fixture sets fake API keys for the whole test suite, so you do not need real provider keys to run pytest. For manual testing against real providers: