Helm-based installation requires an OpenHands Enterprise license. If you don’t have
one yet, register for a free 30-day trial
or contact our team to get set up.
The license YAML from the install portal is all the licensing material you need:
use
spec.customerEmail as the registry username and spec.licenseID as its
password. The embedded-cluster installer assets on that portal are for VM
installations, not Helm.Prerequisites
- A Kubernetes cluster with a default storage class and an ingress controller (see Resource Limits for sizing guidance)
- Helm v4 or later
kubectlaccess to the target cluster- Your license ID and the email address registered with your license (both provided by our team)
- LLM credentials from your chosen provider, for example an Anthropic API key from the Anthropic Console
- DNS records you control, following the layout used throughout this guide
(with
openhands.example.comas the base domain):app.openhands.example.com(application),auth.openhands.example.com(login),runtime-api.openhands.example.com, and<id>-runtime.openhands.example.comfor the per-session sandboxes. Every hostname sits one label under the base domain, so a single wildcard record*.openhands.example.compointing at your cluster’s ingress covers all of them; see DNS and TLS. - A wildcard TLS certificate for
*.openhands.example.com, which you provide. - An authentication method for user login — GitLab, Bitbucket Data Center, and more are supported; this guide uses a GitHub App. See Creating a GitHub App.
Step 1: Log in to the registry
Authenticate Helm against the Replicated registry using your license. Supply the license ID on standard input so it does not appear in the command history:Step 2: Create the namespaces and secrets
We recommend running agent sandboxes in a namespace separate from the application. Sandboxes run agent-authored code, so a dedicated namespace keeps them isolated from the application, database, and secrets. Create both namespaces now:openhands namespace:
keys
directory:
Step 3: Configure values
Create avalues.yaml with your environment-specific configuration. The
minimum for a working installation covers application ingress and TLS,
user authentication, the runtime (sandbox) endpoints, conversation
storage, and your LLM provider. PostgreSQL and Redis run embedded in the
cluster; the bundled PostgreSQL needs a database name and database creation
turned on, both shown below (to use your own database instead, see
External PostgreSQL).
The example below uses Traefik, the chart’s default ingress class; set
ingress.class and the annotations to match your controller.
Chart The static frontend can load without a second API-key prompt; Enterprise
API requests still use the signed-in session. Later chart versions may
provide a working default UI without these overrides.
0.71.1 redirects signed-in users to /canvas but does not enable
that frontend by default. For this chart version, add the following to
values.yaml so the first conversation can start:Step 4: Install
replicated pod — the Replicated SDK, which
handles license verification and powers the support tooling below.
Step 5: Validate the installation
The chart ships preflight checks that validate your cluster against the application’s requirements. Run them with thepreflight CLI:
- Open
https://app.openhands.example.comand sign in through your configured identity provider. The conversation UI should load without an additional backend URL or API-key prompt. - Start a new conversation and ask the agent to run
pwd. Confirm a sandbox starts inopenhands-runtimes, the command returns a path, and the agent gives a completed reply. - If the conversation cannot start, use the first-conversation checks before changing the deployment.
On chart
0.71.1, a fresh user’s selected Default LLM profile may not
match LITELLM_DEFAULT_MODEL. If the first request reports an invalid proxy
token or model, inspect the selected profile and the bundled LiteLLM model
list using the troubleshooting checks. Do not enter an infrastructure API key
into the browser to work around this error.Next Steps
The install above is a minimal working baseline. Features and tuning are values overrides on the same release — edit yourvalues.yaml and apply with
helm upgrade using the chart URL from Step 4:
Resource Limits
Size memory, CPU, and replicas for production workloads.
External PostgreSQL
Use your own PostgreSQL instead of the embedded instance.
Analytics
Enable conversation analytics with Laminar.
Automations
Run scheduled or event-triggered tasks on a Helm installation.
Plugin Marketplace
Offer curated plugins to your users.
Troubleshooting
For a guided diagnostic workflow and a map of OHE components, see Troubleshooting.Generate a support bundle
If something isn’t working, generate a support bundle with thesupport-bundle CLI.
It discovers the diagnostic specs that ship with the chart and collects logs,
resource states, and health checks from the installation:

