• Home
  • Python
    • Introduction to Python
    • Python Developer
  • JavaScript
    • Introduction to JavaScript
    • JavaScript Developer
  • React.js
    • Introduction to React
    • React Developer
  • TypeScript
    • Introduction to TypeScript
    • TypeScript Developer
  • Linux Shell
    • Introduction to the Linux Shell
    • Linux Shell Developer
  • C++
    • Introduction to C++
    • C++ Developer
  • C Language
    • Introduction to C
    • C Developer
  • Rust
    • Introduction to Rust
    • Rust Developer
  • Zig
    • Introduction to Zig
    • Zig Developer
  • Interactive Training
  • Pricing
  • Brainstorm
STEMTrainingGrounds
  • Courses
    • Home
    • Python
      • Introduction to Python
      • Python Developer
    • JavaScript
      • Introduction to JavaScript
      • JavaScript Developer
    • React
      • Introduction to React
      • React Developer
    • TypeScript
      • Introduction to TypeScript
      • TypeScript Developer
    • Linux Shell
      • Introduction to the Linux Shell
      • Linux Shell Developer
    • C++
      • Introduction to C++
      • C++ Developer
    • C Language
      • Introduction to C
      • C Developer
    • Rust
      • Introduction to Rust
      • Rust Developer
    • Zig
      • Introduction to Zig
      • Zig Developer
  • Interactive Training
  • Pricing
  • Navigate
    • Home
    • Reading Grounds
    • Brainstorm

Quick Links

  • About Us
  • Pricing
  • Partnership
  • Brainstorm
  • Terms
  • Privacy
  • Refunds

Courses

  • Python
    • Introduction to Python
    • Python Developer
  • JavaScript
    • Introduction to JavaScript
    • JavaScript Developer
  • React
    • Introduction to React
    • React Developer
  • TypeScript
    • Introduction to TypeScript
    • TypeScript Developer
  • Linux Shell
    • Introduction to the Linux Shell
    • Linux Shell Developer
  • C++
    • Introduction to C++
    • C++ Developer
  • C Language
    • Introduction to C
    • C Developer
  • Rust
    • Introduction to Rust
    • Rust Developer

Newsletter

Subscribe to our free monthly newsletter, for a quick update on Python, JavaScript, and React news

© 2025 - 2026 STEMTrainingGrounds. All Rights Reserved.

Reading Grounds

Programming, Web Development, Articles

Read practical articles about Python, JavaScript, React, TypeScript, Linux Shell, Rust, Zig, and modern software tools.

PythonJavaScriptReactTypeScriptAll Topics

Python JIT-Compiling

Python JIT-Compiling explains how CPython traditionally executes bytecode and how experimental JIT compilation may improve some Python workloads over time. The article compares Python’s JIT efforts with Java, JavaScript, PyPy, and other runtimes while keeping expectations realistic about performance gains.

Python

Read article →

Python Packaging Wars

A beginner-friendly guide to the modern Python packaging debate.

Python

Read article →

pip vs uv: Is Python Finally Getting a Package Manager People Can Agree On?

For small scripts, pip may be enough. For modern projects, uv is hard to ignore.

Python

Read article →

Python Data Types?

This article explains how Python data types have evolved from a beginner topic into a larger engineering discussion about type hints, validation, tooling, testing, and scale.

Python

Read article →

State of the Bun

State of the Bun explains Bun as a fast, all-in-one JavaScript toolkit that combines a runtime, package manager, bundler, and test runner. The article covers Bun’s history, motivation, adoption, strengths, weaknesses, and controversies while keeping the focus on what Bun means for the future of JavaScript tooling.

JavaScript

Read article →

Where Is Deno Today?

Where is Deno today? examines Deno as a secure, TypeScript-first JavaScript runtime that has become more practical through stronger Node/npm compatibility and built-in tooling. The article also explains Deno Deploy, its free-tier limits, and how Deno’s platform strategy compares with Node.js and Bun.

TypeScript

Read article →

Recap of JavaScript History

Recap of JavaScript History traces how JavaScript grew from a fast-built Netscape browser scripting language into the central language of modern web development. The article covers its creator, early motivations, language influences, ecosystem growth, production uses, and future direction toward TypeScript, faster tooling, full-stack frameworks, and edge deployment.

