This page assumes you’ve already done local setup — cloned the repos, installed
uv and Node, and run uv sync / npm install. If you haven’t, start there.The local loop at a glance
The arrow that matters most is Fleet → Backend: a worker holds no durable state and fetches everything it needs for a call from the Backend’s config URL at the moment the call starts. Get that one wire right and a call will run.Start MongoDB and Redis
The Backend needs both before it will boot. The quickest way on a laptop is two
Docker containers — MongoDB on its default These map straight onto the Backend defaults:
27017 and Redis on 6379, exactly
where the Backend’s .env expects them.MONGODB_URI=mongodb://localhost:27017
and REDIS_URL=redis://localhost:6379. Leave them running in the background.Run the Backend
From the Start the API on port The app only boots when its required settings are present, so a clean start
confirms MongoDB and Redis are reachable. With a fresh database, seed the first
admin user so you can log into the Console:
vb-core repo, copy .env.example to .env and set at least a
JWT_SECRET. The defaults already point at your local MongoDB and Redis.8080 via the run script (which wraps uvicorn):MONGODB_DB is voxbridge and the Dialler shares the exact same database. On a
laptop you usually don’t run the Dialler at all (see Advanced) — but if you do, point it at this same DB.Run the Console
From the Start the Vite dev server:Vite serves the SPA (default
vb-dashboard repo, make sure VITE_API_URL points at your local
Backend. For Pelocal the brand .env is committed in the repo; for local work the
only value you need to override is the API URL:http://localhost:5173) and every admin call it
makes goes to VITE_API_URL. If logins fail with network errors, this is almost
always the value to check.Run one voice-fleet worker
From the For local development you want one worker on a TCP port (not the production
Unix-socket model). The dev run script does multiple workers by default; for a
single, easy-to-watch worker, run uvicorn directly:
vb-agents repo, copy .env.example to .env. The single most
important line is the config URL pointing back at your Backend, plus the provider
keys for the speech stack and somewhere to put recordings:How config flows to the worker
A fleet worker is stateless by design. When a call begins, the worker calls the Backend atVOXBRIDGE_CONFIG_URL to fetch the runtime config for that bot —
prompts, voice settings, the tool set, and any CRM data for the contact — and runs
the conversation entirely from what comes back. Nothing about the bot lives on the
worker between calls.
This is why the order of the four steps matters: the Backend must be up and
reachable at the config URL before a worker can do anything useful. If a local call
errors immediately, check that VOXBRIDGE_CONFIG_URL resolves and that the bot you’re
testing exists in the Backend’s database.
Verify it works
A quick three-point check confirms the whole loop is wired up:Console loads and logs in
Open the Vite URL (default
http://localhost:5173), and log in with the admin
user you seeded in step 2. If the dashboard loads, the Console → Backend wire
(VITE_API_URL) is good.The Backend is healthy
Advanced: LiveKit and the Dialler
The two services below complete the platform but need real telephony to be useful, so they’re rarely run on a laptop. Reach for them only when you’re testing SIP or campaign behaviour specifically.- LiveKit (SIP / widget calls)
- Dialler (outbound campaigns)
LiveKit handles SIP trunks and the media plane for inbound DIDs, outbound dial,
and the browser widget. It runs as a Docker Compose stack (For real phone calls you also need carrier SIP trunks configured and, on a cloud
host,
livekit +
livekit-sip), brought up by the helper in the vb-agents repo:use_external_ip plus a webhook for inbound dispatch. None of that is
needed for the local widget/WebSocket path above — which is exactly why that path
is the easy way to test a call on your machine.Where to go next
Local setup
Prerequisites, cloning the repos, and installing dependencies — the step before this one.
Repository map
The repositories, their boundaries, and the contracts between them.
Deploy it
The Bitbucket → Jenkins pipeline, host deployment, and the production run model.
System architecture
How the four services, the data layer, and the telephony plane fit together.
