JavaScript timeline
Free JavaScript reference · Python timeline
JavaScript syntax and features timeline
Follow JavaScript from ES2015 to the latest published edition.
Explore twelve ECMAScript editions in order. Each free lesson explains useful syntax and built-in APIs, with examples, expected output, and common mistakes. ES2015 is also called ES6. This is a curated guide; the linked specifications define the complete editions.
Know variables, conditions, loops, and functions before starting. New to JavaScript? Start with Foundations. Browser APIs such as the DOM and fetch are separate from ECMAScript, and TypeScript has its own additional syntax.
Jump to edition
ES2015 ES2016 ES2017 ES2018 ES2019 ES2020 ES2021 ES2022 ES2023 ES2024 ES2025 ES2026
Standardization and implementation happen on different schedules. A browser may ship a feature before its edition is published, while another engine may add it later. Draft proposals are not automatically part of the latest published standard.
Edition 6 · June 2015
Block-scoped variables, arrow functions, templates, destructuring, collections, promises, classes, and modules reshape everyday JavaScript.
Editorial review October 26, 2026 · Published specification
Edition 7 · June 2016
Exponentiation makes powers explicit, and includes supplies a membership test that can find NaN.
Editorial review October 26, 2026 · Published specification
Edition 8 · June 2017
Async/await improves promise-based control flow, objects gain entry/value views, and text padding becomes a built-in operation.
Editorial review October 26, 2026 · Published specification
Edition 9 · June 2018
Object rest/spread collects or copies properties, promise finally handles cleanup, and asynchronous iteration becomes language syntax.
Editorial review October 26, 2026 · Published specification
Edition 10 · June 2019
Array flattening, object construction from entries, and optional catch bindings simplify common transformations.
Editorial review October 26, 2026 · Published specification
Edition 11 · June 2020
Optional chaining, nullish defaults, BigInt, and allSettled make absence and asynchronous outcomes more explicit.
Editorial review October 26, 2026 · Published specification
Edition 12 · June 2021
Logical assignment avoids repeated access, replaceAll handles every occurrence, and Promise.any resolves on the first fulfillment.
Editorial review October 26, 2026 · Published specification
Edition 13 · June 2022
Private fields and public class fields arrive with at(), Object.hasOwn(), and top-level await in modules.
Editorial review October 26, 2026 · Published specification
Edition 14 · June 2023
Copying array methods and findLast help preserve input data and search from the end.
Editorial review October 26, 2026 · Published specification
Edition 15 · June 2024
Object.groupBy and Map.groupBy aggregate data, while Promise.withResolvers packages a promise with its settlement functions.
Editorial review October 26, 2026 · Published specification
Edition 16 · June 2025
Iterator helpers, Set operations, RegExp.escape, and Promise.try add useful building blocks without changing browser support overnight.
Editorial review October 26, 2026 · Published specification
Edition 17 · June 2026
Async collection, Map upserts, byte codecs, precise summation, JSON source access, error checks, and iterator sequencing join the standard.
Editorial review October 26, 2026 · Published specification