Skip to main content
OpenHands Enterprise is distributed as a Helm chart through the Replicated registry. Your license credentials authenticate the chart download, and the chart embeds your license automatically at install time.

Get an Enterprise License

  1. Request a 30-day trial by contacting OpenHands via openhands.dev/pricing.
  2. You will receive a link to sign up for the OpenHands installation portal.
  3. After you sign up, open the Install tab in the installation portal. You will see two options: Linux VM and Helm. Select Helm to proceed with a Kubernetes-based deployment.
  4. Follow the on-screen instructions to configure your Helm install. The portal guides you through step-by-step commands to prepare your cluster and install the Helm chart.
The portal also shows your license email address and license ID. You use them as the registry username and password in Step 1. Keep these credentials outside version control and avoid sharing commands that contain the license ID.
If the portal offers only VM installation instructions, contact the OpenHands team to enable Helm access. The embedded-cluster installer is for VM installations only. You do not need to run it for a Helm deployment.

Prepare Your Cluster

Review the prerequisites, then complete the guide for your Kubernetes provider before running the Helm commands: These guides cover cluster preparation and provider-specific Helm values. Return here once your cluster is ready, and merge the applicable provider values into your installation configuration. On AKS, keep the runc override file last in the Helm values arguments, as described in the AKS guide. For another Kubernetes provider, prepare a cluster that meets the prerequisites below, including storage, ingress and a supported sandbox runtime.

Prerequisites

  • A Kubernetes cluster with a default storage class and an ingress controller (see Resource Limits for sizing guidance)
  • Helm v4 or later
  • kubectl access to the target cluster
  • Your license ID and the email address registered with your license (from the install portal or our team, as described above)
  • LLM credentials from your chosen provider, for example an Anthropic API key from the Anthropic Console. For Azure models, see Azure LLM Gateway.
  • DNS records you control, following the layout used throughout this guide (with openhands.example.com as the base domain): app.openhands.example.com (application), auth.openhands.example.com (login), runtime-api.openhands.example.com, and <id>-runtime.openhands.example.com for the per-session sandboxes. Every hostname sits one label under the base domain, so a single wildcard record *.openhands.example.com pointing 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:
These install commands are also available in the installation portal under Install → Helm.

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:
The chart references several Kubernetes secrets that you create ahead of installation, all in the openhands namespace:
The application and Runtime API must use the same key. Create both Secrets from one generated value:
Then create the secret for user authentication. Other providers (GitLab, Bitbucket Data Center, and more) are supported, but this guide uses GitHub throughout. If you don’t have a GitHub App yet, run our script — its output provides every value below, and the private key file is written to its keys directory:
Generate strong random values (for example with openssl rand -hex 32) for each remaining <random-string> placeholder, and store them in your secret manager. Use one value for both Runtime API Secrets. Since this example connects to PostgreSQL as postgres, use one value for its password and postgres-password fields too. To use an existing PostgreSQL instance instead of the bundled one, see External PostgreSQL.

Step 3: Configure values

Create a values.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 embedded PostgreSQL is intended for proof-of-concept and evaluation use only, not production. For production deployments we recommend bringing your own managed PostgreSQL — see External PostgreSQL. There is no officially supported migration path from the embedded PostgreSQL instance to an external one, so plan to switch to an external database before you load production data.
The example below uses Traefik, the chart’s default ingress class; set ingress.class and the annotations to match your controller.
This example uses Amazon S3 for conversation storage. Follow the EKS object storage steps to grant the application access to the bucket. On another Kubernetes provider, configure a supported external object store and its credentials before installing.
Chart 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:
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.

Step 4: Install

Replace <chart-version> with the licensed chart version supported by your provider guide, shown in your portal’s Helm instructions, or provided by our team. Check its values before installing. Version-specific notes on this page apply only to the versions they name.
On AKS, append --values values-aks-runc.yaml after --values values.yaml in the command below. Keep the runc file last, after any feature overlays, on every install and upgrade. See Azure AKS.
Watch the workloads come up:
The first install pulls all container images, which can take a while. Along with the application components you’ll see a 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 the preflight CLI:
The preflight and support-bundle CLIs are both part of Troubleshoot. Install them with:
Then confirm the application is reachable at your configured hostname and log in. A complete first-use check goes beyond Ready pods and preflight:
  1. Open https://app.openhands.example.com and sign in through your configured identity provider. The conversation UI should load without an additional backend URL or API-key prompt.
  2. Start a new conversation and ask the agent to run pwd. Confirm a sandbox starts in openhands-runtimes, the command returns a path, and the agent gives a completed reply.
  3. 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 your values.yaml and apply with helm upgrade using the chart URL from Step 4 and --version <chart-version> for your chosen upgrade version. Preserve all provider-specific values; on AKS, pass --values values-aks-runc.yaml last, after the base values and any feature overlays.

Azure LLM Gateway

Configure Azure OpenAI and Azure AI Foundry model routes.

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.

Google Models

Configure Vertex AI or Gemini API routes in the bundled gateway.

Automations

Run scheduled or event-triggered tasks on a Helm installation.

AWS Bedrock

Route models through the bundled gateway using an IAM role on EKS.

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 the support-bundle CLI. It discovers the diagnostic specs that ship with the chart and collects logs, resource states, and health checks from the installation:

Send it to us

Upload the resulting archive directly to our support team — the upload authenticates with the license embedded in the bundle:

Common issues