Skip to content

Dploy

Launch ephemeral Kubernetes environments instantly — a Kubernetes operator and a thin API on top of Flux.

Dploy turns a Helm chart into a self-service, time-boxed environment. A user picks a template from the catalog, and Dploy spins up an isolated, per-user deployment with its own namespace and URL — then tears it down automatically when its TTL expires.

Dploy is split into two cooperating pieces:

  • The operator reconciles DployTemplate and DployInstance custom resources into Flux sources + HelmReleases, manages warm pools, and enforces TTLs.
  • The API (GoFiber + OIDC) is a thin, stateless server that authenticates users, lists the catalog, and creates instances. It only ever writes custom resources — it never touches Flux directly.

Operator + API

A clean split: the API requests environments by writing CRs; the operator does the actual deployment via Flux. The API physically cannot create a HelmRelease.

GitOps-native

Charts are pulled from Git or Helm repositories by Flux. Every instance is a real HelmRelease you can inspect with flux and kubectl.

Warm pools

Pre-provision instances so users get an environment instantly — no cold-start wait.

TTL & quotas

Per-template lifetimes, extensions, and per-user quotas. Expired instances clean themselves up.

OIDC auth

JWT/OIDC authentication via JWKS. JWT claims flow into your chart values for per-user customization.

Templated values

Render Helm values and connection URLs with Go templates + sprig, using the owner, UUID, params and claims.

Dploy architecture overview: the API writes custom resources, the operator reconciles them into Flux resources that deploy each environment.

Each environment:

  1. Gets an immutable 8-character UUID.
  2. Is deployed into its own namespace <owner>-<name>-<uuid>.
  3. Is exposed at a URL derived from connectionURLTemplate (default <name>-<uuid>.<baseDomain>).
  4. Expires and is garbage-collected after its TTL.