Private Deployment
YAML Reference

YAML Reference

This page is a reference for the configuration values in the Rulebricks Helm chart, organized by component. Conceptual guides live elsewhere; each section links to the relevant one. For the exhaustive list of every value (including subchart internals), see the chart's values.yaml (opens in a new tab) and values.schema.json (opens in a new tab).

Core Configuration

ParameterTypeDefaultRequiredDescription
global.domainstring""YesThe domain name for your Rulebricks instance. Must be a domain you control.
global.emailstring"support@rulebricks.com"YesEmail address for Let's Encrypt certificate registration.
global.licenseKeystring"evaluation"YesYour Rulebricks Enterprise license key.
global.versionstring""YesRulebricks product version. One semver selects the app, HPS, HPS worker, and migration images together.
global.tlsEnabledbooleanfalseNoEnable HTTPS. Set to true after DNS is configured or when using external-dns.
global.externalDnsEnabledbooleanfalseNoEnable external-dns annotations on ingresses for automatic DNS management.

Version Pinning

Production deployments should pin two versions: a Helm chart version (via helm install --version) and a Rulebricks product version (via global.version). The chart version controls Kubernetes packaging and infrastructure templates; global.version selects the application images. See Installing Updates.

global:
  version: '1.8.17'

Domain Configuration

Your domain should follow the pattern: rulebricks.yourdomain.com

When self-hosting Supabase, an additional subdomain is created: supabase.rulebricks.yourdomain.com

global:
  domain: 'rulebricks.acme.com'
  email: 'devops@acme.com'
⚠️

Important: The domain must resolve to your cluster's load balancer before enabling TLS. See DNS Configuration for automatic setup.

SMTP Configuration

SMTP is required for user authentication flows (invitations, password resets, email verification).

ParameterTypeDefaultDescription
global.smtp.hoststring"smtp.mailtrap.io"SMTP server hostname
global.smtp.portinteger2525SMTP server port (typically 25, 465, 587, or 2525)
global.smtp.userstring"demo-user"SMTP authentication username
global.smtp.passstring"demo-password"SMTP authentication password
global.smtp.fromstring"no-reply@rulebricks.com"Sender email address
global.smtp.fromNamestring"Rulebricks"Sender display name

Production SMTP Providers

ProviderHostPortNotes
AWS SESemail-smtp.<region>.amazonaws.com587Requires verified domain
SendGridsmtp.sendgrid.net587API key as password
Mailgunsmtp.mailgun.org587Domain verification required
Postmarksmtp.postmarkapp.com587Server token as password
global:
  smtp:
    host: 'email-smtp.us-east-1.amazonaws.com'
    port: 587
    user: 'AKIAIOSFODNN7EXAMPLE'
    pass: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY'
    from: 'no-reply@yourdomain.com'
    fromName: 'Your Company - Rulebricks'

Supabase Keys

These JWT keys are used for authentication between components.

ParameterTypeDescription
global.supabase.anonKeystringPublic/anonymous key for client-side auth
global.supabase.serviceKeystringService role key for server-side operations
global.supabase.jwtSecretstringJWT signing secret (self-hosted only)

Security: For production, generate new keys using Supabase's key generator or a secure random string generator. The default keys are for demo purposes only.

Managed Supabase (Cloud)

When using Supabase Cloud instead of self-hosting:

ParameterTypeDescription
global.supabase.urlstringProject URL (e.g., https://abcd1234.supabase.co)
global.supabase.projectRefstringProject reference ID (derived from URL if empty)
global.supabase.accessTokenstringPersonal access token for Supabase CLI
global:
  supabase:
    url: 'https://abcd1234.supabase.co'
    anonKey: '<from-supabase-dashboard>'
    serviceKey: '<from-supabase-dashboard>'
    accessToken: '<personal-access-token>'
 
supabase:
  enabled: false # Disable self-hosted Supabase

Email Templates

Customize authentication email subjects and templates:

global:
  supabase:
    emails:
      subjects:
        invite: 'Join your team on Rulebricks'
        confirmation: 'Confirm Your Email'
        recovery: 'Reset Your Password'
        emailChange: 'Confirm Email Change'
      templates:
        invite: 'https://your-cdn.com/templates/invite.html'
        confirmation: 'https://your-cdn.com/templates/verify.html'
        recovery: 'https://your-cdn.com/templates/password_change.html'
        emailChange: 'https://your-cdn.com/templates/email_change.html'

AI Features

Enable AI-powered rule generation (optional):

ParameterTypeDefaultDescription
global.ai.enabledbooleanfalseEnable AI features
global.ai.openaiApiKeystring""OpenAI API key
global:
  ai:
    enabled: true
    openaiApiKey: 'sk-...'

SSO Configuration

Enable Single Sign-On (SSO) via OpenID Connect (OIDC). For how user provisioning, claim mapping, and token passthrough work, see Authentication & SSO.

ParameterTypeDefaultDescription
global.sso.enabledbooleanfalseEnable SSO
global.sso.providerstring""Provider name (azure, google, okta, keycloak, ory, other)
global.sso.urlstring""Provider URL (required for all except Google)
global.sso.clientIdstring""OAuth client ID
global.sso.clientSecretstring""OAuth client secret

Provider Types

You will need to go to your Supabase dashboard, and configure your provider in the Authentication tab. If you don't see your provider, use Keycloak; our proxy uses it as a bridge.

  • Native Providers (azure, google, okta, keycloak): Supabase handles authentication directly.
  • Custom Providers (ory, other): The app uses a built-in OIDC proxy we manage to translate paths for your IdP.

Identity Provider Setup

You must configure your Identity Provider (IdP) with the following settings:

  • Scopes: openid, email, profile
  • Response Type: code
  • Grant Types: authorization_code, refresh_token
  • Auth Method: http body
  • Redirect URIs:
    1. https://<your-domain>/api/sso-proxy/callback
    2. <your-supabase-url>/auth/v1/callback

External Secrets

For enterprise deployments using external secret management:

ParameterTypeDescription
global.secrets.secretRefstringName of existing Kubernetes secret
global.secrets.secretRefKeys.*objectKey name mappings
global:
  secrets:
    secretRef: 'rulebricks-external-secrets'
    secretRefKeys:
      licenseKey: 'RULEBRICKS_LICENSE'
      smtpUser: 'SMTP_USERNAME'
      smtpPass: 'SMTP_PASSWORD'
      supabaseAnonKey: 'SUPABASE_ANON'
      supabaseServiceKey: 'SUPABASE_SERVICE'
      supabaseAccessToken: 'SUPABASE_TOKEN'
      openaiApiKey: 'OPENAI_KEY'
      ssoClientId: 'SSO_CLIENT_ID'
      ssoClientSecret: 'SSO_CLIENT_SECRET'

External Authentication (Token Passthrough)

For deployments behind an identity-aware proxy that has already authenticated the user, global.externalAuth.* (enabled, header, claims.id/email/name, publicPaths) delegates authentication to the upstream proxy. This carries real security implications; read Token Passthrough before enabling.

Scheduling, Labels, and Annotations

ParameterTypeDefaultDescription
global.scheduling.nodeSelectorobject{}Node selector for workloads that inherit global scheduling
global.scheduling.tolerationslist[]Tolerations (e.g. for ARM64-tainted node pools)
global.scheduling.affinityobject{}Affinity rules; prefer soft rules so installs aren't blocked
global.labels / global.annotationsobject{}Applied to all resource metadata (compliance, cost allocation)
global.podLabels / global.podAnnotationsobject{}Applied to pod templates only (e.g. mesh injection)

Rulebricks workloads and migration jobs honor global.scheduling; dependency subcharts (Kafka, Supabase, cert-manager, Traefik, KEDA, Vector) may require their own scheduling values. Most components also accept per-component podLabels and podDisruptionBudget blocks for clusters with admission policies.

Object Storage & Backups

Value prefixPurpose
global.storage.*Shared bucket, region, per-provider identity, and key prefixes
backup.*Scheduled database backups for self-hosted Supabase (Barman, CronJob)

Full tables, identity options per provider, and the backup/restore workflow live in Storage & Backups.

Rulebricks Application

The core application and high-performance solver (HPS).

Application Image

ParameterTypeDefaultDescription
rulebricks.app.image.repositorystring"index.docker.io/rulebricks/app"Docker image repository
rulebricks.app.image.pullPolicystring"IfNotPresent"Image pull policy

Image tags are selected by global.version, the single product semver shared by the app, HPS, and HPS worker images. There is no per-component tag to set.

Logging Configuration

ParameterTypeDefaultDescription
rulebricks.app.logging.enabledbooleantrueEnable decision logging
rulebricks.app.logging.kafkaBrokersstring""Kafka brokers (auto-discovered if empty)
rulebricks.app.logging.kafkaTopicstring"logs"Kafka topic for logs
rulebricks.app.logging.kafkaTopicPrefixstring"com.rulebricks."Prefix applied to all Kafka topic names; set "" to disable prefixing
rulebricks.app.logging.kafkaSslbooleanfalseEnable TLS for external Kafka brokers
rulebricks.app.logging.kafkaSasl.*object{}SASL auth for external Kafka: aws-iam, scram-sha-256, scram-sha-512, or plain

For how decision logs flow through the system, see Decision Logs. For external Kafka authentication (including AWS MSK IAM and Azure Event Hubs examples), see External Kafka & Redis.

Ingress

ParameterTypeDefaultDescription
rulebricks.ingress.enabledbooleantrueEnable chart-managed routing
rulebricks.ingress.app.enabledbooleantrueSet false when an external auth proxy owns the app catch-all route
rulebricks.ingress.typestring"ingress"ingress (standard) or gateway-api (renders HTTPRoute)
rulebricks.ingress.classNamestring"traefik"Ingress class name
rulebricks.ingress.hostnamestring""Override when the app hostname differs from global.domain
rulebricks.ingress.gatewayApi.*object{}gatewayName / gatewayNamespace for Gateway API mode
rulebricks.ingress.pathslist[{...}]List of paths to route

Gateway API mode requires an implementation (Envoy Gateway, Cilium, Istio) in your cluster.

Redis

Redis is used for caching and session management.

ParameterTypeDefaultRecommendation
rulebricks.redis.resources.requests.cpustring"200m"Increase for high traffic
rulebricks.redis.resources.requests.memorystring"256Mi"
rulebricks.redis.resources.limits.cpustring"500m"
rulebricks.redis.resources.limits.memorystring"4Gi"Increase for large rule sets
rulebricks.redis.persistence.enabledbooleantrueKeep enabled for production
rulebricks.redis.persistence.sizestring"4Gi"
rulebricks.redis.persistence.storageClassstring"gp3"Match your storage class

To use a managed Redis instance (ElastiCache, Memorystore, Upstash, and so on) instead of the bundled deployment, set rulebricks.redis.enabled: false and configure the external block:

ParameterTypeDefaultDescription
rulebricks.redis.external.hoststring""Redis hostname (required when redis.enabled is false)
rulebricks.redis.external.portinteger6379Redis port
rulebricks.redis.external.passwordstring""Inline password (injected at runtime, never in ConfigMaps)
rulebricks.redis.external.existingSecretstring""Existing secret name (preferred for production)
rulebricks.redis.external.existingSecretKeystring""Key within the secret
rulebricks.redis.external.tls.enabledbooleanfalseUse rediss://
rulebricks.redis.external.httpApi.*object{}Upstash-style HTTP API (url/token or existing secret)

See External Kafka & Redis for how each component connects.

High Performance Server (HPS)

HPS handles rule execution with horizontal scaling. For the sizing model behind these values (partition ceilings, worker resources, KEDA thresholds), see Performance & Scaling.

ParameterTypeDefaultDescription
rulebricks.hps.enabledbooleantrueEnable HPS
rulebricks.hps.replicasinteger3Number of HPS gateway replicas
rulebricks.hps.workers.enabledbooleantrueEnable worker pods
rulebricks.hps.workers.replicasinteger4Base worker replica count
rulebricks.hps.workers.solutionPartitionsinteger64Partition count of the solution topic; the worker fleet's concurrency ceiling
rulebricks.hps.workers.resources.*object1 CPU / 1GiPer-worker resources; keep CPU request equal to limit
rulebricks.hps.workers.keda.*objectsee Performance & ScalingKEDA autoscaling configuration

HPS Image

ParameterTypeDefaultDescription
rulebricks.hps.image.repositorystring"index.docker.io/rulebricks/hps"Docker image repository
rulebricks.hps.image.pullPolicystring"Always"Image pull policy

HPS and worker image tags are derived from global.version (<version> and worker-<version> respectively).

HPS Resources

ParameterTypeDefault
rulebricks.hps.resources.requests.cpustring"1000m"
rulebricks.hps.resources.requests.memorystring"1Gi"
rulebricks.hps.resources.limits.cpustring"2000m"
rulebricks.hps.resources.limits.memorystring"2Gi"

Database (Supabase)

Self-Hosted vs. Managed

Modesupabase.enabledUse Case
Self-hostedtrueFull control, air-gapped environments
Managed (Cloud)falseSimplified operations, managed backups

Self-Hosted Configuration

ParameterTypeDefaultDescription
supabase.enabledbooleantrueDeploy self-hosted Supabase
supabase.secret.db.usernamestring"postgres"Database username
supabase.secret.db.passwordstring"postgres-password-change-me"Change this!
supabase.secret.db.databasestring"postgres"Database name
supabase.secret.dashboard.usernamestring"supabase"Studio dashboard username
supabase.secret.dashboard.passwordstring"dashboard-password-change-me"Change this!

Database Resources

ParameterTypeDefaultProduction Recommendation
supabase.db.resources.requests.cpustring"500m""1000m" or higher
supabase.db.resources.requests.memorystring"1Gi""2Gi" or higher
supabase.db.persistence.enabledbooleantrueAlways true for production
supabase.db.persistence.sizestring"10Gi"Based on data volume
supabase.db.persistence.storageClassNamestring"gp3"Use fast storage

External PostgreSQL

The Supabase services can run in-cluster while pointing at an external PostgreSQL server (e.g. a managed instance). Set supabase.db.enabled: false and configure the connection once:

ParameterTypeDefaultDescription
supabase.externalDatabase.enabledbooleanfalseUse an external PostgreSQL server
supabase.externalDatabase.hoststring""PostgreSQL host shared across Supabase services
supabase.externalDatabase.portinteger5432PostgreSQL port
supabase.externalDatabase.secretRefstring""Existing secret with credentials (else secret.db)
supabase.externalDatabase.secretRefKey.*objectusername/password/databaseKey mappings within the secret

Migration jobs reach the same server through migrations.externalDb.*.

Kong Ingress

ParameterTypeDefaultDescription
supabase.kong.ingress.enabledbooleantrueEnable Supabase API ingress
supabase.kong.ingress.classNamestring"traefik"Must match Traefik class

Studio and Auth URLs

Supabase Studio can be exposed on its own hostname via supabase.studio.ingress.* (enabled, type, className, hostname, defaulting to studio.<global.domain>); dashboard credentials come from supabase.secret.dashboard.*. When your application hostname differs from the base domain, override the computed auth URLs with supabase.auth.siteUrl, supabase.auth.externalUrl, and supabase.auth.additionalRedirectUrls.

Migrations

ParameterTypeDefaultDescription
migrations.strategystring"hook"hook (post-install/upgrade), deployment (regular resource, supports post-rendering), or manual (render without hooks)
migrations.ttlSecondsAfterFinishedinteger2592000Seconds to retain completed migration Jobs and pod logs
migrations.backoffLimitinteger3Retries before marking the Job failed
migrations.externalDb.*object{}Host/port/secret for migrations against an external PostgreSQL

Migration pods inherit global.scheduling and accept their own nodeSelector, tolerations, and annotations.

Message Queue (Kafka)

Kafka handles async rule execution and logging.

Basic Settings

ParameterTypeDefaultDescription
kafka.enabledbooleantrueDeploy Kafka
kafka.kraft.enabledbooleantrueUse KRaft mode (no Zookeeper)
kafka.zookeeper.enabledbooleanfalseDisable Zookeeper

Controller/Broker Configuration

ParameterTypeDefaultDescription
kafka.controller.replicaCountinteger1Number of Kafka nodes
kafka.controller.resources.requests.cpustring"500m"CPU request
kafka.controller.resources.requests.memorystring"2Gi"Memory request
kafka.controller.resources.limits.cpustring"2000m"CPU limit
kafka.controller.resources.limits.memorystring"3Gi"Memory limit
kafka.controller.persistence.sizestring"20Gi"Storage size
kafka.controller.heapOptsstring"-Xmx1g -Xms1g..."JVM heap settings

The chart also ships pre-tuned broker settings (JVM options, network threads, socket buffers, message size limits) as kafka.controller.extraEnvVars and kafka.overrideConfiguration. These defaults are correct for the topics the chart provisions; override them only with a specific reason, using the chart's values.yaml (opens in a new tab) as the reference.

Kafka Topic Provisioning

The chart manages application topics explicitly rather than relying on broker auto-creation. The kafka.provisioning block is consumed by two post-install/post-upgrade Jobs: the Kafka subchart's provisioning Job creates topics if they don't exist, and the parent chart's kafka-topic-align Job idempotently converges pre-existing topics (partition increases, retention and size configs) so upgrades of existing installs don't require manual steps.

ParameterTypeDefaultDescription
kafka.provisioning.enabledbooleantrueEnable explicit topic management
kafka.provisioning.topicslistthree topicsPer-topic name, partitions, replication, and config

The defaults provision solution, solution-response, and logs topics with per-topic retention and size limits. Each entry looks like:

kafka:
  provisioning:
    enabled: true
    topics:
      - name: com.rulebricks.solution
        partitions: 64
        replicationFactor: 1
        config:
          retention.ms: '300000'
      # ... see the chart's values.yaml for the full default topic list
⚠️

Topic names must carry the configured kafkaTopicPrefix. If you change the prefix, change these names to match. The CLI does this automatically. The solution topic's partition count must also equal rulebricks.hps.workers.solutionPartitions; see Performance & Scaling.

When using external Kafka (kafka.enabled: false), provisioning is disabled and topics are customer-managed. See External Kafka & Redis.

Kafka Bridge (Token-Auth External Kafka)

When external Kafka uses a token-based SASL mechanism (AWS MSK IAM, GCP OAUTHBEARER), Vector consumes through a kafka-proxy bridge sidecar that authenticates upstream via workload identity:

ParameterTypeDefaultDescription
kafkaBridge.enabledbooleanfalseEnable the bridge sidecar path
kafkaBridge.providerstring""aws or gcp
kafkaBridge.regionstring""Region (required for AWS MSK IAM signing)
kafkaBridge.brokersstring""Upstream managed-Kafka broker list
kafkaBridge.localPortinteger19092Local plaintext port Vector consumes from
kafkaBridge.awsRoleArnstring""IRSA role ARN (AWS)
kafkaBridge.gcpServiceAccountEmailstring""Workload Identity service account email (GCP)

The CLI sets all of this automatically when you externalize Kafka. See External Kafka & Redis.

High Availability

kafka:
  controller:
    replicaCount: 3
  overrideConfiguration:
    default.replication.factor: '3'
    min.insync.replicas: '2'

Ingress (Traefik)

Traefik handles all incoming traffic and TLS termination.

ParameterTypeDefaultDescription
traefik.enabledbooleantrueDeploy Traefik
traefik.ingressClass.namestring"traefik"Ingress class name
traefik.autoscaling.enabledbooleantrueEnable HPA
traefik.autoscaling.minReplicasinteger1Minimum replicas
traefik.autoscaling.maxReplicasinteger2Maximum replicas

Traefik resources, ports, and persistence follow the upstream subchart's values under traefik.*; the chart's defaults expose 80/443 and need no changes for typical deployments.

Autoscaling (KEDA)

KEDA provides event-driven autoscaling for HPS workers. Scaling behavior is configured per-worker under rulebricks.hps.workers.keda.*; see Performance & Scaling.

ParameterTypeDefaultDescription
keda.enabledbooleantrueDeploy KEDA
keda.crds.installbooleanfalseCRDs managed by parent chart

Certificates (cert-manager)

cert-manager provisions TLS certificates from Let's Encrypt.

ParameterTypeDefaultDescription
cert-manager.enabledbooleantrueDeploy cert-manager
cert-manager.installCRDsbooleanfalseCRDs managed by parent chart

The chart creates a ClusterIssuer for Let's Encrypt production and Certificate resources for your domain(s).

Decision Logging (Vector & ClickHouse)

Value prefixPurpose
vector.*Log aggregator consuming the Kafka logs topic; sinks and replicas
clickhouse.*Stateless query engine over the decision log archive

Vector's Kafka connection (brokers, TLS, SASL, and the prefixed log topic) is templated automatically into a vector-kafka-env ConfigMap from rulebricks.app.logging.*; you don't set it by hand. How the pipeline fits together, the values tables, and custom sink examples live in Decision Logs.

DNS (external-dns)

external-dns automatically creates DNS records for your ingresses.

ParameterTypeDefaultDescription
external-dns.enabledbooleanfalseDeploy external-dns
external-dns.providerstring"route53"DNS provider
external-dns.sourceslist["ingress"]Resource types to watch
external-dns.domainFilterslist[]Restrict to specific domains
external-dns.policystring"upsert-only"Record management policy

Provider Configuration

AWS Route53

external-dns:
  enabled: true
  provider: route53
  # Uses IRSA - ensure service account has Route53 permissions

Cloudflare

external-dns:
  enabled: true
  provider: cloudflare
  extraEnvVars:
    - name: CF_API_TOKEN
      valueFrom:
        secretKeyRef:
          name: cloudflare-api-token
          key: api-token

Google Cloud DNS

external-dns:
  enabled: true
  provider: google
  google:
    project: 'your-gcp-project'

Azure DNS

external-dns:
  enabled: true
  provider: azure
  azure:
    resourceGroup: 'your-resource-group'
    subscriptionId: 'your-subscription-id'

Monitoring (Prometheus)

ParameterTypeDefaultDescription
monitoring.enabledbooleantrueEnable monitoring
rulebricks.metrics.enabledbooleantrueRulebricks ServiceMonitors
kube-prometheus-stack.*objectsee valuesUpstream Prometheus stack configuration

What's scraped, the metric label policy, remote write, and retention examples live in Monitoring.

Storage

StorageClass

The chart can create a gp3 StorageClass for AWS EBS:

ParameterTypeDefaultDescription
storageClass.createbooleantrueCreate StorageClass
storageClass.namestring"gp3"StorageClass name
storageClass.provisionerstring"ebs.csi.aws.com"CSI provisioner
storageClass.typestring"gp3"EBS volume type
storageClass.fsTypestring"ext4"File system type
storageClass.reclaimPolicystring"Delete"Reclaim policy
storageClass.volumeBindingModestring"WaitForFirstConsumer"Binding mode
storageClass.allowVolumeExpansionbooleantrueAllow expansion

For non-AWS clusters, set storageClass.create: false and ensure a compatible StorageClass exists. Provider-specific examples are in Quick Start.