kubectl access to your cluster. Check Requirements first.
1. Get your one-liner from xpander Chat
- In xpander Chat, open Platform > Agents > Runtime and choose the Locations tab (Connected runtimes and regions)
- Click “Add Location”
- Choose the Hybrid edition. The dialog shows the minimum footprint for the deployment you picked.
- 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) - Copy the generated one-liner
--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 fromcharts.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):
--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”.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:
Advanced: review-first or manual install
Read the installer before running it:What the installer guarantees
What the installer guarantees
- The versioned URL is immutable:
install-v<version>.shis published once per release and never rewritten in place, so pin it in runbooks and CI (bash install.sh --versionprints 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.
Manual Helm install (no installer at all)
Manual Helm install (no installer at all)
The installer is a wrapper around Or fully by hand. Add the repository:Set the deployment manager URL based on your connectivity choice (public LLM provider keys are See Sizing and requirements for recommended resource values per service.
helm upgrade --install. Everything it does can be done by hand. The cleanest middle path is --values-out:https://deployment-manager.xpander.ai, or https://deployment-manager-privatelink.xpander.ai with PrivateLink) and install: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
Installer flags reference
Identity
Identity
Hybrid identifies with the three values shown in xpander Chat. Required non-interactively.
LLM providers
LLM providers
All optional, the wizard asks for these.
Hybrid connectivity & ingress
Hybrid connectivity & ingress
Chart and release
Chart and release
Other
Other
Next steps
Let users reach the cluster
VPN, or ingress, NLB and DNS
Add model keys
Provider keys and Bedrock

