RuntimeProvider, and everything above it is written as
if the runtime could be a Linux worker host, a microVM, or a customer’s own
installation — because eventually it is.
Request and deploy paths
TinycloudService is the only place that combines authorization, auditing,
and state transitions. The CLI and MCP server both use the remote REST API. This
keeps an agent and a human from getting different answers to the same request.A product dashboard is not implemented yet.Subsystems
packages/manifest-schema
packages/manifest-schema
The authoritative JSON Schema lives at
schema/tiny.v1alpha1.json and is
published for editor completion. Parsing is three stages: a strict YAML
subset (no anchors, aliases, tags, or multi-document input), JSON Schema
validation, then semantic rules that depend on organization policy.Normalization resolves every default exactly once, and the normalized
form is what gets hashed, stored on the revision, and read by every
downstream subsystem.packages/domain
packages/domain
IDs are prefixed ULIDs, so they sort by creation time and read well in logs.
Deployment status and app lifecycle are separate state machines with explicit
transition tables. Errors always carry a stable code, a human message, agent
remediation, and a retryability flag.
packages/db
packages/db
Repositories over SQLite. Every organization-scoped read takes an
organizationId and filters in the query. State changes and their audit
events are written in the same transaction; webhook events go to an outbox
drained asynchronously.packages/auth
packages/auth
Four identity layers stay separate — human, agent, app workload, runtime — and
every token carries an audience, so a token minted for one boundary is
rejected at another. Secrets are sealed with AES-256-GCM under a key derived
per context, so a ciphertext cannot be moved between organizations.
packages/policy
packages/policy
Typed functions returning
PolicyDecision (allowed, code, reason) rather than
booleans, so the reason reaches the audit log and the caller. Approval
rules distinguish production from preview: a preview does not gate on
capability approval, which is what makes previews useful to an agent.packages/orchestrator
packages/orchestrator
- artifacts — content-addressed store; ignores
.git, caches, and anything that looks like a credential, and reports the near-miss. - planner — resource diff, migration plan, capability status, approvals, cost estimate, and a digest that makes a stale plan detectable.
- deployer — walks the state machine, provisions, migrates, deploys a candidate, health-checks, and only then switches the route. Retryable failures retain their current state for idempotent reconciliation.
- lifecycle — idle recommendations, archive with snapshots, restore, and delete behind a grace window.
- broker — capability calls, in order.
apps/gateway
apps/gateway
The only path to a deployed app. Resolves hostname to environment, requires
OIDC login, evaluates access, strips forged platform headers, mints a
short-lived identity token, wakes sleeping deployments, proxies, then meters
and audits.OIDC uses discovery, PKCE, encrypted state, nonce and JWKS verification, plus
a browser-bound handoff from the identity callback origin to the app origin.
Current implementations and intended replacements
The interfaces those swaps happen behind —
RuntimeProvider, ResourceProvider,
BuildRunner, ControlPlaneStore, SecretSealer, and TokenIssuer — are the
parts designed to outlive the current implementations.
The indirection that makes a replaceable VM durable
Applications reach their database throughDataService rather than a connection:
the guest sends SQL over its private link under its workload token, and the
control plane resolves that token to exactly one environment’s binding.
That indirection is what lets a replaceable microVM have durable state without
ever holding a credential.
StorageService is the same indirection for bytes. An app names a storage
namespace its manifest declared; the control plane resolves the workload token to
that namespace’s binding and hands the operation to an ObjectStore. The current
store writes to the host filesystem, so swapping in S3 or R2 means implementing
that one interface rather than changing anything an app sees.
Linux worker plane
The production worker agent ispackages/provider-firecracker. It creates one
microVM per candidate deployment, waits for the guest health endpoint, and
exposes the guest’s private TAP address to the gateway only after it is ready.
Firecracker is always launched through its jailer. The guest artifact lives on an
ext4 block device; configuration and secrets are delivered through MMDS and never
written into that image.
The host creates a /30 TAP network per VM. nftables accepts guest traffic only to
the host capability-broker port and drops all forwarding, so SDK policy is
backed by a host boundary. Firecracker’s default seccomp filters, KVM, disabled
SMT in the VM configuration, cgroup CPU quota, and the jailer’s UID/GID and
chroot provide defense in depth.
Firecracker worker plane
The executable host/guest contract.