Skip to main content

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

LaneIsolationUsed for
fastV8 isolates (workerd) or static nginxStatic sites and small trusted-language workers. Sub-second cold start.
generalKata + Firecracker microVMArbitrary 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:

  1. No server-side code (only .html/.css/.js/images, no package.json/requirements.txt/Dockerfile) → fast, static-nginx.
  2. package.json with only browser deps + a build script → build asynchronously, serve the output from static-nginx.
  3. worker.js / worker.ts / wrangler.tomlfast, workerd.
  4. package.json (Node app with deps) → general, node-24.
  5. requirements.txt / pyproject.tomlgeneral, python-313.
  6. go.modgeneral, go-123.
  7. Dockerfile at rootgeneral, base-al2023 (the Dockerfile is a hint for the start command, not built).
  8. Elsegeneral, base-al2023 with 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:

TemplateBaseLaneDefault warm pool
node-24node:24general50
python-313python:3.13general50
go-123golang:1.23general20
base-al2023amazonlinux:2023general30
static-nginxnginx:alpinefast30
note

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.