Prerequisites
- Kubernetes 1.28+
- Helm 3.12+
kubectlconfigured for your cluster- A StorageClass that supports dynamic provisioning (for persistent volumes)
- A domain name (for Ingress with TLS)
- Default resource requirements: ~6 CPU and ~18 Gi RAM (requests). See Size Overlays for smaller or larger configurations.
Quick Start
Deploy LangWatch with all dependencies managed by the chart:Low-Resources Deployment
The default install requests ~6 CPU and ~18 Gi RAM. For smaller clusters or evaluation purposes, use the dev overlay which requests approximately ~2 CPU and ~4 Gi RAM:Production Deployment
For production, you should:- Use external managed databases (PostgreSQL, Redis)
- Create Kubernetes Secrets manually
- Expose via Ingress with TLS
- Disable auto-generation
1. Create the app Secret
One Secret holds every chart-required value (app keys + AI gateway shared-auth keys when the gateway sub-chart is enabled). Bothlangwatch-app and the gateway pod mount it.
gateway.chartManaged: false (no AI gateway proxy), skip the two LW_GATEWAY_* lines.
For external databases, create additional secrets:
2. Create a Values File
Start from the production example and customize. This configuration requests approximately ~8.5 CPU and ~28 Gi RAM across all pods:3. Install
4. Verify
High-Availability Deployment
For HA with replicated ClickHouse, multiple app/worker replicas, and PodDisruptionBudgets. This configuration requests approximately ~36 CPU and ~84 Gi RAM across all pods:Replicated ClickHouse requires an odd number of replicas (3, 5, 7) for Keeper consensus. 3 replicas is recommended for most deployments.
Overlay System
The chart ships with composable overlay files inexamples/overlays/. Combine them to build your deployment configuration:
Size Overlays
Access Overlays
Infrastructure Overlays
Composing Overlays
Overlays are composable, later files override earlier ones:ClickHouse Configuration
Standalone vs Replicated
Switch to replicated mode:
External ClickHouse
To use an existing ClickHouse instance:Auto-Tuning
Theclickhouse-serverless subchart automatically tunes ClickHouse parameters based on the CPU and memory you allocate:
AI Gateway sub-chart (optional)
The umbrella chart bundles the AI Gateway as an opt-in sub-chart that runs alongside the core LangWatch app. Enabling it gives you virtual keys, hierarchical budgets, multi-provider routing via Bifrost, guardrails, and prompt caching, all governed by the same control plane. Minimum viable opt-in:- One Secret holds everything (or use
autogen.enabled=trueand let the chart materialise it). Bothlangwatch-appand the AI gateway pod mountLW_GATEWAY_INTERNAL_SECRET+LW_GATEWAY_JWT_SECRETfrom the samesecrets.existingSecretSecret (defaultlangwatch-app-secrets) that also holds the app keys (credentialsEncryptionKey,cronApiKey,nextAuthSecret,virtualKeyPepper). The Production Deployment section above shows the singlekubectl create secret genericcommand. Withautogen.enabled=falseand any required key missing, the preflight Job aborts the install with a clear list of what is missing; underautogen.enabled=truethe chart materialises the Secret on first install via lookup-or-rand. - Public ingress needs DNS + TLS. The gateway is what your LLM clients hit, so it usually wants its own hostname (e.g.
gateway.your-corp.com), separate cert, separate ingress rule. See AI Gateway → Self-hosting → DNS & TLS. - Worker pods must be running. Budget enforcement reads from a ClickHouse rollup that the trace-processing reactor folds into. If you deploy with
workers.enabled=false, budgets stop accumulating spend and breach enforcement silently degrades. The defaultworkers.enabled=trueis correct for production.
Upgrade
SKIP_PRISMA_MIGRATE=true to disable PostgreSQL migrations if needed.
See Upgrade Guide for version-specific instructions.
Uninstall
FAQ
Istio, Service Mesh
If you’re using Istio or another service mesh with automatic sidecar injection, the CronJob pods may fail because the sidecar keeps the pod alive after the job completes. Disable sidecar injection for CronJobs:Custom StorageClass
Set a StorageClass for all persistent volumes:Air-Gapped Environments
For clusters without internet access:- Push LangWatch images to your private registry
- Update
images.app.repository,images.langwatch_nlp.repository,images.langevals.repository - Set
imagePullSecretsif your registry requires authentication