Lanes & Templates
vibeD exposes a uniform API. You don't pick a runtime — a deterministic classifier inspects the uploaded source and routes it to a lane and a template. You can override either via runtime.lane / runtime.template in the deploy metadata, but that's the exception.
Lanes
| Lane | Isolation | Used for |
|---|---|---|
| fast | V8 isolates (workerd) or static nginx | Static sites and small trusted-language workers. Sub-second cold start. |
| general | Kata + Firecracker microVM | Arbitrary code — Node, Python, Go, or any image. Hardware-grade isolation. |
The fast lane has two flavors: static-nginx (a sandbox pod serving /workspace) and workerd (V8 isolates managed by a loader). The general lane always runs on a Kata microVM sandbox.
The classifier
internal/classifier is a pure, deterministic function that reads only file names and package.json top-level keys — it never installs anything and runs in well under 50 ms. Rules run in order, first match wins:
- No server-side code (only
.html/.css/.js/images, nopackage.json/requirements.txt/Dockerfile) → fast,static-nginx. package.jsonwith only browser deps + abuildscript → build asynchronously, serve the output fromstatic-nginx.worker.js/worker.ts/wrangler.toml→ fast,workerd.package.json(Node app with deps) → general,node-24.requirements.txt/pyproject.toml→ general,python-313.go.mod→ general,go-123.Dockerfileat root → general,base-al2023(the Dockerfile is a hint for the start command, not built).- Else → general,
base-al2023with entrypoint autodetection.
Templates
A template is a directory under templates/ with a Dockerfile, an entrypoint.sh, and a template.yaml (the SandboxTemplate + SandboxWarmPool manifests). Template images are built by CI on template changes, never per deploy, and each embeds vibed-agent as PID 1.
The shipped template set:
| Template | Base | Lane | Default warm pool |
|---|---|---|---|
node-24 | node:24 | general | 50 |
python-313 | python:3.13 | general | 50 |
go-123 | golang:1.23 | general | 20 |
base-al2023 | amazonlinux:2023 | general | 30 |
static-nginx | nginx:alpine | fast | 30 |
refactor.md lists additional templates (node-22, bun-1, deno-2) as design targets. The five above are what currently ship; the others are not yet built. Warm-pool sizes are starting values in values.yaml.
Source injection, not image builds
The deploy path never builds an image. The user's source is a gzipped tarball; vibed-agent extracts it into /workspace inside a pre-booted sandbox and starts the process. New runtime/dependency combinations are handled by an async template builder that refreshes the warm pool out of band — it never blocks a user-visible deploy.