惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
CERT Recently Published Vulnerability Notes
博客园 - 【当耐特】
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog
Cisco Talos Blog
Cisco Talos Blog
爱范儿
爱范儿
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
人人都是产品经理
人人都是产品经理
大猫的无限游戏
大猫的无限游戏
博客园 - 三生石上(FineUI控件)
Martin Fowler
Martin Fowler
量子位
Cyberwarzone
Cyberwarzone
腾讯CDC
博客园 - Franky
T
The Blog of Author Tim Ferriss
U
Unit 42
Engineering at Meta
Engineering at Meta
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
小众软件
小众软件
酷 壳 – CoolShell
酷 壳 – CoolShell
G
GRAHAM CLULEY
L
LINUX DO - 最新话题
The Hacker News
The Hacker News
Security Latest
Security Latest
N
News and Events Feed by Topic
S
Schneier on Security
www.infosecurity-magazine.com
www.infosecurity-magazine.com
H
Hacker News: Front Page
Schneier on Security
Schneier on Security
O
OpenAI News
C
Cybersecurity and Infrastructure Security Agency CISA
月光博客
月光博客
美团技术团队
博客园_首页
V
V2EX
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Tailwind CSS Blog
雷峰网
雷峰网
WordPress大学
WordPress大学
GbyAI
GbyAI
C
Cisco Blogs
I
InfoQ
L
LINUX DO - 热门话题
Simon Willison's Weblog
Simon Willison's Weblog
T
Tor Project blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
S
Securelist
F
Full Disclosure

Deno

Deno 2.8 | Deno Claw Patrol: an open-source security firewall for agents | Deno Fresh 2.3: Zero JS by default, View Transitions, and Temporal support | Deno Deno 2.7: Temporal API, Windows ARM, and npm overrides | Deno Build a dinosaur runner game with Deno, pt. 6 | Deno Build a dinosaur runner game with Deno, pt. 5 | Deno Deno Deploy is Generally Available | Deno Introducing Deno Sandbox | Deno Build a dinosaur runner game with Deno, pt. 4 | Deno Build a dinosaur runner game with Deno, pt. 3 | Deno Build a dinosaur runner game with Deno, pt. 2 | Deno React / Next.js Denial-of-Service Vulnerability: Deno Deploy users protected | Deno Deno 2.6: dx is the new npx | Deno Build a dinosaur runner game with Deno, pt. 1 | Deno React Server Functions / Next.js Vulnerability: Deno Deploy users protected | Deno My highlights from the new Deno Deploy | Deno Deno's Other Open Source Projects | Deno How Deno protects against npm exploits | Deno Help Us Raise $200k to Free JavaScript from Oracle | Deno Deno 2.5: Permissions in the config file | Deno Fresh 2.0 Graduates to Beta, Adds Vite Support | Deno Deno 2.4: deno bundle is back | Deno JavaScript™ Trademark Update | Deno A brief history of JavaScript | Deno Reports of Deno's Demise Have Been Greatly Exaggerated | Deno An Update on Fresh | Deno How Plaid migrated 100 services to a new database platform 5x faster with Deno | Deno Deno 2.3: Improved deno compile, local npm packages, and more | Deno Add JSR packages with pnpm and Yarn | Deno Zero-config Debugging with Deno and OpenTelemetry | Deno Exploring Art with TypeScript, Jupyter, Polars, and Observable Plot | Deno Deno v Oracle Update 3: Fighting the JavaScript Trademark | Deno Build a custom RAG AI agent in TypeScript and Jupyter | Deno How to get deep traces in your Node.js backend with OTel and Deno | Deno toranoana.deno #20 登録受付中(2025年3月14日) | Deno Node just added TypeScript support. What does that mean for Deno? | Deno The Dino 🦕, the Llama 🦙, and the Whale 🐋 | Deno Publish a lint rule, get a prize | Deno Deno 2.2: OpenTelemetry, Lint Plugins, node:sqlite | Deno If you're not using npm specifiers, you're doing it wrong | Deno How Deno's documentation is evolving | Deno Oracle justified its JavaScript trademark with Node.js—now it wants that ignored | Deno Introducing the JSR open governance board | Deno Intro to Wasm in Deno | Deno Announcing OpenAI on JSR | Deno Deno in 2024 | Deno Goodbye WinterCG, welcome WinterTC | Deno Build a SolidJS app with Deno | Deno Run your Next.js SSR app on Deno Deploy | Deno Solve Advent of Code 2024 with Deno and Win Prizes! | Deno Deno v. Oracle: Canceling the JavaScript Trademark | Deno Deno 2.1: Wasm Imports and other enhancements | Deno Build a Typesafe API with tRPC and Deno | Deno Self-contained Executable Programs with Deno Compile | Deno Build a Database App with Drizzle ORM and Deno | Deno Introducing your new JavaScript package manager: Deno | Deno Announcing Growthbook on JSR | Deno Build an Astro site with Deno | Deno How to convert CommonJS to ESM | Deno Announcing Deno 2 | Deno The Final Touches: What’s New In v2.0.0-rc.10 | Deno Announcing Stable V8 Bindings for Rust | Deno Deno 2.0 Release Candidate | Deno Secure, efficient private npm registries with Cloudsmith and Deno | Deno Painting the Plane as We Fly It: Designing JSR | Deno Introducing Web Cache API support on Deno Deploy | Deno Deno 1.46: The Last 1.x Release | Deno Protect your cloud spend with new Deno Deploy spend limits | Deno What we got wrong about HTTP imports | Deno Benchmarking AWS Lambda Cold Starts Across JavaScript Runtimes | Deno Announcing Supabase on JSR | Deno Deno 1.45: Workspace and Monorepo Support | Deno Introducing KV Backup for Deno Subhosting | Deno A Gentle Intro to TypeScript | Deno Announcing Hono on JSR | Deno How We Made the Deno Language Server Ten Times Faster | Deno How the Guardian uses Deno to audit accessibility and performance across their 2.7 million articles | Deno Introducing More Flexible Domain Association for Deno Subhosting | Deno The stabilization process of the Standard Library has begun | Deno Deno 1.44: Private npm registries, improved Node.js compat, and performance boosts | Deno How we built a secure, performant, multi-tenant cloud platform to run untrusted code | Deno The Deno Standard Library is now available on JSR | Deno How to document your JavaScript package | Deno Your Low Code Solution Needs an Escape Hatch | Deno Deno 1.43: Improved Language Server performance | Deno How Slack used Deno to save months of engineering effort in launching their new platform | Deno JSR Is Not Another Package Manager | Deno Announcing the Hookdeck SDK on JSR | Deno Announcing the Neon Serverless Driver on JSR | Deno An intro to TSConfig for JavaScript Developers | Deno How we built JSR | Deno How Netlify used Deno Subhosting to build a successful edge functions product | Deno Introducing Simpler Project Creation in Deno Deploy | Deno Deno 1.42: Better dependency management with JSR | Deno Introducing deployctl, the command line interface for Deno Deploy | Deno Introducing JSR - the JavaScript Registry | Deno How to add Monaco to a Next.js app and securely run untrusted user code | Deno Survey Results and Roadmap | Deno Deno 1.41: smaller deno compile binaries | Deno Webhooks suck, but here are alternatives | Deno
What's coming to JavaScript | Deno
2025-06-27 · via Deno

