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.
ParameterDescriptionDefault
storage.modeDefault backend for both stores (sqlite or postgres)sqlite
storage.configStore.typeOverride backend for the config store"" (inherits storage.mode)
storage.logsStore.typeOverride backend for the logs store"" (inherits 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.
ParameterDescriptionDefault
storage.persistence.enabledCreate a PVC for SQLite datatrue
storage.persistence.sizePVC size10Gi
storage.persistence.accessModePVC access modeReadWriteOnce
storage.persistence.storageClassStorage class (leave empty for cluster default)""
storage.persistence.existingClaimReuse an existing PVC""
# sqlite-values.yaml
image:
  tag: "v1.4.11"

storage:
  mode: sqlite
  persistence:
    enabled: true
    size: 20Gi
    # storageClass: "gp3"   # uncomment to pin storage class

bifrost:
  encryptionKey: "your-32-byte-encryption-key-here"
helm install bifrost bifrost/bifrost -f sqlite-values.yaml
Reuse an existing PVC (e.g. after a StatefulSet migration):
storage:
  persistence:
    existingClaim: "bifrost-data"
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:
# 1. Scale down the old deployment
kubectl scale deployment bifrost --replicas=0

# 2. Note the existing PVC name
kubectl get pvc

# 3. Upgrade the chart, pointing at the existing claim
helm upgrade bifrost bifrost/bifrost \
  --reuse-values \
  --set storage.persistence.existingClaim=<your-old-pvc-name> \
  --set image.tag=v1.4.11

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.
kubectl create secret generic s3-credentials \
  --from-literal=access-key-id='AKIAIOSFODNN7EXAMPLE' \
  --from-literal=secret-access-key='wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'
storage:
  logsStore:
    objectStorage:
      enabled: true
      type: s3
      bucket: "bifrost-logs"
      prefix: "bifrost"
      compress: true           # gzip compression

      # S3 configuration
      region: us-east-1
      accessKeyId: "env.S3_ACCESS_KEY_ID"
      secretAccessKey: "env.S3_SECRET_ACCESS_KEY"
      # endpoint: ""           # Custom endpoint for MinIO / Cloudflare R2
      # forcePathStyle: false  # Set true for MinIO

bifrost:
  # inject S3 credentials as env vars
  providerSecrets:
    s3-access-key:
      existingSecret: "s3-credentials"
      key: "access-key-id"
      envVar: "S3_ACCESS_KEY_ID"
    s3-secret-key:
      existingSecret: "s3-credentials"
      key: "secret-access-key"
      envVar: "S3_SECRET_ACCESS_KEY"
Using IAM role (IRSA / instance profile) instead of static keys:
storage:
  logsStore:
    objectStorage:
      enabled: true
      type: s3
      bucket: "bifrost-logs"
      region: us-east-1
      # No accessKeyId / secretAccessKey — uses SDK default chain
      roleArn: "arn:aws:iam::123456789012:role/BifrostS3Role"
helm upgrade bifrost bifrost/bifrost \
  --reuse-values \
  -f object-storage-values.yaml

Vector Store

A vector store is required for semantic caching. Choose from Weaviate, Redis, or Qdrant (embedded or external), or Pinecone (external only).
vectorStore:
  enabled: true
  type: weaviate
  weaviate:
    enabled: true          # deploy embedded Weaviate
    replicas: 1
    persistence:
      enabled: true
      size: 20Gi
    resources:
      requests:
        cpu: 500m
        memory: 1Gi
      limits:
        cpu: 2000m
        memory: 4Gi
External Weaviate:
vectorStore:
  enabled: true
  type: weaviate
  weaviate:
    enabled: false
    external:
      enabled: true
      scheme: https
      host: "weaviate.example.com"
      apiKey: "env.WEAVIATE_API_KEY"
      grpcHost: "weaviate-grpc.example.com"
      grpcSecured: true
      existingSecret: "weaviate-credentials"
      apiKeyKey: "api-key"
helm install bifrost bifrost/bifrost \
  --set image.tag=v1.4.11 \
  -f storage-values.yaml