--domain at install and the chart publishes every host on your ingress controller. Then make the hosts resolve where your users are and sign in with the bootstrap admin.
Domains, ingress and DNS
One--domain (for example xpander.acme.internal) names every public host:
Setting the domain publishes these Ingresses.
<name>.ingress.enabled: false keeps one private, and global.ingress.enabled: false suppresses all. The domain also sets the UI’s runtime origins: without it, or ui.env overrides, browsers on a sealed network get unreachable origins.
--ingress-scheme https|http(defaulthttps) feeds every derived URL. Usehttponly without certificates.- No ingress controller is assumed: set
<name>.ingress.className/annotations, orglobal.ingress.className/global.ingress.annotations. - Rename a host with
<name>.ingress.host(the UI also with--ui-host), and move the matching knobs in the same change.
Renaming hosts: the knobs that must follow each host
Renaming hosts: the knobs that must follow each host
A reference customer renames most of them:
app. (UI), auth. (Supabase), api., chat. (agent-controller), hooks. (webhook), links. (short links, the functions Service), actions., client-auth., and dm.internal. for deployment-manager on a second, internal ingress class (deployment-manager.ingress.className), reached over a backchannel.A complete example with renamed hosts: Reference values file.
TLS at your controller or at a cloud load balancer
TLS at your controller or at a cloud load balancer
TLS at your controller: the Ingress TLS at a cloud load balancer (ALB, Azure Application Gateway, Google): a managed certificate covers every host, and the Ingresses carry annotations and no
tls: block, per component (<name>.ingress.tls) or via global.ingress.tls. A wildcard *.xpander.acme.internal covers the derived set. dm.internal.<domain> needs its own wildcard:tls:. A wildcard covers one level only: *.xpander.acme.example does not cover *.staging.xpander.acme.example. On EKS Auto Mode, put the group in an IngressClassParams (Auto Mode ignores alb.ingress.kubernetes.io/group.name). The load balancer appears after the first Ingress, so DNS aliases are a second pass.Making the hosts resolve
Sealed networks: resolution must happen where your users are (internal zone or VPN DNS). The domain never needs to exist publicly.- Internal DNS zone
- VPN + internal load balancer
- Local test: port-forward + /etc/hosts
A wildcard in the zone your users resolve:Or one record per host when wildcards are not allowed.
Signing in
The summary box prints the URLs and the bootstrap admin password.helm get notes xpander -n xpander repeats the commands.
-
Bootstrap password (default): open
https://chat.<domain>/login-passwordwith your--admin-email. Read the password again with: -
Email OTP without SMTP: codes are not sent. Get one with
scripts/get_login_code.sh <email> <namespace>. Withglobal.smtp.*set, codes arrive by email. On Amazon SES in the sandbox, invitations reach only verified identities, and the SMTP IAM policy must list each verified recipient identity ARN: request production access first (Email). Agent mailbox replies use the same relay:INBOUND_EMAIL_REPLY_DOMAINsets the From domain, and the SMTP identity must be allowed to send as the agents’ mailbox subdomain. -
SSO (OIDC): configured in xpander Chat under Platform > Organization > Access and served by
client-auth. See SSO with your identity provider. Google and GitHub buttons stay GoTrue providers (supabase.auth.extraEnv).
supabase.db.jwtExpiry, default 86400), renewed through the rotating refresh token. The one value feeds GoTrue, PostgREST and the database. Older tokens keep their expiry until refresh, and the migrations hook re-applies it on every upgrade, so installs that started on the one-hour default converge.
Next steps
Configure the install
Data tier, executor fleet, skill generation and skill credentials.
Connect your models
Your LLM endpoint, Amazon Bedrock or a local vLLM server.

