Is Deno Ready for Primetime?
Evaluation of Deno modules

We have introduced Deno, a runtime for JavaScript, TypeScript, and WebAssembly that is based on the V8 JavaScript engine and the Rust programming language.
Here is an interesting timeline, comparing Node.js and Deno (DEstroy NOde), along with npm (Node Package Manager), the world’s largest software registry that is deeply coupled with node:
- npm was born on September 21, 2009.
- node 0.1.14 was released on August 2, 2011.
- node 0.6.3 bundled npm on November 24, 2011.
- node 14 was released on April 21, 2020.
- Deno 1.0 was released on May 13, 2020.
- node 16 was released on April 20, 2021.
- node 18 was released on April 19, 2022.
- Deno 1.24.1 was released on July 28, 2022.
As a later comer, Deno has been built upon the 10-year experience of Node.js, with the latest internet technologies and web standards.
Is Deno ready for primetime?
Regardless of promising features arising from a solid architecture, Deno is still young, not as stable, and not as fit for many environments. It is at the dawn of primetime. It needs a large community to endorse the approach and to contribute to the open source project.
In this article, we are going to try out and evaluate Deno modules.
Deno Modules
According to Wikipedia, there are over 1.3 million packages available in the main npm registry. It is powerful and capable, but also a monstrous number to maintain.
Deno only supports ES Modules. For local files, Deno expects a full module name, including the extension. When dealing with remote imports, it expects the web server to resolve modules by the URL path, and to provide back the media type of the code. Deno’s remote HTTP imports do not utilize package.json. Deno has a standard library, third-party modules, and CDNs (Content Delivery Networks).
Standard library
Deno has a standard library, https://deno.land/std, which includes modules of high-quality code that all Deno projects can use fearlessly. For example, the module, https://deno.land/manual/node/std_node, polyfills the builtin modules of Node. Deno modules do not have external dependencies, and they are reviewed by the Deno core team. Two weeks ago, it was at version [email protected], and now it is at version [email protected].
Third-party modules
Deno has a hosting service, https://deno.land/x, for third-party modules. It caches releases of open source modules stored on GitHub, and serves them in one easy-to-remember domain.
Two weeks ago, it has 4,895 third-party modules, and now it has 4,961 third-party modules.
CDNs
Some Deno-friendly CDNs host packages from npm, and provide them as Deno-consumable ES Modules. esm.sh, https://esm.sh/, is such a CDN.
Set Up Deno and Fresh Working Environment
We choose Fresh as work environment, which is a full-stack modern web framework for JavaScript and TypeScript developers. The previous two articles have described in detail how the following two steps work:
Step 1: On macOS, use brew to install Deno.
% brew install denoStep 2: Use Deno CLI to scaffold a Fresh project.
% deno run -A -r https://fresh.deno.dev my-projectThis project can also be downloaded from the repository, my-deno-fresh-project.
Here is VS Code display of files and directories generated at the project directory.

The top-level files are deno.json, dev.ts, main.ts, fresh.gen.ts, import_map.json, and README.md.
The top-level directories are routes, islands, and static.
Run deno task start to start the app. The page, http://localhost:8000, displays the following app:

The Example Routes
Routing is the mechanism that determines which route a given incoming request is handled by. Fresh route request is based on its URL path. The routes directory contains all of the routes in the project. The name of each file corresponds to the URL path where that page will be accessed.
We create some example routes to try out Deno modules.
The ramda route
Ramda is a functional programming library. It aims to add functional programming to JavaScript without changing its nature and feel.
R.max is a function that returns the larger of its two arguments. For example, R.max(200, 300) returns 300.
We can get the ramda module at https://esm.sh/. At the browser address bar, type https://esm.sh/ramda and enter. It will redirect to the latest version of ramda, which can be imported to use.

Create a new route, routes/ramda.tsx, as follows:















