Operator + API
A clean split: the API files a request, the operator decides what to do about it. Which instance, for how long, whether the quota allows it — none of that is the API’s call, and its RBAC makes sure of it.
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:
DployInstanceClaims to environments, reconciles DployTemplate and
DployInstance custom resources into Flux sources + HelmReleases, manages warm pools, and
enforces TTLs and quotas.Operator + API
A clean split: the API files a request, the operator decides what to do about it. Which instance, for how long, whether the quota allows it — none of that is the API’s call, and its RBAC makes sure of it.
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
The clock starts when your environment is handed over, not when you asked — so queueing for a warm instance costs you nothing. Extensions are capped by the template, quotas by the owner.
OIDC auth
JWT/OIDC authentication via JWKS. The claims you choose to forward flow into your chart values for per-user customization — the raw token never leaves the API server.
Templated values
Render Helm values and connection URLs with Go templates + sprig, using the owner, UUID and request params.
Asking for an environment means writing one object — a DployInstanceClaim — and watching it:
kubectl apply -f claim.yamlkubectl get dclaim -w# NAME TEMPLATE OWNER PHASE INSTANCE URL# john-doe-webterm webterm john-doe Pending# john-doe-webterm webterm john-doe Bound webterm-pool-x9 https://webterm-a1b2c3d4.env.dploy.devBehind that, each environment:
<owner>-<name>-<uuid>.connectionURLTemplate (default <name>-<uuid>.<baseDomain>).OperatorConfig