version with the version you want to upgrade to):
If you are using a namespace other than the default namespace, you will need to specify the namespace in the
helm and kubectl commands by using the -n <namespace flag.If your installation is more than one major version behind the latest chart, upgrade one major version at a time. Do not skip major versions. Repeat this upgrade procedure for each intervening major version before upgrading to the latest supported version.For example, to upgrade from 0.15 to 0.17, first upgrade to the latest 0.16 chart, then upgrade to the latest 0.17 chart.
Running state. Verify that ClickHouse is running and that both migrations jobs have completed.
Validate your deployment
-
Run
kubectl get servicesOutput will be similar to: -
Curl the external ip of the
langsmith-frontendservice:Check that the version matches the version you upgraded to. -
Visit the external IP for the
langsmith-frontendservice on your browser. The LangSmith UI should be visible and operational.
Upgrade separate sandbox clusters
When Sandboxes run in a separate cluster, each upgrade involves two Helm releases:langsmith in the LangSmith cluster and langsmith-sandbox in the sandbox cluster. Keep both on the same LangSmith release:
- Order: Upgrade
langsmithfirst, thenlangsmith-sandboxwithin days. Do not run the sandbox hosts on a newer release than the control plane, except while the runtime upgrade rolls out. If the release notes for a version give a different order, follow them. LangSmith warns in the UI when the runtime falls behind for more than 72 hours or runs ahead for more than 30 minutes. - Version: Use the newest
langsmith-sandboxchart whose appVersion equals the appVersion of yourlangsmithchart. The two charts pair by appVersion, never by chart version. See Release policy. - Pinning: Pin both releases to exact chart versions. Never use a version range.
langsmith release:
Upgrade with the Helm CLI
Run two commands, each against its own cluster,langsmith first:
- No automatic rollback for the runtime: Do not pass
--atomicor--rollback-on-failureto thelangsmith-sandboxupgrade. Hosts drain one at a time, so a slow rollout can exceed the--waittimeout without having failed, and a rollback restarts every host again. - Timeout: Set
--timeoutto about the number of hosts timessandboxHost.deployment.terminationGracePeriodSeconds(300 seconds by default), plus the time a host takes to start. To follow the rollout, runkubectl rollout statuswith a similar timeout. - Reused values: If you reuse the previous release’s values, prefer
--reset-then-reuse-valuesto--reuse-values.--reuse-valueskeeps the previous chart’s defaults, including its image tags.
Upgrade with Argo CD or Flux
- Two changes: Bump
langsmithin one Git change. After its sync succeeds and the application is Healthy (Flux: the HelmRelease isReady), bumplangsmith-sandboxto the exact matching version in a second change. - No combined change: One change that bumps both charts syncs them at the same time. If the
langsmithupgrade is then blocked, for example by a failing pre-upgrade hook, the hosts run ahead of the control plane until it goes through. - No floating versions: Never let the runtime chart float. Do not use a range,
*, or*-0, and do not omitversionin a Flux HelmRelease.
Upgrade with your own infrastructure as code
Model the two charts as two Helm releases with an explicit dependency, such asdepends_on in Terraform, so langsmith applies before langsmith-sandbox. Pin both to exact chart versions.
Check the upgrade
After both upgrades:-
Check that both releases report the same
APP VERSION. Argo CD does not update Helm release records, so skip this step there; step 3 checks the same thing: -
Check that the
platform-backendandsandbox-hostrollouts finished: -
Check that the image tags each cluster runs match that
APP VERSION:
langsmith and langsmith-sandbox.
Roll back the runtime
Roll back only thelangsmith-sandbox release, with helm rollback or by reverting its Git change. Do not roll back the langsmith release: its database migrations only move forward, so fix forward instead. A host rollback restarts every host, like an upgrade. It is not always safe: if the newer hosts already wrote sandbox data in a format that older hosts cannot read, roll forward instead. If you are unsure, contact support before you roll hosts back.
Change the topology or uninstall
- Move from the embedded runtime: Set
sandboxes.external.enabled: trueon thelangsmithrelease first, then installlangsmith-sandboxagainst the same JuiceFS metadata store and bucket. See Move an existing installation to a separate cluster. - Uninstall: Uninstall
langsmith-sandboxfirst, then uninstall or reconfigurelangsmith. See Uninstall.
Upgrade from v16 to v17
Chart v17 changes the values for SmithDB, sandboxes, and Engine. Update your values file before you runhelm upgrade. Chart v17 fails to render the SmithDB, sandbox, and Engine values below until you change them. If you deploy with the Terraform modules, follow the upgrade steps in the AWS, GCP, or Azure deploy guide, which apply these changes to the module’s values files.
-
SmithDB: Move
smithdb.migration.deploymenttosmithdb.migration.job. Withsmithdb.enabled: true, move the flat autoscaling keys (enabled,minReplicas,maxReplicas, and the rest) onquery,ingestion,mutations,runRules,statsQuery, andcompactionWorkerunderautoscaling.hpa.*. ForcompactionWorker, you can useautoscaling.keda.*instead, but enable only one scaler. For the cache volume changes, see Cache storage. -
Sandboxes: Chart v17 removes the bundled JuiceFS CSI driver, and
sandbox-hostmounts JuiceFS itself. Chart v17 ignores a leftoversandboxes.juicefs.csiblock, and its validation then fails withsandboxes.juicefs.redis.metaURL is required when sandboxes.enabled is true and sandboxes.juicefs.existingSecretName is not set.Move the settings:sandboxes.juicefs.csi.existingSecretNamebecomessandboxes.juicefs.existingSecretName. The Secret keeps its keys.- The cache options in
sandboxes.juicefs.csi.mountPodPatchmove tosandboxes.juicefs.hostMount.cacheDirssets the host paths for the JuiceFS cache and defaults to/var/cache/juicefs. If you override it, list at least one absolute path. Set other JuiceFS options inmountOptionsin the--flag=valueform, and do not set--cache-dirthere. The default cache size drops from 300 GiB (cache-size=307200) to 50 GiB (--cache-size=51200). - Move the IRSA or Workload Identity annotation from
sandboxes.juicefs.csi.node.serviceAccount.annotationstosandboxes.sandboxHost.serviceAccount.annotations. On GKE,sandbox-hostruns on the host network, and GKE does not give Workload Identity to host-network pods, so the annotation serves only thejuicefs-formatJob. Also grant the sandbox node pool’s service accountroles/storage.objectAdminon the bucket, limited by an IAM condition to the JuiceFS prefix. Without that grant, the mount gets 403 from Cloud Storage.
sandbox-hostpods stay inTerminating. With the default release name:Running sandboxes stop. Their data stays in object storage and Redis, because both chart v16 PersistentVolumes use theRetainreclaim policy. -
Engine: With Engine enabled, set
engine.usageSigningSecretto a value of at least 32 characters (generate one withopenssl rand -hex 32), or, when you useconfig.existingSecretName, add anengine_usage_signing_secretkey to that Secret instead. The defaultengine.intelligenceBaseUrlchanges tohttps://beacon.langchain.com/intelligence, which records usage only. To keep running Engine on LangSmith Intelligence models, as on chart v16, keephttps://beacon.aws.langchain.com/intelligenceand select LangSmith Intelligence under Settings > Engine > Model providers. For details, see LangSmith Engine on Self-hosted.
Connect these docs to your agent of choice via MCP for real-time answers.

