Skip to main content
Deno 2 is finally here 🎉️
Learn more

Deno wrapper

🦕 Like ./gradlew, but for Deno

🦕 Downloads a pinned version of Deno
📂 Caches Deno installation in the .deno folder
🌟 Creates a ./denow wrapper script that auto-downloads Deno
👤 Users don’t need to install deno globally

❤️ I’d love any Windows experts to add a install.ps1 and ./denow.* for Windows support!

Installation

curl sh

Find your existing Deno project, then run install.sh. If you’re using Windows, you can use Git Bash to emulate a POSIX shell. 👍

curl -fsSL https://deno.land/x/deno_wrapper/install.sh | sh

You can add a vN.N.N argument to download a specific version. By default we use the Deno.version.deno version or else the latest Deno release.

curl -fsSL https://deno.land/x/deno_wrapper/install.sh | sh -s 1.30.0

Usage

Terminal Linux macOS

Just use ./denow as though it were the true deno binary! Anyone who clones your repo won’t need to install deno themselves; the ./denow will auto-install a local copy into the .deno folder.

⚠️ Make sure you add .deno to your .gitignore! That’s where deno will be installed to by the wrapper.

./denow --help
./denow eval 'console.log(42)'
./denow fmt
./denow task mytask
./denow compile --allow-read --allow-net https://deno.land/std/http/file_server.ts
./denow run --allow-net https://examples.deno.land/http-server.ts
./denow run -A src/index.ts

If you want to update the version of Deno that ./denow downloads and invokes, you can go through the install steps (above) again to pin to a different version. Be aware that this will overwrite the ./denow file. You can also inspect the generated ./deno file to see what version of Deno they are invoking and change it manually.

Why?

💡 Inspired by The Gradle Wrapper

Sometimes (not often, but sometimes), you want to have an auto-install wrapper around a project-critical binary. In a nutshell you gain the following benefits:

  • Standardizes a project on a given Deno version, leading to more reliable and robust builds.

  • Provisioning a new Deno version to different users and execution environment (e.g. IDEs or Continuous Integration servers) is as simple as changing the Wrapper definition.

For instance, GitHub Actions can be written using Deno, but how do you make sure deno is available on the GitHub Action runner? You can use ./denow as a proxy!

Why not just download the deno binary as ./deno?

Because the Deno binary is >100MB, which is more than most version control systems want to deal with. GitHub will even block files larger than 100MB!

Development

Bash sh

Most stuff is in POSIX shell code for max compat with macOS and Linux variants that use different bash, ksh, fish, etc. shells.

Make sure you check the Webhooks tab after each release to make sure that Deno actually recieved the payload from the Release event!

WEBHOOK:
Payload URL: https://api.deno.land/webhook/gh/deno_wrapper
Select individual events: "Branch or tag creation"