Getting started

Three commands to a working voice agent.

Clone, add API keys, docker compose up. Then shape behavior with skills and extend capabilities with plugins.

Prerequisites

  • Docker & Docker Compose — for the fastest setup
  • Go 1.22+ — only if running the server locally without Docker
  • API keys — you’ll need keys for at least one STT, LLM, and TTS provider
Required API keys: Deepgram (STT), OpenAI (LLM), and one of Cartesia, Deepgram, or ElevenLabs (TTS). Each provider has a free tier sufficient for testing.

Option 1: Docker (recommended)

The fastest way to get the server running.

1. Clone and configure

git clone https://github.com/streamcoreai/streamcore-server.git
cd streamcore-server
cp config.toml.example config.toml

Edit config.toml with your API keys:

config.toml

[server]
port = "8080"

[plugins]
directory = "./plugins"

[pipeline]
barge_in = true

[stt]
provider = "deepgram"

[llm]
provider = "openai"

[tts]
provider = "cartesia"

[deepgram]
api_key = "your-deepgram-api-key"

[openai]
api_key = "your-openai-api-key"
model = "gpt-4o-mini"

[cartesia]
api_key = "your-cartesia-api-key"

2. Build and run

docker build -t streamcoreai-server .
docker run --rm -p 8080:8080 -v "$(pwd)/config.toml:/config.toml:ro" streamcoreai-server

3. Connect a client

Clone the examples repo and start the browser client:

git clone https://github.com/streamcoreai/examples.git
cd examples/typescript
npm install
npm run dev

Open http://localhost:3000 in your browser and click Connect. Allow microphone access when prompted.

Option 2: Local Development

Run the server directly with Go.

1. Clone and configure

git clone https://github.com/streamcoreai/streamcore-server.git
cd streamcore-server
cp config.toml.example config.toml
# Edit config.toml with your API keys

2. Run the server

go run .

3. Connect a client

git clone https://github.com/streamcoreai/examples.git
cd examples/typescript
npm install
npm run dev

Open http://localhost:3000 and click Connect.

Environment Variables

Instead of config.toml, you can set provider keys via environment variables:

export DEEPGRAM_API_KEY="your-deepgram-api-key"
export OPENAI_API_KEY="your-openai-api-key"
export CARTESIA_API_KEY="your-cartesia-api-key"
export ELEVENLABS_API_KEY="your-elevenlabs-api-key"  # if using ElevenLabs

Production Deployment

When deploying to the cloud (EC2, GCP, Azure), set your public IP and a TURN secret so browsers can connect through NAT:

config.toml for cloud

[server]
port = "8080"
public_ip = "1.2.3.4"      # Your server's public IP
turn_secret = "your-secret"  # Any random string

The built-in STUN/TURN server starts automatically on UDP port 3478. Make sure your security group/firewall allows this port along with UDP ports 50001-60000 for relay traffic.

Verify It Works

After starting the server, check the health endpoint:

curl http://localhost:8080/health

You should see a 200 response. The server logs will show loaded plugins and skills:

StreamCore AI server starting on :8080
loaded plugin: math.calculate (typescript)
loaded plugin: time.get (python)
loaded 2 plugins, 3 skills

Server Endpoints

MethodPathDescription
POST/whipWHIP signaling — SDP exchange, creates session
DELETE/whip/{id}Teardown a session
OPTIONS/whipCORS preflight
GET/healthHealth check
POST/tokenJWT token generation (optional)

Next Steps