Deno is a JavaScript company, and we believe JavaScript should be simple, powerful, and fun. Deno aims to modernize JavaScript and its tooling, with native TypeScript support, and bridging the gap between server-side and browser JavaScript with web standard APIs. As such, we’re very invested in advancing the JavaScript ecosystem and participate in standards committees like TC39, because we want JavaScript to be better and more effective for everyone.

TC39’s 108th meeting recently advanced 9 proposals across 4 stages, which represent rough ideas (stage 0) to fully standardized features (stage 4).

Here’s a brief summary of each and what that might mean for the future of JavaScript.

Stage 4

  • Explicit Resource Management (using)
  • Array.fromAsync
  • Error.isError

Stage 3

  • Immutable ArrayBuffer

Stage 2

  • Random.Seeded
  • Number.prototype.clamp

Stage 1

  • Keep Trailing Zeros
  • Comparisons
  • Random Functions

Advanced to stage 4

Explicit Resource Management (using)

The new using declaration (and its async variant await using) adds deterministic cleanup for resources, inspired by languages like C# and Python. Objects can define [Symbol.dispose]() (or [Symbol.asyncDispose]()) that is automatically called when a using block ends. For example:

class FileHandle {
  constructor(name) {
    this.name = name; 
  }
  [Symbol.dispose]() {
    console.log(`${this.name} closed`); 
  }
}
function readFile() {
  {
    using file = new FileHandle("data.txt");
    
  }
  
}
readFile(); 

This ensures cleanup (like closing files or streams) even if an exception occurs inside the block, making resource management easier and safer.

This feature is supported in Chrome 134, Firefox 134, and Deno v2.3.

In Deno you can already use the using keyword to manage resources like file handles (Deno.File), network sockets (Deno.Conn), and more. For example, here we stop a HTTP server automatically after having made a request to it:

using server = Deno.serve({ port: 8000 }, () => {
  return new Response("Hello, world!");
});

const response = await fetch("http://localhost:8000");
console.log(await response.text()); 

The Deno team is also interested in using the using keyword to simplify async context propagation through In fact, Deno’s support for async context propagation (stage 2) already enables us to do things like auto-instrumentation of console.log to include HTTP information. However, right now every time you want to create a new span to track some work, you need to create a new function and run it. This is cumbersome:

async function doWork() {
  const parent = tracer.startSpan("doWork");
  return parent.run(async () => {
    console.log("doing some work...");
    return true;
  });
}

The Deno team is proposing disposable AsyncContext.Variable, which would allow you to use the using keyword to simplify this code:

async function doWork() {
  using parent = tracer.startActiveSpan("doWork");
  console.log("doing some work...");
  return true;
}

See? Much less boilerplate!

Array.fromAsync

Array.fromAsync is like Array.from but works with async iterables, returning a Promise that resolves to the resulting array. It also supports a mapping function and thisArg, just like Array.from.

