Deploy
A Telo manifest is a runnable artifact: anything that can execute telo manifest.yaml can host your application. Three deployment shapes cover the common cases.
Pick a model
| Model | When it fits | How to package |
|---|---|---|
| Bare CLI | VMs, bare metal, dev boxes, CI agents. telo invoked under systemd / pm2 / Docker Compose / your supervisor. | npm install -g @telorun/cli, then run telo /path/to/manifest.yaml. |
| Docker image | Long-running services (HTTP servers, workers, schedulers). Most workloads. | FROM telorun/node:<ver>-slim + your manifest. See Docker image. |
| AWS Lambda | Event-driven serverless (HTTP, SQS, EventBridge). Scale-to-zero, per-invocation billing. | Lambda-specific bootstrap + zip or container image. See AWS Lambda. |
The default recommendation is Docker: hermetic, reproducible, portable across hosts, and the telorun/node image already ships the kernel — your Dockerfile only adds the manifest and its pre-installed controller cache.
Shared prep
Every deployment model shares the same preparation steps:
- Author the manifest. A
Telo.Applicationwithtargets:listing what to run, declaringvariables:/secrets:against host env vars — see Application Environment Variables. - Warm the cache with
telo install ./manifest.yaml. Pre-downloads every controller and every imported module into the.telo/cache root, so the production host never touches the network at boot. Run this in your build pipeline, not at deploy time. - Ship the manifest and its
.telo/tree together. The root is.telo/beside the manifest — or, when atelo-workspace.yamlsits above it, beside that marker instead, so a monorepo has one cache. Copy whichever directory holds it, or pin the location withTELO_CACHE_DIR. See where the cache lands. - Configure runtime env so the manifest's
variables:andsecrets:resolve atkernel.load().
The pages that follow walk through each model. Three of them apply whichever you pick:
- Running in production — how the process starts and stops, what it exits with, how to probe it, and every environment variable the runtime reads.
- Upgrades & version skew — moving module pins and the kernel image without stranding one behind the other.
- Security & supply chain — what a module can reach on your host, and how import pins are verified end to end.