Full schema reference:
https://www.getbifrost.ai/schemaconfig.json lets you configure every aspect of Bifrost through a single declarative file. It is the right choice for GitOps workflows, CI/CD pipelines, headless deployments, and multinode OSS setups where a central configuration file is shared across all replicas.
Configuration Sources
Bifrost stores runtime configuration in a config database by default, so settings can be edited through the Web UI or API. You can also provide aconfig.json file to seed or reconcile that database at startup. To run with only config.json, set config_store.enabled: false.
| Setup | When | Behaviour |
|---|---|---|
| Web UI / database | No config.json | Bifrost creates a default SQLite config store and runtime changes are saved through the UI or API |
DB-backed config.json | config.json exists and config_store is omitted or enabled | File-backed sections seed or reconcile the config store at startup; UI/API edits remain available |
File-only config.json | config_store.enabled is false | Config is loaded from file into memory at startup; config-backed UI/API changes are unavailable and file changes require restart |
By default, DB-backed
config.json uses source_of_truth: "split": unchanged file-backed rows preserve UI/API edits, while changed file-backed rows are applied on the next startup. Use source_of_truth: "config.json" only when explicitly present file sections should replace matching DB state. See Source of Truth & Reconciliation for the full rules, including missing-vs-empty section behavior.Minimal Working Example
This example uses file-only configuration for the smallest self-contained setup.config.json in your app directory and start Bifrost:
Environment Variable References
Never put secrets directly inconfig.json. Use the env. prefix to reference any environment variable:
-e, Kubernetes Secrets mounted as env vars, or a .env file.
Schema Validation
Add$schema to every config.json for IDE autocomplete and inline validation:
Production Example
A production-ready file with PostgreSQL storage, multi-provider setup, governance, and common plugins:Enterprise Example: Postgres + etcd + Access Profiles
Use this pattern when you want enterprise access-profile configuration to be seeded directly fromconfig.json, while running clustered nodes with etcd discovery.
access_profiles is an enterprise capability. For OSS-only deployments, use governance.virtual_keys and related governance resources instead.Example Configs
Ready-to-use reference configurations from the examples/configs directory on GitHub:Minimal / File-only
Minimal / File-only
| Example | Description |
|---|---|
| noconfigstorenologstore | Bare-minimum file-only mode - no database, no UI, providers loaded from file |
| partial | SQLite config store with a minimal provider setup |
| v1compat | "version": 1 for v1.4.x array semantics (empty = allow all) |
Storage
Storage
| Example | Description |
|---|---|
| withconfigstore | SQLite config store (Web UI enabled) |
| withconfigstorelogsstorepostgres | PostgreSQL for both config store and logs store |
| withlogstore | SQLite logs store |
| withobjectstorages3 | S3 object storage offload for logs |
| withobjectstoragegcs | GCS object storage offload for logs |
| withvectorstoreweaviate | Weaviate vector store (with docker-compose) |
Semantic Cache
Semantic Cache
| Example | Description |
|---|---|
| withsemanticcache | Semantic cache backed by Weaviate |
| withsemanticcachevalkey | Semantic cache backed by Valkey / Redis |
Governance
Governance
| Example | Description |
|---|---|
| withauth | Admin username/password auth (governance.auth_config) |
| withvirtualkeys | Virtual keys with provider/model allowlists |
| withteamscustomers | Teams and customers with budgets and rate limits |
| withroutingrules | CEL-based routing rules for dynamic provider/model selection |
| withpricingoverridesnostore | Pricing overrides in file-only mode |
| withpricingoverridessqlite | Pricing overrides with SQLite config store |
Observability
Observability
| Example | Description |
|---|---|
| withobservability | Prometheus metrics (telemetry always active, custom labels via client.prometheus_labels) |
| withprompushgateway | Prometheus Push Gateway for multi-instance deployments |
| withotel | OpenTelemetry traces and metrics |
Plugins & Advanced
Plugins & Advanced
| Example | Description |
|---|---|
| withdynamicplugin | Loading a custom .so plugin at startup |
| withcompat | SDK compatibility shims (should_drop_params, convert_text_to_chat) |
| withframework | Custom model pricing catalog URL and sync interval |
| withlargepayload | Large payload optimization (streaming without full materialisation) |
| withwebsocket | WebSocket / Realtime API connection pool tuning |
| withnginxreverseproxy | 3-node Bifrost behind NGINX reverse proxy (includes docker-compose, nginx.conf, helm values, and k8s ingress) |
| withpostgresmcpclientsinconfig | MCP client definitions seeded from config.json with PostgreSQL store |
| encryptionmigration | Migrating to a new encryption key |
Configuration Guides
Schema Reference
Every top-level key, its type, default, and where it is documented
Client Configuration
Pool size, logging, CORS, header filtering, compat shims, MCP settings
Provider Setup
OpenAI, Anthropic, Azure, Bedrock, Vertex, Groq, self-hosted
Storage
config_store, logs_store, vector_store - SQLite, PostgreSQL, object storage
Plugins
Semantic cache, OTel, Maxim, Datadog, custom plugins
Cluster
Cluster mode with static peers or discovery backends (enterprise)
Governance
Virtual keys, budgets, rate limits, routing rules, admin auth
Guardrails
Content moderation providers and CEL-based rules (enterprise)
Next Steps
- Configure provider keys
- Enable plugins
- Set up observability
- Configure governance
- Deploy multiple nodes with a shared
config.json

