Loams v0.1.0 is out: run the whole stack yourself with Docker Compose. See the roadmap

Blog/The Loams platform

Self-hosting Loams with GitOps

How the whole stack is meant to deploy from one Git repository, from a laptop cluster to your own data centre, on RustFS, the TiKV operator, a Loams operator and Argo CD. And how the line between open source and the managed cloud went away.

Self-hosting Loams with GitOps
On this page
  1. The pieces
  2. The Loams operator
  3. Sync waves
  4. What stays true without Kubernetes
  5. Open source and the managed cloud (superseded)
  6. Where this stands

Updated 2026-10-19: no open core

Loams is now fully open source (D1119). The open-core line this post describes is gone: metering, billing, the hosted control plane and the commercial APIs are moving into the open repo now, under Apache-2.0. Ostrium Labs sells services (infrastructure efficiency reviews, SLAs, support; support@ostriumlabs.org), not a paid edition. The table below is kept as the history of the September line.

Updated 2026-10-18 for Loams 0.1.0

Changed: 0.1.0 self-hosts with Docker Compose over your own Tailscale tailnet (GitOps is still planned); the multi-tenant BYOC control plane became open source (D540); the edge is our own loams-gateway, not Envoy (D1010); TiDB returns as Loams SQL compute (D721); the boundary table says "usage".

Proposal The deployment design in this post is under review, and Self-hosting with GitOps is still Planned in Loams 0.1.0. What 0.1.0 ships instead is a Docker Compose stack (deploy/release/compose.yaml) that you run on a laptop or on your own VMs (BYOC over SSH with byoc/install.sh), reachable only over your own Tailscale tailnet, with the hosted console at console.loams.dev. Running Loams 0.1.0 has the steps. The open-source boundary at the end has changed since this post; see below.

A platform that lives in your bucket should also be deployable in your cluster, by you, without calling us. The goal is one deployment path: the same Git repository and charts deploy a laptop k3d cluster, a self-hosted cluster on your own hardware, and a multi-tenant BYOC deployment.

The pieces

LayerComponentLicenseWhy this one
Object storeRustFSApache-2.0S3-compatible, written in Rust, with the conditional writes Loams’ commit protocol needs. It replaced MinIO, whose community edition went into maintenance mode and was archived. Any S3, GCS or Azure store works as a provider instead
Metadata and LiveTiKV and PD, deployed by TiDB Operator v2Apache-2.0v2 models a cluster as separate component groups, so a cluster of PD and TiKV only, with no TiDB, is a supported shape. Since D721, TiDB returns as the compute of Loams SQL only, one keyspace per database
Durable executionResonate serverApache-2.0Embedded in dev; its own Deployment on the TiKV store in clusters
EdgeEnvoy as proposed; now loams-gatewayApache-2.0TLS, HTTP/3, gRPC routing, rate limits, external authorization. D1010 (2026-10-16) chose to build one Rust gateway with a module per protocol, Postgres SNI first, instead of adding Envoy or Traefik
LoamsThe engine roles, the Live role, the runtime tiersApache-2.0—
OperatorA Loams Kubernetes operatorMIT (fork) and Apache-2.0See below
GitOpsArgo CDApache-2.0Sync waves, custom health checks for CRDs, and one control plane for many clusters

The Loams operator

The proposal forks Clever Cloud's Kubernetes operator (MIT, Rust, kube-rs) as the skeleton of a Loams operator, keeping its MIT notice. What carries over is modest and we say so: a controller registry, finalizers, event recording, a metrics server and a hardened Helm chart, about 1,300 lines. Its own custom resources provision Clever Cloud add-ons through Clever's API, so they are dropped. The operator adds four resources:

ResourceReconciles
LoamsA Loams cluster: its roles as StatefulSets or Deployments, the metastore's PD endpoints, the bucket, the Resonate endpoint
ObjectStoreA bucket and credentials from a provider: RustFS by default, any S3, or Clever Cloud's Cellar
FunctionA function version for the runtime: contract, tier, bundle digest, routes, limits
RuntimePoolPer-node capacity for the runtime tiers and their RuntimeClass

Object stores sit behind a provider trait that reports capabilities, and Loams refuses a provider without conditional writes, because the write-ahead log's commit protocol depends on them.

We also evaluated Clever Cloud's edge proxy, Sōzu. It is well engineered and reconfigures without restarts, but it is AGPL-3.0 and, as far as its documentation shows, has neither HTTP/3 nor gRPC routes, both of which the runtime needs. Envoy stayed the edge at the time; D1010 later replaced it with loams-gateway. The same evaluation proposes Biscuit (Apache-2.0, now at the Eclipse Foundation, started at Clever Cloud) for sandbox tokens inside the runtime (part 5).

Sync waves