JavaScript

Read article →

Recap of Python History

Recap the History of Python traces how Guido van Rossum’s readable, practical successor to ABC became a major language for automation, web development, data science, AI, education, and scientific computing. The article covers Python’s origins, ecosystem, production uses, key turning points, and future direction toward faster CPython, stronger typing, better packaging, and improved multi-core execution.

Python

Read article →

Python JIT-Compiling

Python JIT-Compiling explains how CPython traditionally executes bytecode and how experimental JIT compilation may improve some Python workloads over time. The article compares Python’s JIT efforts with Java, JavaScript, PyPy, and other runtimes while keeping expectations realistic about performance gains.

Python

Read article →

Python Packaging Wars

A beginner-friendly guide to the modern Python packaging debate.

Python

Read article →

pip vs uv: Is Python Finally Getting a Package Manager People Can Agree On?

For small scripts, pip may be enough. For modern projects, uv is hard to ignore.

Python

Read article →

Python Data Types?

This article explains how Python data types have evolved from a beginner topic into a larger engineering discussion about type hints, validation, tooling, testing, and scale.

Python

Read article →

State of the Bun

State of the Bun explains Bun as a fast, all-in-one JavaScript toolkit that combines a runtime, package manager, bundler, and test runner. The article covers Bun’s history, motivation, adoption, strengths, weaknesses, and controversies while keeping the focus on what Bun means for the future of JavaScript tooling.

JavaScript

Read article →

Where Is Deno Today?

Where is Deno today? examines Deno as a secure, TypeScript-first JavaScript runtime that has become more practical through stronger Node/npm compatibility and built-in tooling. The article also explains Deno Deploy, its free-tier limits, and how Deno’s platform strategy compares with Node.js and Bun.

TypeScript

Read article →

Recap of JavaScript History

Recap of JavaScript History traces how JavaScript grew from a fast-built Netscape browser scripting language into the central language of modern web development. The article covers its creator, early motivations, language influences, ecosystem growth, production uses, and future direction toward TypeScript, faster tooling, full-stack frameworks, and edge deployment.

JavaScript

Read article →

Recap of Python History

Recap the History of Python traces how Guido van Rossum’s readable, practical successor to ABC became a major language for automation, web development, data science, AI, education, and scientific computing. The article covers Python’s origins, ecosystem, production uses, key turning points, and future direction toward faster CPython, stronger typing, better packaging, and improved multi-core execution.

Python

Read article →

Python JIT-Compiling

Python JIT-Compiling explains how CPython traditionally executes bytecode and how experimental JIT compilation may improve some Python workloads over time. The article compares Python’s JIT efforts with Java, JavaScript, PyPy, and other runtimes while keeping expectations realistic about performance gains.

Python

Read article →

Python Packaging Wars

A beginner-friendly guide to the modern Python packaging debate.

Python

Read article →

pip vs uv: Is Python Finally Getting a Package Manager People Can Agree On?

For small scripts, pip may be enough. For modern projects, uv is hard to ignore.

Python

Read article →

Python Data Types?

This article explains how Python data types have evolved from a beginner topic into a larger engineering discussion about type hints, validation, tooling, testing, and scale.

Python

Read article →

State of the Bun

State of the Bun explains Bun as a fast, all-in-one JavaScript toolkit that combines a runtime, package manager, bundler, and test runner. The article covers Bun’s history, motivation, adoption, strengths, weaknesses, and controversies while keeping the focus on what Bun means for the future of JavaScript tooling.

JavaScript

Read article →

Where Is Deno Today?

Where is Deno today? examines Deno as a secure, TypeScript-first JavaScript runtime that has become more practical through stronger Node/npm compatibility and built-in tooling. The article also explains Deno Deploy, its free-tier limits, and how Deno’s platform strategy compares with Node.js and Bun.

TypeScript

Read article →

Recap of JavaScript History

Recap of JavaScript History traces how JavaScript grew from a fast-built Netscape browser scripting language into the central language of modern web development. The article covers its creator, early motivations, language influences, ecosystem growth, production uses, and future direction toward TypeScript, faster tooling, full-stack frameworks, and edge deployment.

JavaScript

Read article →

Recap of Python History

