The TC39 Stage Process

How a proposal advances through five stages (0-4) toward becoming a standardized ECMAScript feature, and the compatibility responsibility each stage implies.

Purpose

TC39 (Technical Committee 39) is the standards body that maintains ECMAScript. Every language feature — from let to top-level await — passed through this same staged process before shipping.

The stages

  • Stage 0 (Strawperson): an idea, not yet a formal proposal.
  • Stage 1 (Proposal): the problem is well-defined and a champion (a TC39 member) is assigned to drive it.
  • Stage 2 (Draft): initial specification text exists; syntax and semantics are roughly settled but still expected to change.
  • Stage 3 (Candidate): specification text is complete; engines implement it experimentally to surface real-world issues before finalizing.
  • Stage 4 (Finished): ready for inclusion in the next yearly ECMAScript revision; requires at least two independent, conformant implementations.

Behavior notes

  • Advancement requires committee consensus at each stage, not just the champion’s judgment — designed to catch problems before they become permanent.
  • Once a feature reaches Stage 4 and ships, removing or incompatibly changing it becomes essentially impossible in practice — “don’t break the web” is a hard constraint the committee takes extremely seriously, even for features later considered a design mistake.
  • A Stage 3 proposal can still change in response to implementation experience, though rarely in ways that break early adopters completely.

Common mistakes

  • Treating a Stage 2 or 3 proposal as production-safe without a fallback plan.
  • Assuming a proposal’s syntax is final before Stage 3 — Stage 1 and 2 proposals commonly change their concrete syntax while the underlying idea stays stable.

Runtime notes

A governance process, not a runtime behavior — applies to how the language itself evolves, not to any specific engine.

Taught in these lessons

Updated 2026-09-03