Deno 1.41: smaller deno compile binaries
Deno’s goal is to simplify programming in as many environments as possible. In
this 1.41 release, we’re excited to announce improvements that broaden how and
where Deno can be used:
we’ve roughly halved the size of deno compile
binaries,
as well as added an official Linux ARM 64 build.
Additionally, we’ve continued to improve Node.js compatibility, the LSP to
include better auto-completion, and Deno APIs.
If you already have Deno installed, upgrade to version 1.41 in your terminal with:
deno upgrade
If you don’t yet have Deno installed, you can install it with one of the following commands, or many other ways.
MacOS / Linux Install
curl -fsSL https://deno.land/install.sh | sh
Windows Install
irm https://deno.land/install.ps1 | iex
Here’s an overview of what’s new in Deno 1.41:
- Smaller
deno compile
binaries - Official Linux ARM64 builds
- ARM64 canary builds
- Updates to Node.js compatibility
- Changes to
Deno
APIs - Language server improvements
deno compile
binaries
Smaller Since v1.6,
deno compile
has
allowed you to compile your project into a single binary executable, which is
useful for:
- distributing and executing binaries on all major platforms without needing to install Deno or dependencies
- packaging assets inside executable for more portability
- simplifying deployment
- achieving a faster startup time
Since then, we’ve continued to improve deno compile
, by adding
support for web workers and dynamic imports,
as well as npm packages.
We’re happy to announce that this release brings a more lightweight build for
deno compile
binaries, making produced binaries up to 50% smaller!
In v1.40 a “Hello world” program compiled to a 116Mb binary on Mac ARM:
$ echo "console.log('Hello world');" > hello_world.ts
$ deno compile hello_world.ts
Check file:///Users/ib/dev/deno/hello_world.ts
Compile file:///Users/ib/dev/deno/hello_world.ts to hello_world
$ ls -lah hello_world
116M Feb 22 15:59 hello_world
In v1.41 the size of the same program is reduced to 58Mb:
$ deno upgrade
Looking up latest version
Found latest version 1.41.0
$ deno compile hello_world.ts
Check file:///Users/ib/dev/deno/hello_world.ts
Compile file:///Users/ib/dev/deno/hello_world.ts to hello_world
$ ls -lah hello_world
58M Feb 22 16:02 hello_world
We have futher plans to make the produced binaries even smaller in the future, as well as allowing you to compile a custom build of Deno with only the features you need.
Linux ARM64 support
Official Linux ARM64 builds were one of the most requested features by the Deno community. We are happy to announce that they are now available in Deno 1.41.
The official ARM64 binaries can be found in the Deno releases. Note that this update means our official Deno Docker image now also supports ARM64.
We’d like to thank Luke Channings who provided the community Linux ARM64 builds for the past 3 years.
ARM64 canary builds
In addition to stable Deno versions, you can also install a “canary” build, which is useful for testing the latest features and bug fixes, with:
deno upgrade --canary
Our canaries are
released multiple times daily
for each commit on main
.
Starting from Deno 1.41, canary builds are available for Linux and Mac ARM64.
Updates to Node.js compatibility
We fixed serveral issues with Node.js compatibility in Deno 1.41. Here are some of the highlights:
cp.execFile
properly validatestimeout
parametercrypto
module supportsaes256
algorithmfs/promises
gets support forcp()
http2.connect
now supports ALPN protocols improving compatibility withgrpc-js
packageprocess.ppid
andprocess.umask
are now supportedutil.callbackify
matches Node enablingfs-extra
package compatibility
Deno
APIs
Changes to This release brings a few changes to the Deno
APIs:
Deno.ConnectTlsOptions
now supportscert
andkey
properties to better align it with other “connect” APIs in Deno; that makescertChain
andprivateKey
properties deprecated.Deno.FsFile.isTerminal()
andDeno.FsFile.setRaw()
are now available to better support terminal I/O. Note that these methods only have effect if the opened is a TTY.Deno.FsFile.lock()
andDeno.FsFile.unlock()
are now available to better support file locking. Synchronous counterparts are also available asDeno.FsFile.lockSync()
andDeno.FsFile.unlockSync()
.
Language server improvements
This release brings better auto-completion triggers and more reliable version
suggestions for npm:
specifiers.
Additionally, a memory leak in the LSP was identified and fixed. The memory was leaked during linting and was proportional to the number of files and their size.
Thanks to Ian Bull for thorough profiling and investigation of the LSP internals that helped pinpoint the issue.
Thank you to our contributors!
We couldn’t build Deno without the help of our community! Whether by answering questions in our community Discord server or reporting bugs, we are incredibly grateful for your support. In particular, we’d like to thank the following people for their contributions to Deno 1.41: Alessandro Cosentino, Dan Rose, Florian Schwalm, Jason Ford, Javier Hernández, John Spurlock, Lino Le Van, restlessronin, zhanghengxin, 林炳权.
Would you like to join the ranks of Deno contributors? Check out our contribution docs here, and we’ll see you on the list next time.
Believe it or not, the changes listed above still don’t tell you everything that got better in 1.41. You can view the full list of pull requests merged in Deno 1.41 on GitHub here.
Thank you for catching up with our 1.41 release, and we hope you love building with Deno!
Want to try a modern package registry for JavaScript and TypeScript?
We’re looking for feedback. Join the waitlist.