Recap the History of Python traces how Guido van Rossum’s readable, practical successor to ABC became a major language for automation, web development, data science, AI, education, and scientific computing. The article covers Python’s origins, ecosystem, production uses, key turning points, and future direction toward faster CPython, stronger typing, better packaging, and improved multi-core execution.

Python

Read article →
TypeScript
May 2026

Where Is Deno Today?

Take away point:

Deno began as a correction to Node.js. Deno today is becoming a secure, TypeScript-first JavaScript platform.

A secure TypeScript-first runtime and toolchain that now runs much more of the Node/npm ecosystem.

Deno is one of the most interesting JavaScript runtimes because it started as a critique of Node.js, then slowly became more practical by learning from the ecosystem it originally tried to escape.

The early pitch was clean and bold: a secure JavaScript and TypeScript runtime from Ryan Dahl, the creator of Node.js, built around modern web standards, TypeScript support, ES modules, and explicit permissions. The current pitch is more pragmatic: Deno is still secure-by-default and TypeScript-first, but Deno 2 also works much more directly with Node.js projects, npm packages, package.json, node_modules, and common JavaScript frameworks.[1]

That shift matters. Deno is no longer just “the anti-Node runtime.” Today, Deno is better understood as a modern JavaScript/TypeScript runtime and toolchain that is trying to combine security, built-in developer tools, npm compatibility, and cloud deployment into one coherent platform.

Article image

The history of Deno

Deno was created by Ryan Dahl, the original creator of Node.js. That historical connection is important because Deno was not created randomly. It grew out of dissatisfaction with parts of the Node.js model.

Node.js made server-side JavaScript mainstream. It gave JavaScript developers a way to build servers, APIs, command-line tools, build systems, and real backend applications. But over time, Node also inherited complexity: node_modules, CommonJS history, npm dependency sprawl, callback-era design decisions, loose default access to the file system and network, and a tooling ecosystem that often requires many separate packages.

Deno was introduced as a cleaner attempt at a JavaScript runtime. The name itself is an anagram of Node, and the project was designed around a different set of defaults: secure permissions, modern ES modules, built-in TypeScript support, browser-compatible APIs where possible, and a single executable with more tools included.

The original motivation can be summarized like this:

Node.js proved JavaScript could work on the server. Deno asked what server-side JavaScript might look like if it were redesigned later.

That was the promise. But the problem was adoption.

Node.js already had npm, massive package availability, production confidence, huge framework support, and a large developer base. Deno’s cleaner design was attractive, but cleaner design alone was not enough to make most teams abandon the Node/npm ecosystem.

That is why Deno 2 is so important.

What motivated the creation of Deno?

Deno was motivated by the idea that JavaScript development could be safer, simpler, and more modern.

The most important motivation was security. In Node.js, a script can usually access the file system, environment variables, and network by default. That is convenient, but it also means running a random script can be dangerous. Deno reversed that default. By design, Deno requires explicit permission flags for sensitive operations such as reading files, writing files, accessing the network, reading environment variables, or running subprocesses. Deno’s permissions documentation describes read access through --allow-read, write access through --allow-write, and similar permission flags for other capabilities.[2]

The second motivation was TypeScript. Deno wanted TypeScript to feel like a first-class part of the runtime rather than something that always required a separate compiler, config setup, or loader.

The third motivation was tooling. Instead of making developers install a formatter, linter, test runner, task runner, type checker, documentation generator, and package manager separately, Deno tries to include many of those tools directly. Deno’s current homepage lists built-in tools including a package manager, test runner, formatter, linter, task runner, type checker, coverage tool, workspace manager, benchmarker, doc generator, Jupyter kernel, compiler, and desktop app builder.[3]

The fourth motivation was web standards. Deno has tried to make server-side JavaScript feel closer to browser JavaScript by supporting APIs such as fetch, Request, Response, and Crypto on the server. Deno’s own homepage emphasizes web-standard APIs and participation in standards-track work.[3]

In short:

Deno was motivated by security, TypeScript, web standards, and built-in tooling.

How is Deno more secure than Node.js?

Deno’s biggest security advantage is its permission model.

By default, Deno does not want a program to freely access the user’s system. If a script needs to read files, write files, access the network, read environment variables, or run subprocesses, the developer must grant those capabilities.[2]

For example:

deno run app.ts

runs with restricted permissions.

If the program needs network access, the developer might run:

