A customizable, fast,
open-source API
load balancer.
FastAPI inside. One Docker image. Five balancing strategies, active & passive health checks, atomic config reloads, ClickHouse-backed analytics, and a beautiful operator dashboard. No service mesh, no agents, no fuss.
Built for operators
who want it small,
sharp, and visible.
Umbrella covers the load-balancing fundamentals you actually need — routing, health, observability — without dragging in a service mesh, a control plane, or a yaml mountain. Drop one container in front of your services and operate it from a single pane.
Five balancing strategies
Round-robin, weighted, least-connection, IP-hash, and random. Switch live per pool — no restart, no dropped requests.
Active + passive health checks
Configurable probe interval, timeout, and expected status. A passive circuit breaker trips on consecutive 5xx and half-opens after a cool-off.
Granular request matching
Match by path, host, method, headers, or query. Exact, prefix, glob, and regex patterns. Routes evaluated in priority order, first match wins.
Zero-restart reloads
Every write rebuilds an immutable in-memory snapshot atomically. The hot path reads from a single reference, so changes apply on the very next request.
SQL or ClickHouse, transparently
Per-minute traffic, p50/p95 latency, top routes, and top error
paths. SQL by default; set UMBRELLA_CLICKHOUSE_URL
to scale to billions of rows.
Operator UI in the same binary
Manage pools, backends, routes, and users from one place. Live topology graph, JWT-cookie auth, first-run bootstrap. No separate frontend to deploy.
One file.
Three minutes.
Clone the repo, run docker compose up. Coolify, Dokku,
Fly, Railway, plain Docker on a VM — whatever runs containers
runs Umbrella.
# umbrella in front, your apps behind. one process. one DB. services: umbrella: build: context: . dockerfile: docker/Dockerfile restart: unless-stopped expose: ["8080"] environment: UMBRELLA_SECRET_KEY: "${UMBRELLA_SECRET_KEY}" UMBRELLA_COOKIE_SECURE: "true" UMBRELLA_DATABASE_URL: "sqlite+aiosqlite:////app/data/umbrella.db" # optional: switch analytics to ClickHouse for production # UMBRELLA_CLICKHOUSE_URL: "http://default:pwd@clickhouse:8123/umbrella" volumes: - umbrella-data:/app/data volumes: umbrella-data:
Star it on GitHub.
Self-host in five minutes.
No SaaS. No telemetry. No upsell. The dashboard, the proxy, and the analytics live inside one Python package you can read in an evening.