Quick Start
Run real, isolated dependencies in a hosted Parlel sandbox and reach them from your app with zero code changes — all you add is a Docker sidecar and an API key.
1. Get an API key
Create a pk_ key in the Parlel app (or via the API).
That's the only credential you need.
2. Add the bridge sidecar to your stack
The parlel/bridge image provisions a sandbox and exposes every dependency on
a plain hostname. Your app connects to parlel-bridge:<port> exactly as it
would to a real service in production.
# docker-compose.test.yml
include:
- path: parlel-bridge.yml # image: parlel/bridge
services:
app:
build: .
env_file: test.env
depends_on:
parlel-bridge: { condition: service_healthy }
# test.env — your existing env vars, pointed at the bridge
DATABASE_URL=postgres://parlel:parlel@parlel-bridge:5432/parlel
REDIS_URL=redis://parlel-bridge:6379
3. Run it
PARLEL_API_KEY=pk_... docker compose -f docker-compose.test.yml up
Your unmodified drivers connect straight through — real wire protocols, no SSH, no Parlel code in your app:
import psycopg, redis
db = psycopg.connect("postgres://parlel:parlel@parlel-bridge:5432/parlel")
cache = redis.Redis(host="parlel-bridge", port=6379)
How it works
The bridge provisions a sandbox from your key (no services specified ->
defaults to Postgres + Redis; otherwise set PARLEL_SERVICES), then exposes
each dependency on a plain hostname inside your Docker network:
- TCP services (Postgres, Redis, Kafka, …) — raw wire protocol tunneled over
the sandbox's HTTPS preview proxy via a WebSocket, re-emitted as a real local
TCP listener. Unmodified
psycopg/redis-py/kafkajsconnect as-is. - HTTP services (Stripe, Jira, …) — a reverse-proxy that injects the sandbox preview token, so your HTTP clients carry no token.
Your application never imports anything from Parlel; only test.env (the
hostname) and the sidecar know Parlel exists. The same binary runs against
production by pointing those env vars at your real services.
Prefer raw API control instead of the sidecar? POST /api/sandboxes then
GET /api/sandboxes/{id}/connection returns a target + bridge_url per
service — see How Agents Access It.
The Flask CRUD example
shows the full sidecar flow end-to-end.
What You Get
| Feature | Value |
|---|---|
| Startup time | < 1 second |
| Memory per service | ~50-100 KB |
| Protocols | Real RESP, wire protocol, binary |
| State | Ephemeral, disappears on cleanup |
| Side effects | None |
| Remote access | API key → parlel/bridge sidecar; unmodified drivers, no SSH |
Available Services
| Service | Port | Protocol |
|---|---|---|
redis | 6379 | RESP (TCP) |
postgres | 5432 | Wire protocol (TCP) |
kafka | 9092 | Binary (TCP) |
mysql | 3306 | Wire protocol (TCP) |
elasticsearch | 9200 | HTTP |
cassandra | 9042 | Binary (TCP) |
rabbitmq | 5672 | AMQP (TCP) |
supabase | 54321 | HTTP (REST) |
sqlite | — | Embedded |
Next Steps
- How Agents Access It — full API reference
- Redis — Redis-specific commands and patterns
- Postgres — Postgres-specific SQL support