Skip to main content
This guide takes a cluster from empty to a working installation. It should take about fifteen minutes.

Prerequisites

Kubernetes 1.27 or later with a working kubectl context. The examples use the Traefik ingress class; substitute your own with ingress.className.
Each user workspace and the bundled database request a ReadWriteOnce volume. The examples use rook-ceph-block. Set your own with workspace.storageClass and postgresql.storageClass.
Helm 3.8 introduced stable OCI registry support, which the chart uses for its alternative install path.
Any endpoint that implements /chat/completions and /models works, including OpenAI, OpenRouter, Together, Groq, vLLM, and Ollama behind HTTPS.

Create the namespace and secrets

The chart reads its sensitive configuration from a Kubernetes Secret. Generate the values locally so they never enter your shell history or a values file.
1

Create the namespace

2

Generate and store the application secrets

BETTER_AUTH_SECRET signs session cookies and SETTINGS_ENCRYPTION_KEY encrypts stored provider credentials. Both must be at least 32 characters. SETUP_CLAIM_TOKEN prevents a stranger from claiming the installation before you do.
DATABASE_URL must contain the same password as POSTGRES_PASSWORD when you use the bundled database. Generate the password once into a shell variable and substitute it into both keys, or set both after generating:
Back up SETTINGS_ENCRYPTION_KEY with your database. Losing it makes every stored provider credential unreadable.
3

Add an image pull secret for private images

Skip this step if the images are public.

Install the chart

1

Add the Helm repository

2

Write a values file

Create values.yaml. publicUrl must be the exact external URL, because it is used for cookies, redirects, and the workspace callback address.
3

Validate before applying

Render the exact values and dry-run them against the live API server. This catches admission errors before anything is created.
4

Install and wait for rollout

Database migrations run in an init container before the application starts, so a successful rollout means the schema is current.
5

Confirm the health endpoint

A healthy installation returns {"ok":true}. This endpoint checks database connectivity, so a 503 usually means DATABASE_URL is wrong.

Claim the administrator account

The first successful setup request becomes the administrator and permanently closes public setup. Claim it immediately after exposing the installation.
1

Read the claim token

2

Complete setup in the browser

Open https://chat.example.com. The setup form asks for a name, email, password of at least 12 characters containing a letter and a number, and the claim token.
3

Verify that setup is closed

Expect {"required":false,...}. If it still reports true, the account was not created and the installation is still claimable.

Connect a model and run a task

1

Add a provider

Go to Settings → Providers and add an OpenAI-compatible endpoint with its base URL and API key. Use Test connection, which requests <base URL>/models through the server’s outbound URL guard.
HTTPS is required by default, and private, loopback, link-local, and metadata addresses are rejected. See Model providers for local-endpoint options.
2

Add a model

Add a model to the provider with its provider model ID, a display name, a context-window limit, and a maximum output token count. The first model you create becomes your default automatically.
3

Give the agent something to do

Start a chat and ask for real work, for example:
The first message starts your workspace pod, which takes a few seconds. The agent writes files, runs Python, and returns download links.

Next steps

Invite users

Create invitations, add local accounts, and connect an OIDC provider.

Brand the installation

Set the product name, logo, favicon, and colors at runtime.

Understand the lifecycle

How idle workspaces scale to zero and keep their data.

Review security

What the isolation model does and does not guarantee.