Skip to main content
Install Hybrid from a terminal with kubectl access to your cluster. Check Requirements first.

1. Get your one-liner from xpander Chat

  1. In xpander Chat, open Platform > Agents > Runtime and choose the Locations tab (Connected runtimes and regions)
  2. Click “Add Location”
  3. Choose the Hybrid edition. The dialog shows the minimum footprint for the deployment you picked.
  4. Optionally set a URL (your server’s FQDN, e.g. xpander.my-company.com) and the hostname style (dash-based subdomains if your DNS can’t do wildcards)
  5. Copy the generated one-liner
The one-liner carries your identity, --org, --env, and --dm-api-key (plus --domain when you set a URL). That is how the cluster authenticates to the xpander control plane:
The one-liner deliberately carries no LLM provider credentials: the wizard prompts for those interactively (input hidden), or you pass them as flags. Secrets are written to a temporary values file (mode 600, removed on exit) and never appear on the helm command line.

2. Run the installer

The command downloads the installer from charts.xpander.ai and runs an interactive wizard: preflight checks, configuration, Helm install, then the connection back to xpander. Run bare (curl -fsSL https://charts.xpander.ai/install.sh | bash), it is the zero-knowledge entry point: the first question is which edition you are installing.
1

Edition & requirements

If --edition wasn’t given, it asks. It then prints the minimum footprint for that edition (the same numbers as charts.xpander.ai/requirements.json) and asks you to confirm your cluster meets it, stopping cleanly if not.
2

Identity

Organization ID, Environment ID, and the Deployment Manager API key (input hidden): all from the install card in xpander Chat, all skipped if passed as flags.
3

Ingress domain (optional)

Press Enter to skip and keep cluster-internal Services (port-forward reaches them, add ingress later). With a domain, choose the hostname style: subdomain style (agent-controller.xpander.<DOMAIN>, needs wildcard DNS) or dash style (agent-controller-xpander.<DOMAIN>, individual A records). See External access and DNS.
4

Control plane reachability

Public internet (https://deployment-manager.xpander.ai), AWS PrivateLink (https://deployment-manager-privatelink.xpander.ai, set it up first), or Staging. The installer auto-detects staging/local environments (a .stg. or local domain, or a kind/k3d/minikube/docker-desktop kube context) and leads with that option. Any of --staging, --privatelink, or --dm-url overrides detection.
5

LLM providers (all optional)

OpenAI, Anthropic, Google/Gemini, Amazon Bedrock, then optionally Fireworks, Nebius, Helicone and OpenRouter. All skippable: xpander starts without keys, and model calls work once you add a key in the UI or with a helm upgrade.For Bedrock it asks how to authenticate: an API key / bearer token (AWS_BEARER_TOKEN_BEDROCK), or keyless IAM role / EKS pod identity. See Amazon Bedrock: keyless IAM or API key.
6

Namespace, context confirmation, summary

Namespace (default xpander, created if missing), an explicit confirmation of the kubectl context it is about to install into, and a masked configuration summary before anything changes.

Install phases

The Hybrid install runs six phases, each announced as a stable [N/6] name: ... progress line (the same shape scripts can grep, see Automation and CI):
The preflight accepts Helm 3.13, but the documented upgrade command (--reset-then-reuse-values) needs Helm 3.14 or later. Every failure prints FIX: (the repair) and RERUN: (your non-interactive one-liner, secrets placeholdered). The installer is idempotent. See Troubleshooting.

3. Verify the connection

The installer prints a summary. Within a minute or two the console shows “Connection established”.
Expect one Running, 1/1-ready pod per application service: agent-controller, agent-worker, ai-gateway, api, aws-operator, chat, code-runner, and mcp. ai-gateway is a registration-only compatibility component. Skill calls, including AWS ones, are served by agent-controller since chart 0.16.1. The LLM Gateway runs as two llm-gw pods (one on a single-node cluster installed with install.sh). You should also see the postgres and redis StatefulSets, and, at defaults, docker-registry and metrics-server. Test locally without ingress:
The installation then appears in the ENVIRONMENTS switcher and under Platform > Agents > Runtime (Locations tab), where Components shows heartbeats per service and Configuration holds the Chat, Streaming and Scheduler controls.

Advanced: review-first or manual install

Read the installer before running it:
  • The versioned URL is immutable: install-v<version>.sh is published once per release and never rewritten in place, so pin it in runbooks and CI (bash install.sh --version prints the version you’re holding).
  • The script is shellcheck-clean, enforced by CI on every push.
  • Secrets never touch the helm command line: they are written to a temporary values file (mode 600, removed on exit), so they don’t land in shell history or process listings.
  • Nothing runs against a cluster before the kube-context confirmation: the installer names the context and cluster it is about to install into and waits for your yes.
To do it yourself:
The installer is a wrapper around helm upgrade --install. Everything it does can be done by hand. The cleanest middle path is --values-out:
Or fully by hand. Add the repository:
Set the deployment manager URL based on your connectivity choice (public https://deployment-manager.xpander.ai, or https://deployment-manager-privatelink.xpander.ai with PrivateLink) and install:
LLM provider keys are secrets.static.* values. The full list is in the key mapping table. Common optional parameters:For production, use a values file instead of --set flags:
xpander-values.yaml
See Sizing and requirements for recommended resource values per service.

Installer flags reference

Air-gap-only flags (license, mirroring, image tags, data tier, base domain, code execution): Air-gapped deployment.
Hybrid identifies with the three values shown in xpander Chat. Required non-interactively.
All optional, the wizard asks for these.

Next steps

Let users reach the cluster

VPN, or ingress, NLB and DNS

Add model keys

Provider keys and Bedrock