Aurora: Open-Source Self-Hosted AI Gateway in Go for Multi-Provider Routing
Aurora is an Apache 2.0 Go-based AI gateway offering OpenAI and Anthropic compatibility across 14 providers. It features provider pooling, prompt/response caching, guardrails, and token savings in a single binary.
Impact: High
Why it matters
Swap LLM API base URLs to instantly gain failover, unified auditing, semantic caching, and token compression without updating application code.
TL;DR
- 01Deploy a single self-hosted Go binary to manage model fallbacks, semantic caching, and token costs.
- 02Works natively with OpenAI and Anthropic SDKs by modifying only the base URL parameter.
Key facts
- Supported Providers
- 14 (OpenAI, Anthropic, Gemini, DeepSeek, Groq, Ollama, etc.)
- License
- Apache 2.0
- Tech Stack
- Go, React (Admin SPA), Redis, Postgres
Unified Wire Protocol and Multi-Provider Support
Aurora routes incoming OpenAI or Anthropic SDK calls to 14 provider backends, including OpenAI, Anthropic, Gemini, Groq, DeepSeek, OpenRouter, and local deployments like Ollama or vLLM. Switching your backend requires changing only the base_url parameter in your standard SDK setup.
Enterprise Resilience and Traffic Control
Aurora supports provider pools with health-aware load balancing, circuit breaking, and automatic fallback rules triggered by rate limits (429) or server errors (5xx). Built-in middleware handles PII redaction, regex filtering, and token compression (TOKEN_SAVER_ENABLED) to reduce response payloads.
Try it in 2 minutes
docker run -d --name aurora -p 8080:8080 -e AURORA_MASTER_KEY="sk-aurora-master" -e ANTHROPIC_API_KEY="sk-ant-..." aurorahq/aurorabash
✓ When to use
- You want to centralize LLM API keys, rate limits, and audit logs across teams
- You need multi-provider fallback and load balancing without changing SDK code
✕ When NOT to use
- You are using a single LLM provider in a simple serverless script without caching needs
What to do today
- Clone or pull `aurorahq/aurora` via Docker.
- Set up environment API keys and test swapping `base_url` in your local dev script.
Sources