Quickstart
Quickstart
The example bots live in examples/
:
- echo: speak into the browser, hear yourself back. No API keys.
- voicebot: the full voice agent. STT → LLM → TTS with turn-taking and barge-in, plus long-term memory and tracing.
- voice/: one headless backend per provider, each wiring its STT/LLM/TTS
explicitly in Go and exposing only the WebRTC
/offerendpoint (go run ./examples/voice/<provider>); drive it from a browser client.
Run them with Docker (no host setup) or with a local Go toolchain.
Run with Docker
jargo publishes a build base and a distroless runtime base image, so you can
containerise a bot without installing any native dependencies on the host. The
Deploy with Docker
guide has a copyable two-stage
Dockerfile for the example bots and the run command (-e DEEPGRAM_API_KEY=…
etc., then open http://localhost:8080
).
Run locally
Prerequisites
The default build is cgo-free: go build ./... needs no C toolchain. One
native library is loaded at run time, through
purego
:
- ONNX Runtime: VAD and end-of-turn detection.
# Download a build for your platform, then point jargo at it:
export JARGO_ONNXRUNTIME_LIB=/path/to/libonnxruntime.soGet it from the
onnxruntime releases
; the
onnxruntime-linux-* archive contains lib/libonnxruntime.so. If the variable is
unset, jargo looks for the library by its conventional name on the loader’s
default search path.
Without the ONNX Runtime the voice bot still runs: it falls back to STT
endpointing for turn-taking and loses barge-in. Everything else in the list below
is optional. See Installation
for RNNoise and the libsoxr /
libopus build tags.
Echo bot, no keys
go run ./examples/echo # then open http://localhost:8080Voice bot
Set the provider API keys, then run:
export DEEPGRAM_API_KEY=... # STT
export ANTHROPIC_API_KEY=... # LLM
export ELEVENLABS_API_KEY=... # TTS
go run ./examples/voicebot # then open http://localhost:8080The voicebot runs a fixed Deepgram + Anthropic + ElevenLabs stack. To try a
different provider, run one of the per-provider examples under
examples/voice
, one self-contained file each, with the
provider wired explicitly in Go:
go run ./examples/voice/cartesia # Deepgram STT, Anthropic LLM, Cartesia TTS
go run ./examples/voice/openai # OpenAI STT + LLM + TTS
go run ./examples/voice/groq # Groq STT + LLM, ElevenLabs TTSThese are headless backends: they expose the WebRTC /offer endpoint and no
web UI. Point a browser client at http://localhost:8080, such as the nextjs-voicebot
example in jargo-client-react
,
with NEXT_PUBLIC_JARGO_URL=http://localhost:8080. Each example’s doc comment
lists the API keys it needs.
Next
- Your first bot : the same pipeline, built up line by line.
- Architecture : how the pieces fit together.
- Turn-taking : tuning end-of-turn detection and barge-in.