createControlPlane() is a production server entry point. It always selects the
Linux Firecracker provider, embeds the authenticated gateway, and refuses
insecure development defaults.
Required configuration
Choose one ingress and authentication mode
- Single-host
- Hosted / wildcard
/apps/…. One ordinary DNS record, one TLS certificate, no
OIDC registration. This is the default produced by tools/setup-cloud.sh.A complete hosted example
Server options
Host prerequisites are in Host requirements and
the image procedure in Guest images.
The current runtime accepts TypeScript/JavaScript workers, SQLite databases, and
object storage with no additional resource infrastructure. Postgres, build
commands, and direct egress each need one setting below.
The 512 MiB floor
Guest memory is raised to a floor of 512 MiB however little a manifest asks for.Databases
Every deployment withresources.database gets durable storage that outlives the
microVM, and no credential inside it. SQL travels from the guest to the control
plane’s data service over the VM’s private link, authenticated by the
deployment’s own workload token.
engine: sqlite needs no configuration: one file per environment under
$TINY_DATA_DIR/databases, snapshot with VACUUM INTO. It is durable and
correct, but it is one writer per database — the data service admits a single
open write transaction per environment and says so rather than deadlocking.
engine: postgres requires a cluster. See Postgres.
Object storage
resources.storage needs no configuration. Each namespace is a directory under
$TINY_DATA_DIR/storage/<environment>/<name>. See
Object storage operations for staging, quotas, and
durability.
Builds
build.command runs in a throwaway microVM built from a separate image, with the
same jailer, KVM, seccomp, and cgroup story as a serving deployment, plus a
firewall hole to the package registry and nothing else.
debugfs (from e2fsprogs) and tar: the result is read out
of the guest’s disk image without mounting it, so an untrusted filesystem is
never handed to the host kernel.
Direct egress
network.egress.mode: allowlist is off unless TINY_FIRECRACKER_ALLOW_EGRESS is
true, because it is the one setting that lets application code reach the
internet without passing through the broker.
When it is on, the host resolves each declared hostname once, at deploy time,
and pins the resulting addresses into that VM’s own nftables table. The guest
cannot widen its allowlist later by answering DNS differently, and a hostname
that resolves into a private range is refused outright rather than becoming
lateral movement.
CLI and MCP clients
The MCP server is started with
pnpm mcp and reuses the current CLI profile when
these variables are absent. Neither client starts a local runtime.
The API listens on TINY_API_PORT and the embedded application gateway listens on
TINY_GATEWAY_PORT; put TLS/reverse-proxy routing in front of both as needed.
Background work
Work and leases are durable, so a restarted process resumes queued jobs.