For example, given an async generator of values, you can write:

async function* generate() {
  yield await Promise.resolve(1);
  yield await Promise.resolve(2);
}
const nums = await Array.fromAsync(generate()); 

Here Array.fromAsync(generate()) returns a promise that resolves to [1, 2] once all yielded values are ready. This makes common async collection patterns much simpler and more readable.

Array.fromAsync is available in all browsers, as well as Deno v1.38 and Node v22.

Error.isError

Error.isError(value) is a new built‑in for reliably detecting error objects. It returns true if value is any kind of Error (including cross-realm or subclassed errors), and false otherwise. For example:

Error.isError(new TypeError("oops")); 
Error.isError({ name: "TypeError", message: "oops" }); 

While this is almost never needed, authoring certain code, such as some polyfills, can be difficult without this functionality.

Error.isError has support in all browsers, as well as in Deno v2.2.

Stage 3

Immutable ArrayBuffer

Immutable ArrayBuffer is now at Stage 3, introducing transferToImmutable() and sliceToImmutable() methods. Calling transferToImmutable() on a buffer moves its data into a new, unchangeable buffer and detaches the original. For example:

let buf = new ArrayBuffer(100);
let imm = buf.transferToImmutable();

console.log(buf.byteLength, imm.byteLength); 


imm[0] = 1; 

Similarly, sliceToImmutable(start, end) creates an immutable copy of a subrange. Immutable buffers cannot be detached or modified, which makes sharing binary data (e.g. across threads or workers) safer and more efficient.

We are planning to make use of this in Deno to optimize various APIs that take byte arrays as inputs, such as new Response() or Deno.writeFile(). This will allow us to avoid unnecessary copies and improve performance when working with binary data.

Stage 2

Random.Seeded

Current pseudo-random number generator methods (Math.random() for instance) are automatically seeded, making it not reproducible across runs or realms. However, there are times when you’d want a reproducible set of random values.

This proposal for a new SeededPRNG class provides reproducible randomness by allowing you to set a seed. You create a Random.Seeded(seedValue) object and use its .random() method instead of Math.random(). For example:

const prng = new Random.Seeded(42);
for (let i = 0; i < 3; i++) {
  console.log(prng.random());
  
}

This is useful in games or simulations where repeatability matters. You can also derive new seeds or clone state from an existing PRNG for complex scenarios.

Number.prototype.clamp

The Number.prototype.clamp(min, max) function (originally Math.clamp) returns a number bounded between min and max. This is handy for keeping values within a range. For example:

(5).clamp(0, 10); 

(-5).clamp(0, 10); 
(15).clamp(0, 10); 

If min > max, it throws a RangeError. This avoids verbose patterns like Math.min(Math.max(x, min), max) and clarifies intent.

Stage 1

Keep Trailing Zeros

New formatting options in Intl.NumberFormat will allow preserving or stripping trailing zeros in formatted numbers, which is useful for representing human-readable decimal values (e.g. money).

The trailingZeroDisplay: "auto" setting (default) keeps zeros according to the specified precision; "stripIfInteger" removes them when the number is an integer. For example:


new Intl.NumberFormat("en", {
  minimumFractionDigits: 2,
  trailingZeroDisplay: "auto",
})
  .format(1.5); 


new Intl.NumberFormat("en", {
  minimumFractionDigits: 0,
  trailingZeroDisplay: "stripIfInteger",
})
  .format(2); 

This gives developers finer control over number formatting (e.g. currency or fixed-point output) without ad-hoc string manipulation.

Comparisons

The Comparisons proposal aims to standardize how JavaScript produces human-readable representations of values — similar to util.inspect in Node.js or how test runners print diffs.

The goal is to give test frameworks and console tools a consistent way to generate diffs — especially across runtimes and realms.

Random Functions

This proposal introduces a new Random namespace with convenience methods to avoid common pitfalls with randomness. The methods in the Random namespace not only can generate random numerical values, but also accept and return collections.

Here are some examples:


Random.int(-5, 5); 


Random.number(0, 10); 


Random.number(0, 5, 0.1); 


const name = Random.take(["Alice", "Bob", "Carol"], 2); 


Random.take(["Alice", "Bob", "Carol"], 2, { replace: true }); 


Random.take(["Alice", "Bob", "Carol"], 2, { weights: [1, 1, 5] }); 


Random.sample(["Alice", "Bob", "Carol"]); 


Random.shuffle([1, 2, 3, 4]); 


const shuffled = Random.toShuffled([1, 2, 3, 4]);

The goal is to make random-related code safer and more concise, reducing off-by-one errors and improving consistency.

What’s next

TC39 continues to evolve and improve JavaScript to meet the needs of modern developers. Deno is committed to web standards and actively participates in these discussions to use JavaScript, which directly simplifies how you could write JavaScript in Deno (see async context propagation and our built-in OpenTelemetry API). The next TC39 meeting where these proposals will be further discussed is scheduled for late September.

🚨️ There have been major updates to Deno Deploy! 🚨️

and much more!

Get early access today.