Deno Deploy Is Shutting Down: Where to Move Your App, and How Big the Move Is
The usual questions about where to run TypeScript functions are latency and cost. Deno Deploy users now have a blunter one: the platform is going away. On October 9, 2026, Ryan Dahl said the whole Deno team is moving to Cloudflare and that Deploy will shut down six months later, which puts the deadline around April 2027.
I spent a day sizing the migration on a real codebase and pricing the main destinations. This is the condensed version; the complete guide on DevToolLab has the audit script, every pricing line and screenshots of each platform.
What Ends and What Survives
Per Deno's announcement, Deploy runs for six more months and then closes. Deno Land will keep shipping runtime patches, bug and security fixes once a month, for a year and then stop working on the runtime; the code stays open source, MIT licensed as it is today. JSR keeps operating while its infrastructure moves to Cloudflare, and rusty_v8 stays supported while the team plans to fold it into workerd.
Paying customers get migration help, but the announcement only mentions moving to Cloudflare Workers. Deno Sandbox and Subhosting share Deploy's plans ($0 Free, $20 Pro, $200 Builder), and nobody has said what happens to them.
Most of the Pain Lives in a Few Files
Five kinds of Deno-only code make a Deploy app hard to move: KV reads and writes, KV queues, Deno.cron jobs, Deno.* file access and jsr: package imports. I wrote a small Node script that counts those patterns in a project, then ran it against SaaSKit, Deno's own Fresh SaaS starter built for Deploy (now archived, last commit February 9, 2026):
69 source files scanned
Deno.openKv() 1 hits in 1 files
KV atomic / watch / listenQueue 5 hits in 1 files
Deno.cron 0 hits in 0 files
BroadcastChannel 0 hits in 0 files
Deno.serve 0 hits in 0 files
Deno.env 5 hits in 3 files
Deno filesystem calls 5 hits in 2 files
jsr: imports 10 hits in 2 files
npm: imports 8 hits in 2 files
https:// URL imports 1 hits in 1 files
The interesting part is concentration. All of SaaSKit's KV usage sits in utils/db.ts, a 483-line module with 15 KV calls that 22 other files import. Swapping storage means rewriting that one module, not the app. The script itself is about 40 lines and is in the original post if you want to point it at your own repo.
Seven Places to Go
The worked example throughout: a SaaSKit-shaped app with an AI chat endpoint, KV for users and sessions, and roughly 3 million requests a month.
| Platform | Deno code unchanged? | KV replacement | Example month |
|---|---|---|---|
| Cloudflare Workers | No | Workers KV, D1, Durable Objects | $5 |
| Supabase Edge Functions | Mostly | Postgres | $27 |
| workerd + celld | No | Durable Objects | your servers |
| Netlify Edge Functions | Mostly | Netlify Blobs | $9 |
| Fly.io | Yes, it runs Deno | self-hosted denokv | about $4 |
| Val Town | Mostly | per-val SQLite | $25 |
| Vercel Functions | Community runtime only | Blob or a database | $20 and up |
Cloudflare Workers
The Deno engineers now work on this platform, and it is the one target the migration offer names. Durable Objects give each object its own SQLite database plus WebSockets, a good fit for agent-style workloads, and Deno.cron maps to Cron Triggers.
!Cloudflare Workers homepage
There is no Deno global here, so SaaSKit's database module needs rewriting, as does each Deno.env lookup. The Paid plan is $5 a month with 10M requests and 30M CPU milliseconds included; at 5 ms of CPU per request and KV inside its included reads and writes, the example stays at $5. The free plan caps CPU at 10 ms per invocation.
Supabase Edge Functions
Supabase's Edge Runtime is Deno-compatible and MIT licensed, so most handler code moves with light edits, and Postgres replaces KV with pg_cron for schedules. Each hosted invocation is limited to 2 seconds of CPU time and 256 MB of RAM. Pro is $25 a month with 2M invocations, then $2 per million, so the example lands at $27.
workerd and celld, Self-Hosted
workerd is the Apache 2.0 runtime under Workers, and celld is Deno's self-hosted Durable Objects server, a single Rust binary whose only dependency is an object storage bucket. Write for Workers once and you keep an exit. The catch: the planned merge of celld into workerd is announced work, not shipped code, and you operate everything yourself.
Netlify Edge Functions
Netlify built its edge runtime on Deno and charges edge traffic as plain web requests, 2 credits for every 10,000. The example's 3M requests use 600 of the Personal plan's 1,000 monthly credits ($9), leaving 400 for bandwidth at 20 credits per GB and production deploys at 15 credits each. Each request gets 50 ms of CPU, which is tight for heavy AI post-processing.
Fly.io
Fly runs containers on small VMs, so you can keep Deno, Fresh and even KV: run Deno's self-hosted denokv server with its SQLite file on a volume and point Deno.openKv() at it. SaaSKit reads its KV path from an environment variable, so utils/db.ts needs no edits.
!Fly.io homepage
A shared-cpu-1x machine with 512 MB is $3.69 a month and volumes are $0.15 per GB. It buys time rather than a future, though, since Deno's own development ends after the final year.
Val Town
Val Town executes TypeScript snippets it calls vals on Deno 2.9.6; for webhooks, bots and small agents, nothing else here feels as close to Deploy. Each val gets a private SQLite database, and Pro is $25 a month ($21 billed yearly) with 1M runs a day and 10-minute runs. The free plan stops runs at 1 minute of wall clock and SQLite at 10 MB.
Vercel Functions
Vercel's official runtimes cover Node.js, Bun, Python, Rust, Go, Ruby, Wasm and Edge, while Deno only works through the community-maintained vercel-deno runtime, which means most teams will be porting code rather than moving it. Fluid compute bills CPU only while your code runs, though memory keeps billing during a wait. Pro is $20 a month with $20 of usage credit, and Active CPU is charged from minute one at $0.128 an hour in the iad1 (Washington, D.C.) region; the 4 free hours are a Hobby perk.
Choosing Without Migrating Twice
1. Count before you choose. An app with zero KV and cron hits can go anywhere.
2. Ask whether you need Deno to keep running. Fly.io runs it as is; Supabase, Netlify and Val Town run code written for it; Workers and Vercel mean porting.
3. Locate the KV code. When it lives in a single module, as in SaaSKit, moving it to Durable Objects or Postgres takes about a day.
4. Compare your slowest request with each CPU ceiling: 10 ms (Workers Free), 50 ms (Netlify), 2 s (Supabase).
5. Start early, since the migration help on offer only targets Workers.
If you are translating Deno.cron schedules, the Cron Expression Generator builds the expression for a Cron Trigger or pg_cron, and TypeScript to JavaScript shows what a handler compiles to before you port it to Node.js.
My Short List
- Safest bet for the next few years: Workers, with self-hosted workerd as a fallback.
- Already using Postgres or Supabase Auth: Supabase Edge Functions.
- Need it running this week: Fly.io plus denokv, with zero code edits.
- Bots, webhooks and small agents: Val Town.
- Heading to Next.js anyway: Vercel.
April 2027 is close, yet for most apps the real work sits in one storage module and maybe a scheduled job. Count the files that truly depend on Deno before committing to a host. The full DevToolLab write-up covers everything this version skips.
References
- 7 Best Deno Deploy Alternatives in 2026 (DevToolLab)
- Deno joins Cloudflare (Deno blog)
- Deno joins Cloudflare (Cloudflare blog)
- SaaSKit on GitHub
- workerd on GitHub
- celld on GitHub
- denokv on GitHub
- Netlify Edge Functions docs
- Vercel Functions pricing docs
5 reactions
Deno GitHub Explained: Secure-by-Default JavaScript, Native TypeScript, and Permission Boundaries
deno by denoland: denoland/deno
Deno is a JavaScript and TypeScript runtime built around V8, Rust, and Tokio. This overview explains how its secure-by-default permission model changes the way network, disk, and environment access are granted, while a single statically linked binary consolidates the runtime and its developer tooling.
The architecture section connects the runtime stack to native TypeScript execution and standard web Request/Response APIs. It then examines the permission boundary around a minimal HTTP server, including explicit --allow-net access, least-privilege scoping, and --no-prompt behavior for CI pipelines. The final section covers standalone compilation, static import analysis, and why dynamically interpolated imports need explicit inclusion or refactoring.
TimeStamps:
0:00 Implicit Trust and Supply Chain Attacks
0:39 V8, Rust, and Tokio
1:14 Third-Party Configuration Files
1:40 Static Binary Distribution
2:24 Native TypeScript HTTP Server
3:11 Restricted Sandbox and Network Access
3:48 Allow-Net Permission Scope
4:16 No-Prompt in CI/CD
4:50 Compile to a Standalone Executable
5:12 Static Import Graph Limits
5:54 Security and Developer Ergonomics
🛡️ Secure-by-default permissions and least-privilege network access
🧩 V8, Rust, Tokio, native TypeScript, and unified tooling
📦 Standalone compilation, static imports, and dynamic module limits
Deno's tradeoff is clear: fewer external layers and stronger runtime boundaries, with explicit permissions and statically analyzable dependencies as the operating model. It suits teams that value native TypeScript and auditable CI behavior, while compiled applications must account for dynamic imports. Use the repository overview to evaluate where that constraint fits your architecture.
#Deno #TypeScript #JavaScriptRuntime
[de-DE] YNAS ynp_054adb49f87b63c6 Kinofilm
Privater automatisierter Staging-Upload. Paketidentität: ynp_054adb49f87b63c6; Ausgabe: cinematic.
[es-US] YNAS ynp_054adb49f87b63c6 cinemático
Carga de entorno de prueba de automatización privada. Identidad del paquete: ynp_054adb49f87b63c6; salida: cinemática.
[fr-FR] YNAS ynp_054adb49f87b63c6 cinématique
Téléchargement de l'environnement de test d'automatisation privé. Identifiant du package : ynp_054adb49f87b63c6 ; sortie : cinématique.
[hi] YNAS ynp_054adb49f87b63c6 सिनेमैटिक
निजी स्वचालन स्टेजिंग अपलोड। पैकेज पहचान: ynp_054adb49f87b63c6; आउटपुट: सिनेमाई।
[id] YNAS ynp_054adb49f87b63c6 sinematik
Unggahan staging otomatisasi pribadi. Identitas paket: ynp_054adb49f87b63c6; output: sinematik.
[it] YNAS ynp_054adb49f87b63c6 cinematic
Caricamento di automazione privata. Identità del pacchetto: ynp_054adb49f87b63c6; output: cinematografico.
[pt-BR] YNAS ynp_054adb49f87b63c6 cinemático
Upload de teste de automação privada. Identidade do pacote: ynp_054adb49f87b63c6; saída: cinemática.
73 views
Mentions
@deno.land team had have to do it since the beginning. If this step would be done, it might change the future of the project. And it seems like it would be done soon: deno#37030
@JeffKazzee Similar with Deno. Luckily the team is working on getting Deno into a foundation. deno#37030
写 TypeScript 小服务,还得先拼一堆工具?🦕 Deno 提供 JS/TS 运行时及内置开发工具。写脚本、做 Web API 都能试试。⚙️ denoland/deno #TypeScript #浇朋友 #蓝朋友 #互关 #fo
Bart, co-creator of Deno, says they're looking into a foundation now!! Source: deno#37030
Deno Deploy Is Shutting Down: Where to Move Your App, and How Big the Move Is The usual questions about where to run TypeScript functions are latency and cost. Deno Deploy users now have a blunter one: the platform is going away. On October 9, 2026, Ryan Dahl said the whole Deno team is moving to Cloudflare and that Deploy will shut down six months later, which puts the deadline around April 2027. I spent a day sizing the migration on a real codebase and pricing the main destinations. This is the condensed version; the complete guide on DevToolLab has the audit script, every pricing line and screenshots of each platform. What Ends and What Survives Per Deno's announcement, Deploy runs for six more months and then closes. Deno Land will keep shipping runtime patches, bug and security fixes once a month, for a year and then stop working on the runtime; the code stays open source, MIT licensed as it is today. JSR keeps operating while its infrastructure moves to Cloudflare, and rusty_v8 stays supported while the team plans to fold it into workerd. Paying customers get migration help, but the announcement only mentions moving to Cloudflare Workers. Deno Sandbox and Subhosting share Deploy's plans ($0 Free, $20 Pro, $200 Builder), and nobody has said what happens to them. Most of the Pain Lives in a Few Files Five kinds of Deno-only code make a Deploy app hard to move: KV reads and writes, KV queues, Deno.cron jobs, Deno.* file access and jsr: package imports. I wrote a small Node script that counts those patterns in a project, then ran it against SaaSKit, Deno's own Fresh SaaS starter built for Deploy (now archived, last commit February 9, 2026): 69 source files scanned Deno.openKv() 1 hits in 1 files KV atomic / watch / listenQueue 5 hits in 1 files Deno.cron 0 hits in 0 files BroadcastChannel 0 hits in 0 files Deno.serve 0 hits in 0 files Deno.env 5 hits in 3 files Deno filesystem calls 5 hits in 2 files jsr: imports 10 hits in 2 files npm: imports 8 hits in 2 files https:// URL imports 1 hits in 1 files The interesting part is concentration. All of SaaSKit's KV usage sits in utils/db.ts, a 483-line module with 15 KV calls that 22 other files import. Swapping storage means rewriting that one module, not the app. The script itself is about 40 lines and is in the original post if you want to point it at your own repo. Seven Places to Go The worked example throughout: a SaaSKit-shaped app with an AI chat endpoint, KV for users and sessions, and roughly 3 million requests a month. | Platform | Deno code unchanged? | KV replacement | Example month | |---|---|---|---| | Cloudflare Workers | No | Workers KV, D1, Durable Objects | $5 | | Supabase Edge Functions | Mostly | Postgres | $27 | | workerd + celld | No | Durable Objects | your servers | | Netlify Edge Functions | Mostly | Netlify Blobs | $9 | | Fly.io | Yes, it runs Deno | self-hosted denokv | about $4 | | Val Town | Mostly | per-val SQLite | $25 | | Vercel Functions | Community runtime only | Blob or a database | $20 and up | Cloudflare Workers The Deno engineers now work on this platform, and it is the one target the migration offer names. Durable Objects give each object its own SQLite database plus WebSockets, a good fit for agent-style workloads, and Deno.cron maps to Cron Triggers. !Cloudflare Workers homepage There is no Deno global here, so SaaSKit's database module needs rewriting, as does each Deno.env lookup. The Paid plan is $5 a month with 10M requests and 30M CPU milliseconds included; at 5 ms of CPU per request and KV inside its included reads and writes, the example stays at $5. The free plan caps CPU at 10 ms per invocation. Supabase Edge Functions Supabase's Edge Runtime is Deno-compatible and MIT licensed, so most handler code moves with light edits, and Postgres replaces KV with pg_cron for schedules. Each hosted invocation is limited to 2 seconds of CPU time and 256 MB of RAM. Pro is $25 a month with 2M invocations, then $2 per million, so the example lands at $27. workerd and celld, Self-Hosted workerd is the Apache 2.0 runtime under Workers, and celld is Deno's self-hosted Durable Objects server, a single Rust binary whose only dependency is an object storage bucket. Write for Workers once and you keep an exit. The catch: the planned merge of celld into workerd is announced work, not shipped code, and you operate everything yourself. Netlify Edge Functions Netlify built its edge runtime on Deno and charges edge traffic as plain web requests, 2 credits for every 10,000. The example's 3M requests use 600 of the Personal plan's 1,000 monthly credits ($9), leaving 400 for bandwidth at 20 credits per GB and production deploys at 15 credits each. Each request gets 50 ms of CPU, which is tight for heavy AI post-processing. Fly.io Fly runs containers on small VMs, so you can keep Deno, Fresh and even KV: run Deno's self-hosted denokv server with its SQLite file on a volume and point Deno.openKv() at it. SaaSKit reads its KV path from an environment variable, so utils/db.ts needs no edits. !Fly.io homepage A shared-cpu-1x machine with 512 MB is $3.69 a month and volumes are $0.15 per GB. It buys time rather than a future, though, since Deno's own development ends after the final year. Val Town Val Town executes TypeScript snippets it calls vals on Deno 2.9.6; for webhooks, bots and small agents, nothing else here feels as close to Deploy. Each val gets a private SQLite database, and Pro is $25 a month ($21 billed yearly) with 1M runs a day and 10-minute runs. The free plan stops runs at 1 minute of wall clock and SQLite at 10 MB. Vercel Functions Vercel's official runtimes cover Node.js, Bun, Python, Rust, Go, Ruby, Wasm and Edge, while Deno only works through the community-maintained vercel-deno runtime, which means most teams will be porting code rather than moving it. Fluid compute bills CPU only while your code runs, though memory keeps billing during a wait. Pro is $20 a month with $20 of usage credit, and Active CPU is charged from minute one at $0.128 an hour in the iad1 (Washington, D.C.) region; the 4 free hours are a Hobby perk. Choosing Without Migrating Twice 1. Count before you choose. An app with zero KV and cron hits can go anywhere. 2. Ask whether you need Deno to keep running. Fly.io runs it as is; Supabase, Netlify and Val Town run code written for it; Workers and Vercel mean porting. 3. Locate the KV code. When it lives in a single module, as in SaaSKit, moving it to Durable Objects or Postgres takes about a day. 4. Compare your slowest request with each CPU ceiling: 10 ms (Workers Free), 50 ms (Netlify), 2 s (Supabase). 5. Start early, since the migration help on offer only targets Workers. If you are translating Deno.cron schedules, the Cron Expression Generator builds the expression for a Cron Trigger or pg_cron, and TypeScript to JavaScript shows what a handler compiles to before you port it to Node.js. My Short List - Safest bet for the next few years: Workers, with self-hosted workerd as a fallback. - Already using Postgres or Supabase Auth: Supabase Edge Functions. - Need it running this week: Fly.io plus denokv, with zero code edits. - Bots, webhooks and small agents: Val Town. - Heading to Next.js anyway: Vercel. April 2027 is close, yet for most apps the real work sits in one storage module and maybe a scheduled job. Count the files that truly depend on Deno before committing to a host. The full DevToolLab write-up covers everything this version skips. References - 7 Best Deno Deploy Alternatives in 2026 (DevToolLab) - Deno joins Cloudflare (Deno blog) - Deno joins Cloudflare (Cloudflare blog) - SaaSKit on GitHub - workerd on GitHub - celld on GitHub - denokv on GitHub - Netlify Edge Functions docs - Vercel Functions pricing docs
There's a fork-in-progress called "Dodo," the Discord server is quickly filling up. deno#37030 Dodo aims to be a drop-in replacement. Then there's Ende, my fork, and I ripped out Node compatibility, Deploy, KV, Jupyter, &c. ende.sh
Deno GitHub Explained: Secure-by-Default JavaScript, Native TypeScript, and Permission Boundaries deno by denoland: denoland/deno Deno is a JavaScript and TypeScript runtime built around V8, Rust, and Tokio. This overview explains how its secure-by-default permission model changes the way network, disk, and environment access are granted, while a single statically linked binary consolidates the runtime and its developer tooling. The architecture section connects the runtime stack to native TypeScript execution and standard web Request/Response APIs. It then examines the permission boundary around a minimal HTTP server, including explicit --allow-net access, least-privilege scoping, and --no-prompt behavior for CI pipelines. The final section covers standalone compilation, static import analysis, and why dynamically interpolated imports need explicit inclusion or refactoring. TimeStamps: 0:00 Implicit Trust and Supply Chain Attacks 0:39 V8, Rust, and Tokio 1:14 Third-Party Configuration Files 1:40 Static Binary Distribution 2:24 Native TypeScript HTTP Server 3:11 Restricted Sandbox and Network Access 3:48 Allow-Net Permission Scope 4:16 No-Prompt in CI/CD 4:50 Compile to a Standalone Executable 5:12 Static Import Graph Limits 5:54 Security and Developer Ergonomics 🛡️ Secure-by-default permissions and least-privilege network access 🧩 V8, Rust, Tokio, native TypeScript, and unified tooling 📦 Standalone compilation, static imports, and dynamic module limits Deno's tradeoff is clear: fewer external layers and stronger runtime boundaries, with explicit permissions and statically analyzable dependencies as the operating model. It suits teams that value native TypeScript and auditable CI behavior, while compiled applications must account for dynamic imports. Use the repository overview to evaluate where that constraint fits your architecture. #Deno #TypeScript #JavaScriptRuntime [de-DE] YNAS ynp_054adb49f87b63c6 Kinofilm Privater automatisierter Staging-Upload. Paketidentität: ynp_054adb49f87b63c6; Ausgabe: cinematic. [es-US] YNAS ynp_054adb49f87b63c6 cinemático Carga de entorno de prueba de automatización privada. Identidad del paquete: ynp_054adb49f87b63c6; salida: cinemática. [fr-FR] YNAS ynp_054adb49f87b63c6 cinématique Téléchargement de l'environnement de test d'automatisation privé. Identifiant du package : ynp_054adb49f87b63c6 ; sortie : cinématique. [hi] YNAS ynp_054adb49f87b63c6 सिनेमैटिक निजी स्वचालन स्टेजिंग अपलोड। पैकेज पहचान: ynp_054adb49f87b63c6; आउटपुट: सिनेमाई। [id] YNAS ynp_054adb49f87b63c6 sinematik Unggahan staging otomatisasi pribadi. Identitas paket: ynp_054adb49f87b63c6; output: sinematik. [it] YNAS ynp_054adb49f87b63c6 cinematic Caricamento di automazione privata. Identità del pacchetto: ynp_054adb49f87b63c6; output: cinematografico. [pt-BR] YNAS ynp_054adb49f87b63c6 cinemático Upload de teste de automação privada. Identidade do pacote: ynp_054adb49f87b63c6; saída: cinemática.
The state of Deno after the Cloudflare announcement deno#37030
The deno source code is copyrighted by its authors, not any company. They could delete the repo, but anyone with a copy still has the license to redistribute. github.com/denoland/deno/blob/main/LICENSE.md
celld: sel1f-hosted Durable Objects runtime: • V8 workers • one SQLite DB per object • S3-backed state • conditional-write ownership • epoch fencing No separate consensus cluster. Early, but a clever design. denoland/celld t.co