Choose a platform
Build the server for Node.js, Bun, Deno, Vercel, Netlify, or AWS Lambda, and compare how each platform handles expiry and artifact size.
The server is a Nitro app. It builds for Cloudflare Workers by default, and NITRO_PRESET selects another target:
NITRO_PRESET=node_server pnpm build
Every build serves the same API. The platforms differ in storage, in how they run the daily expiry task, and in the largest artifact they can carry:
| Platform | NITRO_PRESET |
Expiry task | Largest artifact |
|---|---|---|---|
| Cloudflare Workers | cloudflare_module, the default |
Cron trigger | 100 MB upload on the Free and Pro plans, 200 MB on Business. |
| Node.js, Bun, and Deno | node_server, bun, deno_server |
In the server process | No limit, unless a proxy in front of the server sets one. |
| Vercel | vercel, detected on Vercel |
Vercel Cron Jobs | 4.5 MB. |
| Netlify | netlify, detected on Netlify |
None | About 4.5 MB. |
| AWS Lambda | aws_lambda |
None | 6 MB. |
An artifact over the limit can’t be uploaded, so its task never hits the remote cache. Build outputs often exceed 4.5 MB. For a repository with large outputs, choose Cloudflare Workers or a long-running server.
Where the table says None, call POST /internal/delete-expired-objects from a scheduler once a day. Retention and expiry shows how.
The R2_STORE and KV_STORE bindings exist only on Cloudflare Workers. Everywhere else, use an S3-compatible bucket or a custom adapter.
Nitro has presets for more platforms. CI runs only the Cloudflare build end to end.