JS ECMAScript 2026

ECMAScript 2026 introduces new language features and improvements. Explore what’s new in the latest specification.

On this page

JS ECMAScript 2026

ECMAScript is the standardized specification behind JavaScript. The language evolves through a public proposal process (TC39), then ships in engines (Chrome/V8, Firefox/SpiderMonkey, Safari/JavaScriptCore) and finally appears as an annual ECMAScript edition.

Status note: ECMAScript 2026 is still an evolving draft. In practice, you should use feature detection and compatibility checks before relying on any “ES2026” feature in production. The last fully published edition listed by Ecma International is ECMAScript 2025 (June 2025).

How JavaScript Features Become “ES2026”

  • Proposals: New features start as proposals and move through stages (0 → 4).
  • Stage 4: Considered “finished” and eligible for inclusion in the next standard snapshot.
  • Shipping: Engines may ship features before/after the annual edition; always check browser support.

Use these approaches to stay safe:

  • Feature detection (check if a global or syntax exists)
  • Progressive enhancement (fallback code path)
  • Transpilers (Babel/TypeScript) when appropriate

What's Worth Knowing “Now” (ES2026 Draft Highlights)

A notable modern feature associated with the ES2026 timeframe is Explicit Resource Management, introducing using and await using for deterministic cleanup of resources (with Symbol.dispose / Symbol.asyncDispose and stacks like DisposableStack).

Explicit Resource Management: using / await using

Some resources must be cleaned up explicitly (locks, file handles, streams). Traditionally, this required try...finally. The using declaration provides automatic disposal when a block ends.

// The object should implement Symbol.dispose
class Lock {
  constructor() { console.log("lock acquired"); }
  [Symbol.dispose]() { console.log("lock released"); }
}

{
  using _lock = new Lock();
  console.log("do work");
} // disposed here automatically

await using is for async cleanup (objects implementing Symbol.asyncDispose).

// The object should implement Symbol.asyncDispose
class AsyncResource {
  async [Symbol.asyncDispose]() {
    console.log("async cleanup");
  }
}

(async () => {
  {
    await using r = new AsyncResource();
    console.log("do async work");
  } // disposed here (awaited)
})();

Because support varies across environments, always check availability. Note: syntax like using cannot be reliably “feature detected” without parsing support, so you typically rely on target environments or transpilers.

Compatibility Strategy

When a feature is new, these are common strategies:

  • Use only in environments you control (modern Node/browsers).
  • Use Babel/TypeScript when you ship to diverse browsers.
  • Avoid syntax that breaks parsing if you cannot guarantee support.

Where to Track ES2026 Progress

  • TC39 Proposals: which features are being considered
  • Finished Proposals: what reached Stage 4 and is likely to land
  • MDN: practical docs + compatibility notes per feature

Practical Rule of Thumb

Instead of thinking “I will use ES2026”, think: “I will use features supported by my target browsers/Node version (or safely transpiled)”. Keep your code modern, but ship only what your users can run.

Next Step

Continue with JS Versions for a clean overview from ES3/ES5 to ES2015+ and the modern yearly editions.

JS ECMAScript 2026 Examples (8)