1997 – 2027
JavaScript Versions
Every public release of ECMAScript — from ES1 in June 1997 through ES2027 (the in-flight 18th edition, with Temporal and explicit resource management) — 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 wanted a programming language embedded in HTML, in source form — by Eich's own account that push came from client engineering management (Tom Paquin, Michael Toy, Rick Schell) together with Marc Andreessen, so it was never a case of Eich selling the idea upward. The narrower constraint that the language must "look like Java" was a separate diktat from upper engineering management, and it is the one that ruled out Scheme along with Perl, Python and Tcl. Sun's Bill Joy was, in Eich's telling, the champion on the Java side of an easy-to-use scripting language as a companion to Java. Eich had been recruited to Netscape on the promise of "doing Scheme" in the browser; once the look-like-Java constraint came down, he did the design work in ten days against a hard ship deadline. The prototype was named Mocha in Eich's own account, and the language reached the public as JavaScript — a marketing move to capitalize on Java's mindshare, not a technical lineage statement. The widely-repeated intermediate name LiveScript is retrospective usage: it appears in none of Netscape's 1995 press releases, including the four issued the day Navigator 2.0 was announced. The naming and the shipping are two separate dates, and so are the announcement and the download — all three get collapsed onto one. Netscape introduced Navigator 2.0 on September 18, 1995, and that day's press release says the public beta “will be available next week” — it does not name a scripting language at all. The JavaScript name first appears in the joint Netscape / Sun announcement of December 4, 1995, which places the first release in “the beta version of Netscape Navigator 2.0, which is currently available for downloading” — giving no beta number, and describing JavaScript as a new announcement rather than a rename. Which beta first carried which name is not settled by Netscape's own record.
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 (2003–2008) and the ten-year edition freeze
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 ten-year gap with no new edition at all — December 1999 to December 2009 — 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 six stages for every proposed language addition — a strawperson stage plus five maturity stages. The committee has to approve every advancement:
- Stage 0 — Strawperson. Any TC39 delegate, or a non-delegate registered through Ecma International, can put an idea in the conversation. No acceptance criteria at all.
- Stage 1 — Proposal. A champion takes ownership, the committee accepts the problem is worth solving, and a public repository exists describing the problem and the general shape of a solution. The work of the stage is designing that solution.
- Stage 2 — Draft. The committee has chosen a preferred solution and there is initial spec text covering the major semantics — placeholders and TODOs still allowed. The work is refining details (property names, ordering of observable effects, invalid inputs) and producing throwaway polyfills to pressure-test the design.
- Stage 2.7 — Testing. Spec text is complete and both the assigned reviewers and the editor group have signed off; the work is building a rigorous Test262 suite to validate it. Added to the process document in December 2023 — it splits apart the two things Stage 3 previously meant at once, "the design is finished" and "engines should start shipping it."
- Stage 3 — Candidate. Recommended for implementation: the tests exist, and engines are expected to ship the feature and report back web-compatibility or integration problems. Changes at this point come from the field, not from the committee. Most TC39 features that ship in any given year were at Stage 3 the year before.
- Stage 4 — Finished. Two compatible implementations pass the Test262 acceptance tests, there is significant in-the-field experience, and the integrated spec-text pull request has editor-group sign-off. The March TC39 plenary is the cutoff for the June ratification. Advancement is sometimes granted conditionally, pending test coverage or editor sign-off, and those conditions can take a year to clear — explicit resource management was conditionally advanced in May 2025 and only cleared unconditionally in May 2026.
The cadence: candidate draft cut on February 1 → Stage 4 proposals folded in at the March plenary → Ecma General Assembly ratifies in June → spec snapshot pinned at tc39.es/ecma262/<year>/. A modern edition is a handful of finished proposals rather than a big-bang release. Per-stage entrance criteria are in the TC39 process document.
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 and a small team in Aarhus, Denmark. Google hired Bak in the autumn of 2006 for a then-secret browser project; with no Google office in Aarhus, the work started in an outbuilding on his farm, and the team moved into a Google building there only once it had grown. Open-sourced the day Chrome launched — September 2, 2008 — under 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 (an implementation of ECMA-262 written in JavaScript, aimed at 100% spec compliance and introspection rather than speed — the practical way to actually run a proposal before any production engine has it; it is a community project, not an official TC39 deliverable).
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, whose registry now holds more than five 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, with client engineering managers Tom Paquin, Michael Toy and Rick Schell, on the decision to embed a programming language in HTML at all; Bill Joy (Sun), whom Eich credits as the champion on the Java side of a scripting-language companion to Java. Eich attributes the "must look like Java" constraint itself to unnamed upper engineering management rather than to any one person — a distinction worth keeping, because it is routinely collapsed into a single origin story.
TC39 chairs and editors: Allen Wirfs-Brock, named in the spec itself as ECMA-262 6th Edition project editor — the one who carried ES2015 to publication; Brian Terlson, project editor from the 7th Edition (ES2016) through ES2019. The current ECMA-262 editor group is Ron Buckton, Michael Ficarra, Richard Gibson, Linus Groh, Shu-yu Guo, and Nicoló Ribaudo; Ecma lists the TC39 chair group as Chris de Almeida and Rob Palmer. For proposal champions the authoritative record is the champion column of the finished-proposals list itself, which names them per proposal rather than by reputation; recurring names across many editions include Jordan Harband, Mathias Bynens, Kevin Gibbons, Daniel Ehrenberg, Michael Ficarra, Shu-yu Guo and Rick Waldron, with Mark Miller championing WeakRefs.
Engines: Lars Bak (V8 architect, ex-Sun HotSpot lineage), Andreas Rossberg (formerly V8's JavaScript language-team lead at Google; WebAssembly co-designer and spec author), the Mozilla SpiderMonkey lineage that descends from Eich's original engine, Filip Pizlo and the JavaScriptCore / FTL JIT team. Server-side / runtimes: Ryan Dahl (Node.js, Deno), Jarred Sumner (Bun).