deno run --allow-net app.ts

If it needs read access to a specific directory:

deno run --allow-read=./data app.ts

That is meaningfully different from the traditional Node.js model. In Node, a script generally has broad system access unless the developer uses separate sandboxing, containers, operating-system permissions, or newer permission-related features.

Deno’s security model is also more visible. The permission flags force the developer to think about what a program actually needs. That is useful for scripts, teaching, command-line tools, internal automation, and running third-party code.

A simple comparison:

Node.js default: Run the program and trust it. Deno default: Run the program, but require explicit permission for sensitive capabilities.

That is Deno’s strongest security argument.

How debatable is Deno’s security advantage?

Deno’s security advantage is real, but it should not be exaggerated.

It is real because safer defaults matter. If a runtime denies file, network, environment, and subprocess access unless explicitly allowed, that reduces accidental exposure. It also creates a clearer mental model for what a script is allowed to do.

But it is debatable because permissions are not the same thing as total security.

First, developers can bypass the model by using broad flags:

deno run --allow-all app.ts

At that point, the security advantage is mostly gone.

Second, many real applications genuinely need file access, network access, environment variables, and database access. A production web app often needs several permissions. Once those permissions are granted, the application can still contain normal web vulnerabilities.

Third, Deno still runs JavaScript. JavaScript ecosystem risks do not disappear. Dependency risk, supply-chain attacks, prototype pollution, unsafe input handling, secrets leakage, SSRF-style network misuse, and application logic flaws can still exist. A runtime permission model helps, but it does not make bad code safe.

Fourth, Deno’s own security docs note an important nuance: the initial static module graph can load local files, npm packages, JSR packages, and remote URLs without consulting the runtime permission system; once code runs, however, its behavior still goes through the permission system.[4]

So the balanced answer is:

Deno is more secure by default than traditional Node.js. But Deno is not automatically secure in every real application.

That is the fair version.

Deno’s security advantage is strongest for scripts, CLI tools, educational environments, automation tasks, and cases where you want to run code with least-privilege access. It is weaker as a blanket claim that “Deno apps are secure” because application security still depends on code quality, dependencies, deployment configuration, secrets management, and runtime permissions.

Article image

Built-in tooling: one of Deno’s strongest ideas

Deno’s built-in tooling may be just as important as its security model.

Modern JavaScript projects often require many tools:

runtime package manager formatter linter test runner task runner type checker coverage tool bundler/build system documentation generator workspace manager

In Node projects, these are often separate dependencies. That gives developers flexibility, but it also creates setup fatigue.

Deno’s answer is to put more into the runtime. Deno’s official homepage describes Deno as a runtime with TypeScript and other tools baked in, including formatting, linting, testing, checking, benchmarking, documentation, compiling, and more.[3]

Common Deno commands include:

deno run app.ts
deno fmt
deno lint
deno test
deno check
deno bench
deno task dev
deno doc
deno compile
deno install

This makes Deno feel closer to Go or Rust in philosophy: one official toolchain handles many ordinary development tasks.

That is useful for beginners because there are fewer pieces to install. It is useful for teams because formatting, linting, testing, and TypeScript support can be standardized without immediately reaching for a pile of third-party packages.

The tradeoff is that developers who already love their Node-based stack may not care. A team already happy with pnpm, Vite, Vitest, ESLint, Prettier, tsx, and Node may not feel the need to switch.

Still, Deno’s built-in tooling is one of its clearest product strengths.

The current extent of Node/npm compatibility

This is where Deno has changed the most.

Deno originally tried to move away from much of the Node/npm model. It preferred URL imports, ES modules, permissions, and a different package philosophy. That was clean, but it made adoption harder.

Deno 2 changed the story. Deno 2 is officially described as having robust compatibility with Node and npm. It understands package.json, the node_modules folder, and npm workspaces, allowing Deno to run in many existing Node projects that use ESM.[1]

Example:

import chalk from "npm:chalk@5.3.0";

console.log(chalk.blue("Hello, Deno!"));

Deno also provides compatibility for Node built-in modules through the node: prefix. For example, Deno’s Node/npm compatibility docs show importing Node’s os module through node:os, and explain that many Node globals and APIs are available or have migration paths.[5]

That is a major practical change.

