Building scripts and CLIs with Deno
Why Deno?
Writing scripts in Deno is fast, easy, and productive. There’s no separate step to install dependencies, configure TypeScript, setup a linter, formatter, test runner, or any other part of your toolchain.
For example, you can write TypeScript, install a module and its type definitions right when you run the script for the first time:
import cowsay from "npm:[email protected]";
let output: string = cowsay.say({ text: "Hello from typescript!" });
console.log(output);
And when we run it the first time, it installs all dependencies and caches them:
$ deno run --allow-read main.ts
________________________
< Hello from typescript! >
------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
Web Platform APIs
Scripting with Deno is easier with its built-in Web Platform APIs. This makes accessing the network, parsing HTTP responses, and more simple and intuitive.
const res = await fetch("https://examples.deno.land/hello-world.ts");
const text = await res.text();
console.log(text);
And running this script we see the body of the script:
$ deno run --allow-net main.ts
console.log("Hello, World!")
Sharing and distributing
Deno can execute programs and scripts via URL, so sharing your script is as simple as hosting your script on gist.github.com. An example of a script is https://examples.deno.land/hello-world.ts, which you can run from a URL:
$ deno run https://examples.deno.land/hello-world.ts
Hello, World!
If you want to share your JavaScript or TypeScript program as a binary, Deno’s
all-in-one modern toolchain includes
deno compile
, which
makes it easy to compile your script into a single, portable binary that you can
share on all major platforms.
$ deno compile --allow-net ./main.ts
Compile file:///deno/main to main
$ ./main
console.log("Hello, World!")
Additional Resources
Here are some examples, blog posts, and videos about writing scripts or CLIs with Deno.
- How the creator of Homebrew simplifies distributing software with tea and Deno
- How immutable scripts in Deno allow Windmill.dev (YC S22) to build production-grade ops
- dax — Cross platform shell tools for Deno inspired by zx