Run inside the celld runtime
Follow celld fetch, state, binding, network, and memory rules.
Obey the runtime contract
- Keep no module-scope state across requests; read fresh state per request.
- Export
fetchhandlers only. - Request no Workers AI, Vectorize, or Cache bindings.
- Treat
caches.defaultas always missing; never rely on the Cache API. - Stream large downloads instead of buffering them into memory; fetched responses count against app memory.
Stay inside the network sandbox
- Never target loopback, private ranges, link-local, or metadata addresses.
- Avoid SMTP ports 25, 465, and 587; send mail through an HTTP API with a secret.
For the person-side walkthrough, see How deploys work.