It means Deno no longer requires developers to leave npm behind. It also means Deno can be adopted incrementally. A team might use deno fmt or deno lint in a Node project before switching runtime behavior. Deno’s own Deno 2 announcement frames this as incremental adoption of its all-in-one toolchain.[1]

But compatibility is still not the same as perfect identity.

Node.js has a huge history of edge cases. Some packages rely on obscure Node behavior, native modules, lifecycle scripts, CommonJS assumptions, environment assumptions, or tooling assumptions. Deno compatibility is much better than before, but teams should still test real projects carefully.

The realistic statement is:

Deno now has serious Node/npm compatibility. But Node remains the safest compatibility default.

Current level of Deno adoption

Deno has real adoption, but it has not displaced Node.js.

Node remains the center of gravity for server-side JavaScript. It has the largest production ecosystem, broadest hosting support, most documentation, most Stack Overflow answers, and the strongest compatibility expectations.

Deno’s adoption is meaningful but smaller. In the State of JavaScript 2024 “Other Tools” section, Node.js was selected by 10,508 respondents, Bun by 1,894, and Deno by 1,365. That places Deno behind Node and Bun in that specific survey category.[6]

That is a useful signal, but it should be read carefully. Survey results are not the whole market. They reflect the survey audience, not every developer in the world. Still, they match the general reality:

Node.js = dominant Bun = currently louder in hype and speed conversations Deno = smaller, serious, security/tooling/platform-focused

Deno’s strongest adoption story may not be “everyone is switching runtime tomorrow.” It may be that Deno is building a coherent platform: runtime, tooling, package registry, cloud deploy, enterprise support, and sandboxing.

That platform angle is important.

Deno Deploy: why it is interesting

Deno Deploy may be one of the most important parts of Deno’s future.

Deno Deploy is a serverless/edge hosting platform for JavaScript applications. The idea is that you write JavaScript or TypeScript, deploy it to Deno’s infrastructure, and run it close to users globally. Deno’s homepage now markets Deno Deploy as hosting for JavaScript projects and says it can run Node projects too, including Next.js, Hono, Express, and SvelteKit apps.[3]

The appeal is obvious:

Deno runtime + TypeScript + web APIs + edge deployment + built-in observability

That is a clean story for modern web apps and APIs.

Deno Deploy is especially interesting because it connects the runtime story with a hosting story. Node has many hosting options. Bun has runtime/tooling momentum. Deno has a chance to differentiate by saying: use the runtime, use the toolchain, and deploy on the platform built for it.

Deno Deploy became generally available in February 2026. The launch announcement described it as a way to deploy apps globally, and emphasized that the free plan offered one million requests per month, 100 GB of egress, and 15 CPU hours at that time.[7]

Deno Deploy works around deployments, organizations, apps, serverless execution, caching, analytics, logs, KV storage, volume storage, and edge-style infrastructure. Its pricing page lists features such as sandboxed code execution, Web Cache API, HTTP Edge Cache, log streaming, analytics, KV storage, custom domains, CPU time, memory time, and volume storage.[8]

That makes Deno Deploy more than a toy hosting layer. It is a serious attempt to build a full JavaScript deployment platform.

Deno Deploy cost and free tier

Deno Deploy currently has a Free plan at $0/month, a Pro plan at $20/month, a Builder plan at $200/month, and custom Enterprise pricing. The pricing page describes the Free plan as intended for personal use and smaller projects.[8]

For the current Free plan, the official pricing page lists:

Requests/month: 1M Egress bandwidth: 20GB CPU time: 15h/month Memory time: 350 GB-h/month Active apps: 20 Deployments per hour: 60 Team members: 5 Volume storage: 1 GiB KV storage: 1 GiB KV read units/month: 450,000 KV write units/month: 300,000 Custom domains: 50/org Log retention: 1 day Analytics dashboard: trailing 30 days

The key free-tier numbers are: 1 million requests/month, 20GB egress bandwidth/month, 15 CPU hours/month, 1 GiB volume storage, and 1 GiB KV storage.[8]

One important note: Deno’s February 2026 GA announcement said the free plan offered 1 million requests/month, 100 GB egress, and 15 CPU hours.[7] However, the current pricing page now lists 20GB egress for the Free plan, so the pricing page should be treated as the more current source for publishing.[8]

