# Deno Deploy Shutdown: What Moves, What Stays, and What I Measure First

By Luke Sidney (https://lukesidney.me) · 20 Oct 2026
Source: https://flowingkhaos.com/column/deno-deploy-shutdown-what-moves-what-stays

> Which project moves when Deno Deploy shuts down: one site goes to Workers, the CMS stays on Railway, and celld stays on watch until a trigger fires.

## Deno Deploy Shuts Down in About Six Months, and I Already Know My Move

Deno Deploy shuts down about six months after Cloudflare's October 9 announcement, so my one production site, lukesidney.me, moves to Cloudflare Workers with the same code, and the rest of my stack stays where it is until I measure which project actually spends. That is the whole verdict on the Deno Deploy shutdown for my stack. One site moves. Nothing else does. The rest of this column is the reasons, per project, so you can run the same sort on yours.

Let's get one thing straight. This is not a migration guide for everyone. I don't know your stack. I know mine, and I know what was already written down about it before the news.

### The Deno Deploy shutdown clock, in three facts

Deno's own announcement, [Deno is joining Cloudflare](https://deno.com/blog/cloudflare), reported 3 things that matter here. Deno Deploy "will continue operating for six months before shutting down", with migration support for paying customers moving to Workers. The Deno runtime gets another year of monthly releases with bug fixes and security updates, and after that year Deno ends its own development of it. And Ryan Dahl and the Deno team are joining Cloudflare. MLQ's [write-up of the wind-down](https://mlq.ai/news/cloudflare-takes-in-deno-team-winds-down-deno-runtime-and-deploy) reported the same 6 months and 1 year without adding a date, which is the right call: nobody has published a calendar day, so I count from October 9 and say "about six months". Anyone who gives you an April date is doing arithmetic, not reporting.

Is six months a panic? No. It is a deadline with a known path. According to the [Deno migration guide](https://docs.deno.com/deploy/migration_guide), Deploy apps move to Cloudflare Workers, and that guide is the 1 document to read first; for my one site the move was already a named trigger in its architecture record. The news changed the timing, not the plan.

## The Stack Decision Table: Verdict Per Project

Verdicts are per project, never per platform. A platform answer ("move everything to Cloudflare", "leave Cloudflare") is how you end up paying to move a workload that was never at risk. So here is every piece of my stack, where it runs, the verdict, and the number that would change it. The bills are the same ones I printed line by line in [my whole stack's monthly bill](https://flowingkhaos.com/column/reduce-saas-costs-monthly-stack), where Railway reads $12 and Cloudflare reads $0 for September 2026.

| Project | Runs on | Verdict | What would change it |
|---|---|---|---|
| lukesidney.me (Fresh 2.x) | Deno Deploy, free tier, region us | **Move** to Cloudflare Workers, same code, via `@cloudflare/vite-plugin`. Not started. | Deploy shuts down about six months after 2026-10-09. The old traffic trigger (over 800,000 requests or 16 GiB in a month) is superseded. |
| flowingkhaos.com | Cloudflare Worker (`flowingkhaos-site`) | **Stays.** Deployed by `wrangler deploy`; not Git-connected. | Nothing in the record. |
| CMS (Payload) and the always-on services | Railway containers, data on Neon | **Stays.** Payload cannot deploy to Workers. | Railway usage over 25 USD a month for two months in a row, then re-measure both hosts. |
| R2 storage and DNS | Cloudflare | **Stays.** | Nothing in the record. |
| Durable Objects | Cloudflare | Operator-internal realtime only. **Vetoed** for any project classified resale. | Stays vetoed unless the classification changes. |
| celld | Not run | **Watch.** Not tested. | A resale-classified project that needs realtime, or the CMS host trigger above firing. Neither has happened. |

Six rows, one move. That is the finding.

## The Move I Already Wrote Down: lukesidney.me to Workers

I keep an architecture record for lukesidney.me, and its reversal-triggers table has trigger 1 reading: Deno Deploy, measured by requests and egress on the Deploy dashboard, threshold over 800,000 requests or over 16 GiB in a calendar month, action "move to Cloudflare Workers with the same code". The runner-up host was named on the day the site was designed: Cloudflare Workers via `@cloudflare/vite-plugin`, which Fresh officially supports.

The shutdown fires that trigger early. The traffic threshold no longer matters, the action does not change, and the code does not change. Status today, in my own words from the record: not yet scheduled. The site pulls its content from the CMS at build time, and the deploy is run by hand with the Deno CLI, so the move is a hosting change, not a rewrite. Deno's own [deployment manual](https://deno.land/manual@v1.29.1/advanced/deploying_deno) documents the older deployctl path for Deploy Classic, according to the 1.29 manual, not the deno deploy command the site uses now, so I read it as history, not instructions.

Why write a reversal trigger for a free-tier host nobody expected to disappear? Because a decision with no reversal number just stays, long after the reason for it is gone. I learned that the expensive way on hosting once already, and the write-up, [Vercel Hobby could not carry the CMS](https://flowingkhaos.com/fixes/vercel-hobby-could-not-carry-the-cms), is where the habit comes from: measure, decide, write down what would undo it. This time the undo was written first and the news only pressed the button.

## Why the Rest of the Stack Stays, and the Railway Math

Payload, the CMS behind every site I publish, cannot deploy to Workers. That one fact settles the CMS and every app that embeds it: they run as Railway containers with their data on Neon, and nothing in the Deno news touches them.

Cloudflare Containers were examined for that job on 2026-08-30 and judged unsuitable for an always-on server: still beta, no direct inbound TCP (everything proxied through a fronting Worker), an ephemeral filesystem wiped when the container sleeps, and pricier than Railway for a process that never idles. Workers are admitted for one shape only, stateless glue, such as a signed-URL proxy in front of R2. That is also why flowingkhaos.com lives there: no process to keep warm.

The math, so the verdict is a number and not a preference. September 2026: Railway $12 for all my projects, Cloudflare $0. Railway's rates are roughly $10 per GB-month of RAM and $20 per vCPU-month, with volume and egress billed per GB, and Hobby at $5 a month including $5 of usage. An always-on container pays for its RAM every hour whether it works or not, which is exactly why a request-driven site should not be one. The reversal trigger for the CMS host: Railway usage over 25 USD a month for two months in a row, then I re-measure both hosts before deciding anything.

The precedent for measuring first is the move that cost me money. From Jul 31 to Aug 29 the Vercel dashboard showed the CMS and the old flowingkhaos app holding 54.7% of the shared account's compute, and [the fix write-up](https://flowingkhaos.com/fixes/vercel-hobby-could-not-carry-the-cms) records the CMS moving to a Railway container for a fixed monthly floor. The fix page records that the data stayed on Neon through the move, and that is the test I make in [Own your content: one CMS behind every site](https://flowingkhaos.com/column/own-your-content-one-cms), which shows the 1 question to ask before any host change: can the host move without the data moving?

## celld: What It Could Change, What I Have Not Tested, and What Would Make Me Try It

celld is the part of the deal I am actually watching. It is an open-source daemon that runs a Cloudflare Workers application on your own machines: Workers, Durable Objects, KV, Queues, D1, R2, Workflows, cron triggers and static assets, from the `wrangler.json` you already have. Each Durable Object is a cell, a named server with its own SQLite database, and long-term state goes to an S3-compatible, Google Cloud Storage or Azure bucket. No control plane, no consensus service, according to the [celld README](https://github.com/denoland/celld/blob/main/README.md), which also says one node owns a cell at a time through a conditional bucket write. Releases so far: v0.6.0 on 2026-09-26, v0.6.1 on 2026-10-01, v0.6.2 on 2026-10-07. Forbes reports that [Cloudflare plans to merge celld into its open-source workerd runtime](https://www.forbes.com/sites/janakirammsv/2026/10/10/cloudflare-buys-deno-to-run-its-workers-platform-on-your-own-servers), with no date attached, so the shape of the thing may change again.

I haven't run celld. No benchmark, no uptime, no bill, no deploy time from me, and I am not going to borrow someone else's.

Here is why it still earns a row in the table. My rule on Durable Objects is operator-internal realtime only, vetoed for any project classified resale, because no buyer can run one on their own VPS. celld's whole point is a buyer running Durable Objects on their own machines. It is the first thing I have seen that could weaken that veto. A reason to watch, not yet a reason to move.

One caveat from the README matters at my size. A single node has no peer to replicate to, so every write waits for the bucket and is much slower; the fast path needs a fleet of two or more. That is a second machine before the first benefit.

What would make me try it: a resale-classified project that needs realtime, a sync room, or the CMS host trigger firing. Neither has happened. When one does, celld gets a measured weekend, and the number goes in this column.

## The Rule That Decides the Rest: Measure Which Project Spends First

Most of the advice this month is a platform answer: "move to Workers" or "get off Cloudflare's roadmap". The rule I keep is smaller: measure which project spends before you move anything. Here it is applied to my own stack, one project at a time, with the trigger each one checks.

lukesidney.me checks trigger 1, requests and egress on the Deploy dashboard. The shutdown fired it, and the action was already written: Workers, same code. Before I estimate the work, I count the `Deno.*` calls in that codebase, because Pinggy's note on [what to do with your Deno apps](https://pinggy.io/blog/deno_joins_cloudflare_what_to_do) is right that web-standard code and `npm:` packages port easily while `Deno.*` APIs do not, and the DEV Community's table of [what the deal means for your deployments](https://dev.to/zforzain2000/cloudflare-bought-deno-what-it-means-for-your-deployments-5d1h) is right to call it a migration, not a redeploy. That count is the first measurement of the move, and it has not been taken yet.

The CMS checks the Railway trigger: usage over 25 USD a month, two months in a row. September read $12. Not fired. It stays, and the Deno news has nothing to say to it.

flowingkhaos.com has no trigger written, because its line reads $0 and nothing about it is at risk. It stays, and the next time its record is reviewed, that is the gap to fill: a $0 line still deserves a number that would make me look again.

celld checks two triggers, a resale project that needs realtime, or the Railway trigger above. Neither has fired. It stays a row marked watch, with no number from me until one does.

Four projects, four triggers, one move. If a project of yours has no trigger written down, write one now, before the next announcement writes it for you. I could be wrong about your stack. I am not wrong about mine.

- [ ] Search the code for Deno. calls before estimating the move
- [ ] Confirm the app is on Deno Deploy and read its requests and egress on the dashboard
- [ ] Write one reversal trigger with a number for this project
- [ ] Check the monthly bill: Railway usage over 25 USD a month for two months in a row means re-measure both hosts
- [ ] Keep celld as watch until a resale project needs realtime

## Sources

- [Deploy Classic | Deno Docs](https://deno.land/manual@v1.29.1/advanced/deploying_deno)
- [Cloudflare takes in Deno team, winds down Deno runtime and Deploy | MLQ News](https://mlq.ai/news/cloudflare-takes-in-deno-team-winds-down-deno-runtime-and-deploy)
- [Deno Is Joining Cloudflare: What to Do With Your Deno Apps | Pinggy Blog](https://pinggy.io/blog/deno_joins_cloudflare_what_to_do)
- [Deno is joining Cloudflare | Deno](https://deno.com/blog/cloudflare)
- [Cloudflare Buys Deno To Run Its Workers Platform On ...](https://www.forbes.com/sites/janakirammsv/2026/10/10/cloudflare-buys-deno-to-run-its-workers-platform-on-your-own-servers)
- [Cloudflare Bought Deno: What It Means for Your Deployments - DEV Community](https://dev.to/zforzain2000/cloudflare-bought-deno-what-it-means-for-your-deployments-5d1h)
- [Own Your Content Means Control, Not Copyright: Run This Test](https://flowingkhaos.com/column/own-your-content-one-cms)
- [Reduce SaaS Costs: My Whole Business Stack Is $192.82 a Month](https://flowingkhaos.com/column/reduce-saas-costs-monthly-stack)
- [Own Your Content Means Control, Not Copyright: Run This Test](https://flowingkhaos.com/column/own-your-content-one-cms)
- [Reduce SaaS Costs: My Whole Business Stack Is $192.82 a Month](https://flowingkhaos.com/column/reduce-saas-costs-monthly-stack)
- [Vercel Hobby could not carry the CMS — flowingkhaos](https://flowingkhaos.com/fixes/vercel-hobby-could-not-carry-the-cms)
- [Own Your Content Means Control, Not Copyright: Run This Test — the column](https://flowingkhaos.com/column/own-your-content-one-cms)
- [Reduce SaaS Costs: My Entire Business Stack — the column](https://flowingkhaos.com/column/reduce-saas-costs-monthly-stack)

## Questions, answered

### When does Deno Deploy shut down?

About six months after Cloudflare's October 9 announcement. No calendar day has been published, so any specific date is arithmetic, not reporting.

### What happens to apps running on Deno Deploy?

According to Deno's migration guide, Deploy apps move to Cloudflare Workers, and paying customers get migration support. The author's one Deploy site, lukesidney.me, moves to Workers with the same code via @cloudflare/vite-plugin.

### Does the Deno runtime itself keep getting updates?

The Deno runtime gets another year of monthly releases with bug fixes and security updates, after which Deno ends its own development of it.

### Does everything have to move to Cloudflare Workers?

No. The author's verdicts are per project: only one site moves, the CMS stays on Railway because Payload cannot deploy to Workers, and Railway at $12 a month is under the $25 trigger that would prompt re-measuring hosts.

### What is celld and should you use it now?

celld is an open-source daemon that runs a Cloudflare Workers application, including Durable Objects, KV, D1 and R2, on your own machines. The author has not run or benchmarked it and keeps it on watch until a resale-classified project needs realtime.
