JavaScript TC39 Process Stages Explained
The evolution of JavaScript is governed by Ecma International’s Technical Committee 39 (TC39), which uses a standardized five-stage process to review, refine, and implement new language features. This article outlines the distinct stages of the TC39 progression—ranging from Stage 0 (Strawman) to Stage 4 (Finished)—and explains the criteria required for a proposal to advance into the official ECMAScript specification.
Stage 0: Strawman
Stage 0 represents an initial, informal idea or submission for a new JavaScript feature. Anyone can submit an idea, provided they are registered as a contributor or member of TC39.
- Purpose: To start an open discussion about a potential addition to the language.
- Requirements: Minimal. An idea is simply presented to the committee.
- Outcome: The committee decides whether the problem is worth solving and if it warrants further investigation.
Stage 1: Proposal
Once an idea is accepted as worth exploring, it advances to Stage 1. At this point, the feature officially becomes a proposal and must have an assigned “champion” who is a member of TC39 responsible for guiding the feature forward.
- Purpose: To define the problem space, illustrate proposed solutions, and identify potential cross-cutting concerns.
- Requirements: High-level API design, illustrative usage examples, and identified edge cases.
- Outcome: The committee commits to spending time on the proposal and accepts its general shape.
Stage 2: Draft
In Stage 2, the proposal transitions from a conceptual design to a precise technical specification.
- Purpose: To write the initial formal specification using the formal ECMAScript language specification syntax.
- Requirements: A complete initial draft of the specification text. Major design decisions should be largely resolved.
- Outcome: The committee expects the feature to be developed and eventually included in the standard, though syntax and semantics may still undergo refinement.
Stage 3: Candidate
Stage 3 indicates that the proposal is essentially complete and ready for real-world testing and implementation by browser engines and developers.
- Purpose: To gather practical implementation feedback and validate the specification against real-world use.
- Requirements: Complete, finalized specification text. Sign-off from designated TC39 reviewers and the ECMAScript specification editor. At least two compatible implementations in experimental builds or polyfills.
- Outcome: The design is frozen. Changes at this point are restricted to critical bug fixes and corrections arising from implementation issues.
Stage 4: Finished
Stage 4 is the final stage, signifying that the feature is ready for official inclusion in the upcoming annual ECMAScript release.
- Purpose: To integrate the feature into the formal ECMAScript standard.
- Requirements:
- At least two independent, production-ready implementations passing all relevant tests.
- A comprehensive test suite contributed to the official Test262 repository.
- Final sign-off from the ECMAScript editor.
- Outcome: The pull request is merged into the official ECMAScript specification, and the feature becomes an official part of the JavaScript language.