Argo CD would apply an app-of-apps in waves. Each wave waits for the previous one to be healthy, which needs custom health checks for the child Application resources (Argo CD has none built in), the TiDB Operator's resources and Loams’ own.

  1. 01CRDs and operatorsTiDB Operator v2, the Loams operator, the gVisor RuntimeClass
  2. 02Object storeRustFS and the system buckets
  3. 03PD and TiKVAPI v2 on, no TiDB; health from the operator
  4. 04ResonateThe durable server on the TiKV store
  5. 05EdgeThe Rust gateway (Envoy in the original proposal), the Dapr API server
  6. 06LoamsThe Loams resource and its roles
  7. 07RuntimeThe node supervisor, workerd and wasmtime tiers
The proposed order. The umbrella chart has no Argo-specific templates, so Flux can consume it too.
deploy/
  helm/loams-stack/          # umbrella chart; every component can be switched off
  gitops/
    bootstrap/argocd/       # Argo CD and its health checks
    root.yaml               # the app-of-apps
    apps/                   # one Application per wave
    envs/{dev-k3d,selfhosted,cloud}/values.yaml

The costs, plainly: Argo CD is heavier than Flux (an application controller, a repo server, Redis and a server), which matters on a laptop and in small clusters, and TiDB Operator v2's resources are still v1alpha1, so each Loams release pins an operator version. A local k3d profile runs one replica of everything; PD, TiKV and TiDB together peaked at about 3.2 GB of memory in our development playground.

What stays true without Kubernetes

The engine is still one binary. loams dev runs every role in one process with the openraft metastore and a local directory or any S3 bucket, and needs no TiKV; since this post, Loams Live there runs on an embedded store too. TiKV becomes necessary for Loams Live in clusters, for Loams SQL, for jobs and for clusters that use the TiKV metastore. The 0.1.0 compose stack runs PD, TiKV and TiDB for you, and loams upgrade moves it from one release to the next with a snapshot first.

Open source and the managed cloud (superseded)

Update: D540 (2026-10-02) moved the multi-tenant BYOC control plane (orgs, namespaces, isolation, quota enforcement, GitOps with Argo CD, BYOC install) into the open repository under Apache-2.0. Then, on 2026-10-19, D1119 removed the open core altogether: turning usage into charges and the commercial APIs are open source too, and nothing is proprietary. For 0.1.0 we host only the console and, for oidc mode, the auth service. The table below is the September line, kept for the record.

The line was one rule: anything needed to self-host Loams as a single organisation is open source, under Apache-2.0. Anything needed only to run Loams as a multi-tenant paid cloud is part of the managed Loams Cloud. The open repository must never depend on the managed cloud; the cloud consumes the same hooks and APIs any self-hoster can use.

Open sourceManaged Loams Cloud only
The engine: retrieval, streams, Iceberg analytics and every wire APITurning usage into charges
Loams Live, the TiKV metastore, the change-feed bridgesThe multi-tenant control plane: provisioning, plans, entitlements
The embedded Resonate server, durable patterns, the jobs API and adaptersSetting quotas per plan
The runtime: the Dapr API server, workerd and wasmtime hosting, gVisor, secretsFleet and multi-region operations, autoscaling policy, pre-warming
Namespaces, OIDC and API-key auth, OpenFGA checks, enforcing quotasHosted Postgres fleet automation, BYOC management
Metrics, OTel, cgroup labels, access logs: every usage hookAbuse, trust and safety; support tooling
The Helm chart, the operator, the Argo CD layout, RustFS defaults, backup and restoreThe multi-tenant console
SDKs, the CLI, generated clients, the design docs

Quotas show the split well: the engine enforces whatever limits it is given; the managed cloud decides what those limits are for each plan. And we do not hold back reliability or performance features from open source. The hot tier is in the open engine today, and the planned replicated write-ahead log will be too, not behind a license key. Since D1119 there is nothing left to hold back: SSO, SCIM and the managed cloud's own code are open source as well.

Where this stands

PartStatus
Single binary: dev, standalone and cluster modesAvailable
TiKV development playground configsAvailable
Docker Compose stack over your own tailnet, BYOC over SSH, loams upgradeAvailable
Any S3, GCS or Azure bucket (RustFS, MinIO and R2 included) or a local directory as the storeAvailable
Headscale networksPlanned
The umbrella chart, the Loams operator, Argo CD layout, TiKV through TiDB Operator v2Planned
Continuous backup of TiKV keyspaces to the bucket, restore (0.1.0 snapshots before each upgrade)Planned
The open-source boundary, amended by D540Approved policy

That is the end of the platform series. The other series on this blog, What Loams is built on, takes each open-source project under Loams in turn: what it is, how it works inside, why we chose it, exactly how we use it, its license and its current limits.

More from the blog