Skip to main content
Bifrost persists two types of data - config (providers, virtual keys, governance rules) and logs (request/response records). Each has its own store, both defaulting to the top-level storage.mode.
When any store uses SQLite the chart deploys a StatefulSet with a PVC. With PostgreSQL only (no SQLite) it deploys a Deployment. Mixing backends (e.g. config=postgres, logs=sqlite) still requires a StatefulSet.

SQLite (Default)

Simplest setup - no external database required. Bifrost runs as a StatefulSet with a persistent volume for the SQLite files.
Reuse an existing PVC (e.g. after a StatefulSet migration):
Upgrading from SQLite to PostgreSQL requires a data migration - the two stores are not compatible. Plan accordingly before switching storage.mode on a running deployment.

StatefulSet Migration (chart v2.0.0+)

Prior to v2.0.0, SQLite used a Deployment + manual PVC. v2.0.0 moved SQLite to a StatefulSet. If upgrading from an older chart:

Object Storage for Logs

Offload large request/response payloads from the database to S3 or GCS. The DB retains only lightweight index records; payloads are fetched on demand.

Required IAM Permissions

The IAM user or role needs the following permissions on your bucket:
storage.logsStore.objectStorageExcludeFields keeps selected LLM log payload fields in Postgres while still offloading the rest to object storage. Use DB payload field names such as output_message, input_history, raw_request, or raw_response. MCP logs always offload the full tool log and keep dashboard/table fields plus a 200-character input preview in Postgres.Using IAM role (IRSA / instance profile) instead of static keys:

Vector Store

A vector store is required for semantic caching. Choose from Weaviate, Redis, or Qdrant (embedded or external), or Pinecone (external only).
External Weaviate: