| SynthTunnel (default) | Cloudflare | |
|---|---|---|
| Setup | Zero config, no binary | Requires cloudflared |
| Concurrency | 128 in-flight, dynamic memory budget | Cloudflare limits |
| Auth | worker_token | task_app_api_key |
| URL lifetime | Per-lease (session-lived) | Managed = stable subdomain |
| Best for | SDK jobs, GEPA, MIPRO | Long-lived production apps |
SynthTunnel (Recommended)
Relay-based HTTPS tunnel through Synth’s servers. No external binary needed. Traffic flows outbound over WebSocket — no inbound ports required.How it works
TunneledLocalAPI.create()provisions a lease on the Synth relay- A local WebSocket agent connects outbound to the relay
- Incoming requests are forwarded to your local task app
- Responses stream back through the relay to the caller
Concurrency
SynthTunnel supports up to 128 concurrent in-flight requests per connection (configurable up to 1024 via lease capabilities). A dynamic memory budget (512 MB) automatically reduces effective concurrency when request/response payloads are large, protecting memory without penalizing lightweight workloads like GEPA rollouts.Cleanup
Cloudflare Quick Tunnels
Free, ephemeral tunnels via Cloudflare’s public service. No API key required. Subject to Cloudflare rate limits.Cloudflare Managed Tunnels
Stable subdomains that persist across sessions. Requires API key.Convenience: Tunnel a FastAPI App
If you have a FastAPI app object,create_for_app handles server startup, health check, and tunnel creation: