build.command boots a second, disposable microVM before
the serving one, from a separate image carrying the toolchain the serving image
deliberately lacks.
Fields
string
The build command, run inside the build VM.
string
The directory that becomes the deployed artifact. Omitting it deploys the
whole tree, including
node_modules.string
default:"npm"
npm, pnpm, and so on.boolean
default:"true"
Refuse the build when the matching lockfile is absent.
The entrypoint resolves inside the output
You cannot ask for looser dependency resolution
The control plane, not the manifest, chooses the install command, and it is always the package manager’s reproducible mode —npm ci --ignore-scripts,
pnpm install --frozen-lockfile, and so on.
Setting lockfileRequired: false is allowed, and tiny plan will warn that two
deploys of the same source may install different code.
@tinycloud/runtime-sdk is supplied by the build image, so an application does
not declare it as a dependency.What the build VM gets
MMDS is firewalled off before any build code executes. The VM is destroyed
after every build, successful or not.
How output leaves the VM
The build’s entire output channel is one tar file, which the host reads out of the guest’s disk image withdebugfs rather than mounting it.
Handing an untrusted ext4 image to the host kernel would give build code a
filesystem parser to attack. That is why
debugfs and tar are host
requirements.- the per-file and total upload limits apply again;
- credential-shaped files — a stray
.env, for instance — are stripped rather than deployed.
Content addressing
The result is content-addressed. An unchanged source, command, and toolchain reuses the previous build instead of running it again.tiny deploy reports which happened, and in --json mode the result object
gains a build field:
Migrations come from source, not output
Migrations are read from the uploaded source tree, so abuild.output that
excludes them is fine.
If the operator installed no build image
The platform reportsexecutesBuildCommands: false and tiny plan refuses a
manifest with build.command.
Operator setup is in Server configuration
and Guest images.