Candela is a governance-first proxy — it sits between your applications and LLM providers, enforcing policies in real time while capturing a complete audit trail. Governance isn’t a roadmap feature; it’s the core architecture.
Every Candela deployment — whether candela on a developer laptop or candela-server in production — includes these enforcement controls out of the box:
Budget Enforcement
Per-user daily budgets with pre-flight gates. Requests that would exceed a user’s budget are rejected with HTTP 402 before they ever reach the LLM provider. Grants provide one-time budget bonuses with expiration dates and waterfall deduction.
Rate Limiting
Per-user request throttling with minute-window counters. Prevents runaway automation and rogue scripts from consuming resources. Configurable limits per user via the admin API.
Immutable Audit Trail
Every LLM request, every admin action, every policy decision — logged to BigQuery, DuckDB, or SQLite. Audit entries survive user deletion. The trail is append-only and tamper-proof by design.
Tenant Isolation
Full multi-tenant attribution via X-Candela-Tenant-Id headers and W3C Baggage. Per-tenant cost tracking, spend leaderboards, and tenant-scoped dashboard views — ensuring complete separation of concerns.
Role-Based Access Control
Admin vs Developer roles with distinct permissions. Admins manage budgets, grants, and user lifecycle. Developers can only view their own usage and budget status.
Multi-Provider Routing
Route to OpenAI, Gemini, Anthropic, Ollama, and LM Studio through a single endpoint. All traffic — regardless of provider — passes through the same governance pipeline.
eBPF Enforcement
Kernel-level enforcement ensures all LLM traffic flows through the proxy. Transparent iptables redirection with SNI-based routing, Cilium network policies, and Tetragon process enforcement — making bypass impossible, even by misconfigured workloads.
The pipeline is fail-open for observability (a tracing failure never blocks requests) but fail-closed for governance (a budget gate failure always blocks).