Skip to main content
Access required. Airhouse is proprietary and not open source. The container image and Helm chart below are available only to customers with an agreement with Oxygen. Contact Oxygen to get access, or see Getting access.
Airhouse ships as one container image that can run every part of the service. You can run it in two ways:

Requirements

For Kubernetes sizing, the chart’s defaults request 2 CPUs and 4 GiB of memory for each data-plane pod (limits: 4 CPUs, 4 GiB) and autoscale from 2 to 6 data-plane replicas. The control plane runs 2 replicas with 250m CPU and 512 MiB of memory each (limits: 500m, 1 GiB). Adjust these values for your workload.

Get the image

The image is published to ghcr.io/oxy-hq/airhouse. If Oxygen gave you registry credentials, log in first:
Then pull the release Oxygen recommended:
Image tags:

Option 1: Docker Compose

A single airhouse server container serves both the Postgres wire protocol and the Admin API. The Quickstart has a complete docker-compose.yml with Postgres, MinIO, and Airhouse. To adapt it for your environment, set these environment variables on the Airhouse container: See the configuration reference for every setting.

Option 2: Kubernetes with Helm

The chart is published as an OCI artifact. If Oxygen gave you registry credentials, log Helm in first:

Try it on any cluster (demo mode)

Demo mode runs one all-in-one Airhouse pod with bundled Postgres and MinIO. It isn’t meant for production. Pull the chart to get its values-demo.yaml overlay, then install:
The install notes print the kubectl port-forward commands for the wire protocol and the Admin API.

Production install

For a complete worked example on AWS (EKS, RDS, S3, Pod Identity, External Secrets, Argo CD, alerts, and sizing), see Example: production setup on AWS. In production mode (mode: split, the default), the chart runs:
  • A control-plane Deployment that serves the Admin API.
  • A data-plane Deployment that serves the Postgres wire protocol, with a HorizontalPodAutoscaler.
  • HAProxy in front of the data plane, balancing client connections. Set haproxy.service.type=LoadBalancer to expose it outside the cluster.
You provide Postgres, object storage, and secrets. The chart doesn’t create them. Create these Kubernetes Secrets first (the names are up to you):
Then write a values file:
values.yaml
Always set s3.endpoint. If it’s empty, the server falls back to a local MinIO default (localhost:9000) and writes fail. For MinIO or another S3-compatible store, use its URL (for example http://minio.storage:9000), pathStyle: true, and useSsl to match. Install it:
The chart connects to both Postgres servers with sslmode=require by default (controlPlaneDatabase.sslMode, catalogDatabase.sslMode, and catalogDatabase.tenantSslMode). Run helm show values oci://ghcr.io/oxy-hq/helm-charts/airhouse --version <chart-version> to see every option with comments.
The chart’s built-in default image tag can lag behind the latest release. Always set image.tag to the version Oxygen recommends.
If you use imagePullSecrets, create the Secret from the registry credentials you were given:

After installing

Check health

/readyz returns 503 while the server is starting up or draining. Prometheus metrics are at /metrics. On Kubernetes, the Admin API is served by the control-plane Service, and the wire protocol by the HAProxy Service (or the all-in-one Service in demo mode). The helm install notes print the kubectl port-forward commands for both.

Create your first database and user

No users exist after a fresh install. Use the Admin API with your admin token to create a database and an admin user:
Then connect:
See Databases and users and Service accounts for more.
Keep the Admin API (port 8080 on the control plane) reachable only from your own network or backend services. Anyone holding the admin token has full control over every database.

Upgrading

  1. Get the target version from Oxygen.
  2. Update the image tag: change image: in your Compose file, or image.tag (and the chart --version, if a new chart is recommended) in Helm.
  3. Apply it with docker compose up -d or helm upgrade airhouse oci://ghcr.io/oxy-hq/helm-charts/airhouse --version <chart-version> -f values.yaml.
Airhouse upgrades its own registry schema and DuckLake catalogs automatically on startup. When a release changes the DuckLake catalog format, the first upgraded server migrates the shared catalog and older servers can no longer read it, so restart all Airhouse instances together for that release instead of rolling them one at a time. Oxygen tells you when a release needs this. On shutdown, a server stops accepting new work and waits up to drain_timeout_secs (default 30 seconds) for running queries to finish.

Uninstalling and your data

Removing Airhouse doesn’t delete your data. Your Parquet files stay in your bucket and your catalogs stay in Postgres until you remove them.
  • Docker Compose: docker compose down stops the containers. docker compose down -v also deletes the local Postgres and MinIO volumes if you use the bundled ones.
  • Helm: helm uninstall airhouse removes the Airhouse workloads. External Postgres and object storage are untouched.
  • A single database: deleting it with the Admin API drops its catalog, users, and service accounts, but leaves its Parquet files in object storage. See Databases and users.