Deno September Update: our last 1.x release, Deno Deploy updates, and end of summer merch sale
As summer winds down in the northern hemisphere, our team has been cranking away to improve Deno ahead of our next major release: Deno 2.
Read on to learn about our last 1.x release (1.46), a slew of updates for Deno Deploy including spending limits and Web Cache API support, [an end-of-summer sale in our merch store](https://t.co/kuWzJK5Tk7) (use code `DenoMerch25` for 25% off), and more from the community!
![](https://assets.buttondown.email/images/4cb0ccea-7bc8-4e34-a20b-e89f138bc8b3.png?w=960&fit=max)
And a surprise Deno plushie! 😱️ (not for sale... yet?)
## Deno 1.46: the last 1.x release
It is not only the last 1.x release, but also really big one. In this release, we’ve [simplified CLI](https://deno.com/blog/v1.46#simpler-cli) with [shorter invocations](https://deno.com/blog/v1.46#shorter-invocations) and [short-hand permission flags](https://deno.com/blog/v1.46#short-hand-permission-flags), enabled [multi-threaded web servers with](https://deno.com/blog/v1.46#faster-deno-serve) `deno serve --parallel`, [improved dependency management](https://deno.com/blog/v1.46#dependency-management) with `deno remove` and `deno clean`, and [added several Node/npm compatibility improvements](https://deno.com/blog/v1.46#nodejs-and-npm-compatibility).
Here is how we’ve simplified Deno:
```bash
# Deno v1.45
deno run --allow-read --allow-write --allow-env --allow-sys main.ts
# Deno v1.46
deno run -RWES main.ts
# Deno v1.46 without run subcommand
deno -RWES main.ts
```
You can now create multi-threaded web servers:
```bash
$ deno serve --parallel main.ts
deno serve: Listening on http://0.0.0.0:8000 with 10 threads
```
No magic here, just Deno running X copies of the same server on separate threads, which makes reasoning about the state of your app much simpler. Also, [benchmarks for those curious](https://x.com/deno_land/status/1828807221540499483).
On the Node.js/npm compat side, [we’ve made a bunch of improvements](https://deno.com/blog/v1.46#nodejs-and-npm-compatibility) that have enabled support for: playwright, @google-cloud, pglite, mysql2, ssh2, and much more.
[Watch the 3min video](https://www.youtube.com/watch?v=LIaqIG-WwTU) or [read the announcement blog post](https://deno.com/blog/v1.46) ⇒
## Spending limits and Web Cache API on Deno Deploy
Two big features landed in Deno Deploy recently. The first is [spending limits](https://deno.com/blog/deploy-spend-limits), which protects your projects from [racking up costs overnight and surprising you with a thousand dollar bill](https://x.com/shoeboxdnb/status/1643639119824801793) the next morning.
![](https://assets.buttondown.email/images/f1204848-a649-4966-80c5-b163d43a9751.png?w=960&fit=max)
For pro-plan users, you can configure your spend limit across your entire organization in your settings. When the spend hits 50%, 90%, and 100%, you’ll receive an email. At 100%, all requests to your deployments will receive a `403: FORBIDDEN (QUOTA EXCEEDED)` error.
Note that you can update your limit at any time during your billing cycle.
In addition to having more control over your cloud spend, you also have more control over your performance with new beta [Web Cache API support](https://deno.com/blog/deploy-cache-api). Much like the web standard [Cache API](https://developer.mozilla.org/en-US/docs/Web/API/Cache) in browsers, this offers semi-persistent storage for Request/Response pairs, enabling you to cache network requests for fast responses.
Here’s a simple example:
```js
const cache = await caches.open("my-cache");
Deno.serve(async (req) => {
const cached = await cache.match(req);
if (cached) {
return cached;
} const res = new Response("cached at " + new Date().toISOString());
await cache.put(req, res.clone());
return res;
});
```
By default, cached data is persisted for an indefinite period of time. While we periodically scan and delete inactive objects, it’s usually kept for at least 30 days. You can also customize object expiration with standard HTTP headers `Expires` and `Cache-Control`.
During Web Cache API’s beta period, it will be available for all Deno Deploy users at no cost. While we hope to keep the Cache API free, we’ll closely monitor its usage and incurred costs throughout this beta period to determine if we need to start charging.
## From the community
If you have something you’ve built with Deno, please share it with the community on our [Discord’s #showcase channel](https://discord.gg/deno).
- [ssx](https://github.com/oscarotero/ssx), a fast and simple JSX library from the creator of [Lume](https://lume.land/)
- [molt](https://github.com/hasundue/molt), updating dependencies in Deno
- [fedify](https://fedify.dev/), an ActivityPub server framework
- [petplay](https://github.com/petplayxr/petplay/), AR in VR for VRChat, using Deno and FFI
- [paska-ovo](https://github.com/EGAMAGZ/paska-ovo), for adding easter eggs to web pages
- [@libs/markdown](https://jsr.io/@libs/markdown), render markdown to HTML
- [@sevenc-nanashi/cross-test](https://jsr.io/@sevenc-nanashi/cross-test), test runner for Deno that lets you test in multiple JS runtimes
- [@5ouma/reproxy](https://jsr.io/@5ouma/reproxy), deliver any files in the GitHub repository
- [debatething.com](http://debatething.com), AI generated debate simulator, built with Fresh and GPT-4o-mini
## In case you missed it…
- What do you think of the JSR logo? Our designers talk about [what went into the logo design process and how that informed the UI of jsr.io](https://deno.com/blog/designing-jsr/og.png).
- [How to use private npm registries with Cloudsmith and Deno](https://deno.com/blog/private-npm-registries-cloudsmith)
- [Here’s a video showing how to use](https://www.youtube.com/watch?v=5wlZDw942J8) `deno compile` to build a desktop game
- Curious how multi-threaded deno serve came about? [Check out this short internal talk.](https://www.youtube.com/watch?v=T_2Ls07A83o)
- Ryan Dahl shares his learnings from [pursuing HTTP imports based dependency system](https://deno.com/blog/http-imports).
- [You can write TypeScript in Deno to create desktop apps that feel native](https://blog.nativescript.org/macos-node-api-preview/).
- The Deno Standard Library has been stabilized. To learn more, [check out the video overview](https://www.youtube.com/watch?v=RFhM34rBWnU) or [this tweet thread showcasing each module](https://x.com/deno_land/status/1826406094287368293).
And that’s it for this issue! If you think someone might find this useful, please forward it to them.
— Andy J.
Deno May Update: Faster Deno in 1.43, several JSR announcements, and escape hatches
We got many updates this month, including a faster Deno in its 1.43 release, several JSR announcements and resources, and case studies from Netlify and Slack. Let's dive on in.
Faster in 1.43
In 1.43, we added many performance improvements, such as code caching, more efficient memory usage in our language server protocol, and more. Now, startup time in Deno is almost 2x faster than in Node, depending on program size. On top of that, our LSP auto-completion times are reduced from 6-8 seconds to under a second in large code bases.
Deno April Update: Deno 1.42, simplified Deno Deploy, JSR internals
This month we released Deno 1.42, simplified the project creation flow in Deno Deploy, dive deep into the internals of JSR, and more.
Deno 1.42: Better dependency management with JSR
Our vision with Deno is to simplify programming, and one important aspect of that is managing dependencies. This is why we created JSR — a ESM only, TypeScript-first, cross platform, superset of npm. In 1.42, we’ve made JSR a first-class citizen of Deno, which means without any additional tooling, you can consume and publish modules to JSR.
Install from JSR with deno add
:
Deno December Update: Subhosting, Cron, Fresh 1.6, and more
We had a busy month with our new self-serve Deno Subhosting, Deno Cron, and Fresh 1.6. On top of that, we kicked off two new video series — Deno Toolchain and Ryan’s Weekly Recap. Finally, read to the end where we share some upcoming news for Deno 👀.
Run your users code securely with Deno Subhosting
We’re excited to launch a self-serve version of Deno Subhosting — which powers Netlify Edge Functions. But Subhosting offers more than simply “reselling edge functions”. More and more have extended the functionality of their platform by giving their users the ability to write custom logic, either via automations and integrations (Airtable, Slack, etc.), or an app marketplace (Shopify, HubSpot).
Deno October Update: Deno 1.37 and Deno Queues
This issue dives into using JavaScript on Jupyter notebooks, adding scalable background processing to your apps with Deno Queues, engineering challenges when building Deno KV on FoundationDB, and more.
Deno 1.37: modern JavaScript in Jupyter notebooks
Deno’s mission to simplify programming doesn’t end in web — in 1.37, we bring our modern tooling and streamlined DX to Jupyter notebooks, where you can use JavaScript, TypeScript, and npm in an interactive REPL.
With Deno powering Jupyter notebooks, you can render markdown:
Deno August Update: more flexible security in 1.36, persistent logs in Deno Deploy, and more
Hot runtime summer is in full swing and with that comes ton of updates! Read on to learn about more granular security controls in Deno 1.36, searchable and filterable logs on Deno Deploy, simplified route components in Fresh 1.3, and more.
Deno 1.36: More flexible security and expanded testing APIs
Deno’s opt-in permission model gives you control over what your (or third-party) code has access to. Until now, you could either grant unfettered access to a feature or configure specific domains or directories with --allow-*
.
In Deno 1.36, we introduce the --deny-*
family of runtime flags to enable more flexible permissions for your Deno programs.
#50: The JavaScript Trademark, Fresh 1.1, and Deno on AWS Lambda
In this issue, we ask Oracle to do the right thing, welcome Fresh 1.1 to the universe, and learn how to run Deno in an AWS lambda custom runtime.
Articles and Resources
Dear Oracle, Please Release the JavaScript Trademark — Ryan Dahl — Did you know Oracle has a trademark on “JavaScript”? And they haven’t done much with it, except creating a legal gray area that led to the invention of “ECMAscript” (which Brandon Eich has said “was always an unwanted trade name that sounds like a skin disease”). Help us get the word out there.
Fresh 1.1 — Luca Casonato — Fresh is simpler to use and faster than ever, now with automatic JSX, plugins, and more.
Deno Newsletter #32
Welcome to Deno Newsletter issue #32!
Every Monday we serve you with a bunch of useful information and links for every Deno enthusiast.
Don't forget to join discussion on Deno's official Gitter channel!
If you encounter anything Deno related that you want to share with community, mention us on Twitter @DenoNews, or just respond to this mail.
Development
[tweet https://twitter.com/deno_land/status/1168613331172777984]
Deno Newsletter #31 - v0.16.0, deno test, support for .d.ts files
Welcome to Deno Newsletter issue #31!
Every Monday we serve you with a bunch of useful information and links for every Deno enthusiast.
Don't forget to join discussion on Deno's official Gitter channel!
If you encounter anything Deno related that you want to share with community, mention us on Twitter @DenoNews, or just respond to this mail.
Releases
Last week v0.16.0 was released. This is a big release that includes some of long awaited features!
Deno:
- feat: "deno test" subcommand (#2783, #2784, #2800) - automagically run all test in current directory
- feat: support .d.ts files (#2746) - provide type definitions to JavaScript files
- feat: implement console.trace() (#2780) - print out stack trace along with arbitrary data
- feat: support custom inspection of objects (#2791) - add method to class declaration using "Deno.customInspect" symbol for custom serialization for console
- fix: dynamic import panic (#2792)
- fix: handle tsconfig.json with comments (#2773)
- fix: import map panics, use import map's location as its base URL (#2770)
- fix: set Response.url (#2782)
Standard library:
Full list of changes can be found here
Deno Newsletter #30 - v0.15.0, jump-to-definition in registry
Welcome to Deno Newsletter issue #30!
Every Monday we serve you with a bunch of useful information and links for every Deno enthusiast.
Don't forget to join discussion on Deno's official Gitter channel!
If you encounter anything Deno related that you want to share with community, mention us on Twitter @DenoNews, or just respond to this mail.
Releases
Last week v0.15.0 was released!
Important changes to Deno:
- feat: print cache location when no arg in deno info (#2752)
- fix: dynamic import should respect permissions (#2764)
- fix: propagate Url::to_file_path() errors instead of panicking (#2771)
- fix: cache paths on Windows are broken (#2760)
- fix: dynamic import base path for REPL and eval (#2757)
- fix: permission requirements for Deno.rename() and Deno.link() (#2737)
There were no changes in standard library.
Full list of changes can be found here
Deno Newsletter #29 - v0.14.0, dynamic imports
Welcome to Deno Newsletter issue #29!
Every Monday we serve you with a bunch of useful information and links for every Deno enthusiast.
Don't forget to join discussion on Deno's official Gitter channel!
If you encounter anything Deno related that you want to share with community, mention us on Twitter @DenoNews, or just respond to this mail.
Releases
Last week v0.14.0 was released!
Important changes to Deno:
- feat: support `await import(...)` syntax for dynamic module imports (#2516)
- feat: add option to delete the `Deno` namespace in a worker (#2717)
- feat: support starting worker using a `blob: URL` (#2729)
- feat: remove `Deno.build.args` (#2728)
- feat: support native line ending conversion in `Blob` constructor (#2695)
- feat: make `Deno.execPath()` a function (#2743, #2744)
- fix: enforce permissions on `Deno.kill()`, `Deno.homeDir()` and `Deno.execPath()` (#2714, #2723)
- fix: `cargo build` incremental builds (#2740)
- fix: avoid REPL crash when DENO_DIR doesn't exist (#2727)
- fix: resolve worker module URLs relative to the host main module URL (#2751)
- doc: improve documentation on using the V8 profiler (#2742)
Important changes to standard library:
Full list of changes can be found here
Deno Newsletter #28 - v0.13.0
Welcome to Deno Newsletter issue #28!
Every Monday we serve you with a bunch of useful information and links for every Deno enthusiast.
Don't forget to join discussion on Deno's official Gitter channel!
If you encounter anything Deno related that you want to share with community, mention us on Twitter @DenoNews, or just respond to this mail.
Releases
Last week v0.13.0 was released!
Important changes to Deno:
- feat: expose writeAll() and writeAllSync() (#2298)
- fix: REPL shouldn't panic on SIGINT (#2662)
- feat: add debug info to ModuleResolutionError (#2697)
- fix: bring back --no-fetch flag (#2671)
- fix: handle -v and --version flag (#2684)
- perf: remove v8::Locker calls (#2665, #2664)
Important changes to standard library:
- fix: make shebangs Linux compatible (deno_std#545)
- fix: ignore error when writing response to aborted request (deno_std#546)
Full list of changes can be found here
Deno Newsletter #27
Welcome to Deno Newsletter issue #27!
Every Monday we serve you with a bunch of useful information and links for every Deno enthusiast.
Don't forget to join discussion on Deno's official Gitter channel!
If you encounter anything Deno related that you want to share with community, mention us on Twitter @DenoNews, or just respond to this mail.
Development
Due to vacation season there's not much going on in the ether at the moment. As we're working towards 1.0 release (you can read more about it in this issue) here's a gist of development since v0.12.0 was released.
Already landed:
- feat: remap stack traces of non-thrown errors (#2693)
- feat: DenoDir refactor (#2636)
- feat: expose writeAll() and writeAllSync() (#2298)
- feat: cache response headers for all redirects (#2677)
- feat: error handling for dynamic imports (#2678)
- fix: remove hacky normalize_path (#2660)
- fix: REPL shouldn't panic when it gets SIGINT (#2662)
- fix: timer params length (#2655)
- cli: bring back --no-fetch flag (#2671)
- cli: make --importmap flag global (#2687)
- cli: handle -v and --version flags (#2684)
- benchmarks: enable zoom on charts (#2668)
- benchmarks: bundle size (#2690)
- refactor: use Deno.execPath where possible (deno_std#548)
- fix: ignore error when writing response to aborted request (deno_std#546)
- fix: make shebangs compatible with Linux (deno_std#545)
Still in development:
- feat: use new Rust Futures API (#2612)
- feat: debugger, support Chrome Devtools (#2696)
- feat: print JS stack trace on Ctrl+C (#2673)
- feat: dynamic imports (#2516)
- feat: TLS support (#2326)
- feat: native plugins (#2385)
- build: make `cargo build` main build frontend (#2675)
- refactor: cleanup compilation pipeline (#2686)
- feat: JSDOM port (deno_std#542)
- feat: YAML module (deno_std#528)
Deno Newsletter #26 - v0.12.0
Welcome to Deno Newsletter issue #26!
Every Monday we serve you with a bunch of useful information and links for every Deno enthusiast.
Don't forget to join discussion on Deno's official Gitter channel!
If you encounter anything Deno related that you want to share with community, mention us on Twitter @DenoNews, or just respond to this mail.
Releases
[caption align=”alignnone” width=”980”]Deno now supports onload
event[/caption]
Deno Newsletter #25 - 300 subscribers
Welcome to Deno Newsletter issue #25!
Every Monday we serve you with a bunch of useful information and links for every Deno enthusiast.
Don't forget to join discussion on Deno's official Gitter channel!
If you encounter anything Deno related that you want to share with community, mention us on Twitter @DenoNews, or just respond to this mail.
Thank you!
[caption align=”alignnone” width=”980”][/caption]
Deno Newsletter #24 - v0.11.0
Welcome to Deno Newsletter issue #24!
Every Monday we serve you with a bunch of useful information and links for every Deno enthusiast.
Don't forget to join discussion on Deno's official Gitter channel!
If you encounter anything Deno related that you want to share with community, mention us on Twitter @DenoNews, or just respond to this mail.
Releases
[caption align=”alignnone” width=”980”]With latest release you can pass CLI flags after the script name[/caption]
Deno Newsletter #23 - v0.10.0
Welcome to Deno Newsletter issue #23!
Every Monday we serve you with a bunch of useful information and links for every Deno enthusiast.
Don't forget to join discussion on Deno's official Gitter channel!
If you encounter anything Deno related that you want to share with community, mention us on Twitter @DenoNews, or just respond to this mail.
Releases
[caption align=”alignnone” width=”980”]New download progress bar[/caption]