1997 – 2026
JavaScript Versions
Every public release of ECMAScript — from ES1 in June 1997 through ES2026 (finalized December 2025) — with ship year and the headline language features per edition. Plus a feature-to-year lookup, an engine-support matrix, and the surrounding history: Brendan Eich's ten-day prototype, the JavaScript / Java naming dispute, the original engine wars, the ES4 collapse, the December 2009 ES5 detente, the June 2015 ES6 watershed, the TC39 stage process, and the Node.js fork-of-V8 lineage.
The 1995 origin and Brendan Eich's ten-day prototype
JavaScript was prototyped by Brendan Eich at Netscape over ten days in May 1995. Netscape needed a scripting language to embed in their browser; Marc Andreessen and the Netscape leadership wanted something that "looked like Java" because Java was the hot language at the time and Sun was a strategic partner. Eich was hired with the brief to build a Scheme-in-the-browser; once the strategic decision came down to ship a Java-syntax-flavored language instead, Eich did the design work in ten days against a hard ship deadline. The result was named Mocha, then LiveScript, then JavaScript — the last name was a marketing move to capitalize on Java's mindshare, not a technical lineage statement. The language shipped in Netscape Navigator 2.0 beta on September 18, 1995.
Eich's design under the ten-day deadline produced both the language's strengths (first-class functions, prototype-based objects, dynamic typing, garbage collection) and most of its long-running quirks (the == coercion rules, typeof null === "object", automatic semicolon insertion, the var function-scope model). Many of the language's modern revisions are about working around or around the original ten-day decisions. Eich has been candid about this in talks and interviews: the brief said "make it look like Java," the deadline was non-negotiable, and the design committee was him.
JScript and the original engine wars
Microsoft reverse-engineered JavaScript and shipped JScript in Internet Explorer 3.0 in August 1996. The two implementations diverged immediately on subtle semantic edges; web developers spent the next decade writing browser-specific code paths because the same JavaScript could behave differently between Netscape and IE. Netscape submitted the language to Ecma International in November 1996 to produce a vendor-neutral standard; the result was ECMAScript Edition 1 in June 1997. The "ECMAScript" name was the standards-body compromise — "JavaScript" was a Sun-trademarked name licensed to Netscape, "JScript" was Microsoft's preferred name, and Ecma needed something neither side could veto.
The ES4 collapse and the seven-year freeze (2003–2008)
After ES3 in December 1999, the TC39 committee began work on a much more ambitious ECMAScript 4 — classes, packages, namespaces, optional static typing, generators, an enhanced type system. Mozilla and Adobe (using their ActionScript 3.0 implementation, which was already a partial ES4) backed the design; Microsoft and Yahoo argued ES4 was too ambitious, would fragment the language, and risked breaking the web. The argument ran for years.
The committee deadlocked. In August 2008, after multiple failed attempts at consensus, TC39 split the work into two tracks: a small editorial-and-cleanup release that would become ES5 (December 2009), and an ambitious longer-horizon project codenamed Harmony that would eventually ship as ES6 / ES2015 in June 2015. ES4 itself was abandoned. Most of its design ideas survived into ES6 and beyond — classes, modules, destructuring, default parameters — but the seven-year-zero-edition gap is the largest in the language's history and shaped how every TC39 process decision since has been made (smaller scope, shorter cycles, Stage-gated proposals, no big-bang releases).
The TC39 stage process
The post-ES6 TC39 process is structured around five stages for every proposed language addition:
- Stage 0 — Strawperson. Anyone can submit; the proposal is in the conversation.
- Stage 1 — Proposal. A champion takes ownership; the committee accepts the problem is worth solving.
- Stage 2 — Draft. Initial spec text and one experimental implementation; the design is "probably going to ship something like this."
- Stage 3 — Candidate. Spec text is complete; engines are expected to implement and gather feedback. Most TC39 features that ship in any given year were at Stage 3 the year before. Most TypeScript compiler features at this level land in TS via the Stage-3 implementation pipeline.
- Stage 4 — Finished. Implementations exist in two engines, the spec text has been approved, and the proposal is included in the next year's edition. The March TC39 plenary is the cutoff for the June ratification.
The cadence: Stage 4 by March → Ecma General Assembly ratifies in June → spec snapshot pinned at tc39.es/ecma262/<year>/. Most modern editions have 5–15 finished proposals.
The engine lineage
Four major JavaScript engines have shaped the modern landscape:
- SpiderMonkey (Mozilla) — the original engine, descendant of Brendan Eich's 1995 prototype. Written in C++ with a JIT (IonMonkey, then WarpMonkey). Powers Firefox.
- V8 (Google) — built by Lars Bak at Google's Aarhus office for Chrome's launch in September 2008. Open-source from day one (BSD), JIT-driven (TurboFan, Maglev, Sparkplug), the engine that turned JavaScript performance into a serious cross-vendor competition. Now powers Chrome, Node.js, Microsoft Edge (since January 2020), Opera, Brave, Cloudflare Workers, Deno, and most of the rest of the modern V8-derived ecosystem.
- JavaScriptCore / Nitro (Apple) — powers Safari and the WebKit web view used in every iOS app. Less aggressively marketed than V8 but technically peer; the FTL JIT and B3 backend produce competitive numbers.
- Chakra (Microsoft) — powered Internet Explorer 9 through 11 and the original (2015–2020) Edge. Discontinued when Microsoft adopted Chromium / V8 for Edge in January 2020. The engine wars effectively ended at that point: every major modern browser uses a V8 / SpiderMonkey / JavaScriptCore engine, and V8 has the largest share by a wide margin.
Smaller specialized engines exist alongside: Hermes (Meta, for React Native), QuickJS (Fabrice Bellard's tiny embeddable engine), Boa (Rust implementation), Engine262 (TC39's reference interpreter for spec testing).
Node.js — JavaScript on the server (2009–)
Ryan Dahl announced Node.js at JSConf EU on November 8, 2009 — V8 (Google's then-newish JavaScript engine) wrapped in an event-loop runtime designed for non-blocking I/O. The pitch: write the same language on both ends of a network connection, with concurrency handled by the event loop instead of by threads. The combination caught on faster than anyone expected. Within five years, Node.js had reshaped the back-end JavaScript ecosystem, the browser-tooling ecosystem (every modern frontend toolchain runs on Node), and effectively created the npm package-management universe that has now cleared more than two million packages. Dahl handed off Node.js to the community and OpenJS Foundation; he later founded Deno in 2018 as an attempt to retry the design with the lessons learned. Bun (Jarred Sumner, 2022) is a third attempt with a Zig-based runtime, JavaScriptCore instead of V8, and a much faster cold-start path.
People who actually shaped JavaScript / ECMAScript
Origin and language design: Brendan Eich (Netscape, 1995; the ten-day prototype; later co-founded Mozilla and Brave); Marc Andreessen (Netscape co-founder; the strategic decision to make the language Java-syntax-flavored).
TC39 chairs and editors: Allen Wirfs-Brock (long-serving editor through the ES5 / ES6 era), Brian Terlson (editor through the early-annual era), Bradley Farias and Daniel Ehrenberg (modern co-editors), Rob Palmer and Yulia Startsev (recent TC39 co-chairs). Champions of long-running modernizations include Mark Miller, Allen Wirfs-Brock, Waldemar Horwat, Daniel Ehrenberg, Jordan Harband, Mathias Bynens, and many others.
Engines: Lars Bak (V8 architect, ex-Sun HotSpot lineage), Andreas Rossberg and the Mozilla SpiderMonkey lineage, Filip Pizlo and the JavaScriptCore / FTL JIT team. Server-side / runtimes: Ryan Dahl (Node.js, Deno), Jarred Sumner (Bun). The community of proposal champions who actually drag features through the Stage process — the per-proposal author lists in the TC39 finished-proposals repository are the canonical credit list.