That makes the free tier still very useful for small apps, demos, educational projects, prototypes, and low-traffic APIs. But for media-heavy sites, high-egress applications, or production apps with real traffic, the egress limit is worth watching carefully.

Pros of Deno

Deno’s first major advantage is security by default. The permission model is a real improvement for many scripts and development workflows.[2]

Its second advantage is built-in TypeScript support. Deno reduces the feeling that TypeScript requires a separate toolchain before you can start.

Its third advantage is built-in tooling. Formatting, linting, testing, benchmarking, checking, compiling, and documentation are part of the Deno experience.[3]

Its fourth advantage is modern standards alignment. Deno feels more browser-like than Node in important ways because it emphasizes web APIs such as fetch, Request, and Response.

Its fifth advantage is improved npm compatibility. Deno 2 makes Deno much more practical for real projects than earlier versions.[1]

Its sixth advantage is Deno Deploy. Having a runtime and a deployment platform under the same ecosystem gives Deno a stronger end-to-end story.[7]

In short:

Deno pros: Secure-by-default permissions TypeScript-first development Built-in formatter, linter, tester, checker, and task runner Modern web API alignment Improved Node/npm compatibility Single executable philosophy Deno Deploy platform Good fit for scripts, APIs, edge apps, and education

Cons of Deno

Deno’s biggest disadvantage is adoption.

Node.js is still the default. If a beginner asks, “Which JavaScript runtime should I learn first for backend jobs?” the safest answer is usually still Node.js. Node has more jobs, more tutorials, more hosting guides, and more package compatibility confidence.

The second disadvantage is ecosystem inertia. Many JavaScript tools still assume Node, npm, pnpm, or yarn. Deno compatibility is stronger now, but some tools may still behave differently.

The third disadvantage is perception. Deno’s original “clean break from Node” positioning was intellectually attractive, but it also made some developers think Deno was too different. Deno 2 fixes much of that, but changing perception takes time.

The fourth disadvantage is that its security model can feel inconvenient. Permission flags are good for safety, but developers can experience them as friction, especially during quick experimentation.

The fifth disadvantage is that Deno Deploy, while interesting, competes in a crowded hosting market: Vercel, Netlify, Cloudflare Workers, Fly.io, Render, AWS, and many others already have developer mindshare.

The realistic cons:

Deno cons: Much smaller ecosystem than Node Less hiring demand than Node Some npm/Node edge cases still need testing Permission model can feel inconvenient Deno Deploy competes with many established platforms Bun currently gets more hype for speed/tooling excitement

Deno is good. But being good is not enough to replace Node automatically.

Where Deno is today

Deno today is in a much more practical position than early Deno.

Early Deno asked developers to accept a cleaner but less compatible JavaScript runtime. Modern Deno has moved toward compatibility without giving up its core identity. That is the right strategic move.

The current state is:

Deno is secure-by-default. Deno is TypeScript-first. Deno has strong built-in tooling. Deno 2 is much more compatible with Node and npm. Deno Deploy gives it a serious cloud platform angle. Deno adoption is real, but still far behind Node.

That makes Deno less dramatic than Bun in some conversations, but possibly more disciplined as a platform.

Bun feels like the runtime/tooling speed revolution.

Node feels like the mature default.

Deno feels like the runtime that keeps asking: what if JavaScript had better defaults?

Article image

Final takeaway

Deno is not dead. Deno is not replacing Node.js overnight. Deno is also no longer just a purist alternative that asks developers to abandon npm.

The most important thing happening with Deno is that it has become more practical.

Deno 2 brought stronger Node/npm compatibility. Deno’s built-in tooling remains one of the cleanest experiences in JavaScript. Its security model is still a real differentiator, even if the advantage is not absolute. And Deno Deploy gives the project something bigger than a local runtime: a cloud platform story.

The best summary is:

Deno began as a correction to Node.js. Deno today is becoming a secure, TypeScript-first JavaScript platform.

That is where Deno is today.

Recommend TypeScript Material

Sources

  1. Announcing Deno 2
  2. Permissions
  3. Deno, the next-generation JavaScript runtime
  4. Security and permissions
  5. Node and npm Compatibility
  6. State of JavaScript 2024: Other Tools
  7. Deno Deploy is Generally Available
  8. Deno Deploy Pricing