A Brief History of JavaScript
(Originally published on deno.com/blog.)
This year, JavaScript turns 30.
Within three decades, JavaScript went from being a weird little scripting language developed in 10 days to the world’s most popular programming language. Here are some key moments in its history to show how JavaScript has evolved and where it is headed.
1994
March 2012
Webpack, a module bundler, is introduced
Webpack allowed developers to import anything to the client-side and eventually became the core build system behind React, Angular, Vue, and more. It laid the groundwork for Rollup, Parcel, Vite, and esbuild.
October 2012
Microsoft makes TypeScript 0.8 available for the public
In 2010, Anders Heljsberg (who also created C# and Turbo Pascal) began developing a static typed superset of JavaScript, named TypeScript. The goal of this project was to make it easier to write and maintain JavaScript at scale. In 2012, Microsoft makes it available for the public. TypeScript paved the way for enterprise-grade development in the JavaScript ecosystem, influenced the design of ECMAScript itself, and changed how large applications are built with JavaScript.
function add(x: number, y: number): number {
return x + y;
}2013
March 2013
The first commit to Atom Shell (later renamed to Electron) was created
Atom Shell (renamed to Electron in 2015) lowered the barrier to building cross-platform desktop applications by using web technologies like HTML, CSS, JavaScript. It uses Node.js and Chromium, so developers could access the filesystem, network, and native OS APIs. Originally built to power GitHub’s Atom text editor, which launched in public beta in April 2014, Atom Shell was used by some high profile early adopters, such as Slack. This framework played a pivotal role in ushering in an era where web technologies could be used to create desktop applications.
February 2013
Mozilla releases asm.js
asm.js is a strict subset of JavaScript designed to bring near-native performance to the web. Before, JavaScript was not considered suitable for CPU-intensive applications like 3D games and video processing. Developers could convert C/C++ code to asm.js, allowing for existing native applications to run in the browser. This was a huge step forward in the evolution of JavaScript as a serious runtime for computationally expensive applications, and paved the way for WebAssembly a few years later.
(function Module(stdlib, foreign, heap) {
"use asm";function add(x, y) {
x = x | 0;
y = y | 0;
return (x + y) | 0;
} return { add: add };
})(this, {}, new ArrayBuffer(1024));console.log(Module.add(10, 20)); // Outputs: 30
April 2013
Valeri Karpov coins the term “MEAN” stack
The MEAN stack represents a full stack JavaScript framework that includes MongoDB, Express.js, AngularJS, and Node.js. This terminology became highly influential in shaping modern JavaScript-based web development.
May 2013
Facebook releases React
React, created by Jordan Walke, a software engineer at Facebook (now Meta), is a JavaScript library for declaratively building user interfaces. It was first introduced in the Facebook Newsfeed in 2011, and open sourced for the public in May 2013 at JSConf US. React’s component-driven approach for building interfaces solidified declarative UI patterns used in apps today.
June 2013
Work on ESLint begins
Nicholas C. Zakas, a prominent JavaScript developer and former lead developer of the Yahoo! User Interface Library (YUI), began work on ESLint, a pluggable and configurable linter tool for identifying and fixing problems in JavaScript code. ESLint quickly became a crucial tool for JavaScript developers, addressing limitations in existing linting tools and setting new standards for code quality and consistency.
July 2013
Gulp is released
Eric Schoffstall releases Gulp.js, a streaming build system for automating tasks in web development. Gulp introduced a new way to handle repetitive tasks like minification, compilation, linting, and testing by using a simple, code-centric approach. It quickly gained popularity as a powerful, code-centric alternative to older task runners like Grunt, which was configuration-heavy, and influenced the evolution of modern build tools.
2014
February 2014
Vue.js is released
Evan You, a former Google engineer, releases Vue.js, a progressive JavaScript framework for building user interfaces. Unlike other frameworks of its time, Vue.js was designed to be approachable, incrementally adoptable, and highly performant, making it one of the most popular and influential frameworks in the modern JavaScript ecosystem.
July 2014
Strongloop purchases open source framework Express
StrongLoop (co-founded by Deno co-founder, Bert Belder), a company specializing in enterprise-grade Node.js solutions, acquired the rights to Express.js, with the goal of integrating it into a broader suite of tools focused on APIs and microservices. The community felt that Express’s independence would be lost in the acquisition, which led to creating other frameworks such as Koa. Later, IBM acquired StrongLoop in 2015, and in 2019, Express.js joined the OpenJS Foundation, securing its governance and ensuring its long-term sustainability. After 10 years of being at Express 4.x, Express 5 was finally released in October 2024.
September 2014
The first commit to Babel.js is created
Originally named 6to5, Babel.js is a JavaScript compiler that allows developers to write modern JavaScript and make it backwards-compatible for older browsers and engines. Babel soon established itself as a standard tool in the ecosystem, being integrated into popular frameworks like React, Vue, and Angular, as well as module bundlers like Webpack, Rollup, and Parcel.
October 2014
Meteor reaches 1.0
Meteor made a splash in web development communities for being a radically simpler way to build real-time, JavaScript-only, full-stack applications. It played a major role in shaping how developers thought about building modern, reactive, real-time web applications. Although Meteor’s overall popularity waned as the ecosystem evolved, it’s influence can be seen in React, Redux, Firebase, GraphQL, and more.
November 2014
Facebook launches Flow, a static type checker for JavaScript
Flow is a static type checker for JavaScript that helps developers catch bugs and type errors during development. Facebook developed it as a way to better maintain its massive codebase and improve developer productivity. By the late 2010s, however, TypeScript became the dominant typed JavaScript language, leading to the decline of Flow.
November 2014
Amazon announces AWS Lambda, powered by Node.js
Amazon Web Services, already a market leader in cloud computing, introduces a new serverless paradigm with Lambda, which allows developers to upload code and run it in response to events without provisioning infrastructure. At launch, Lambda functions only supported JavaScript with Node.js, thanks to Node.js’s event-driven, non-blocking model that fit well with Lambda’s stateless and short-lived execution environment. The arrival of AWS Lambda introduced the concept of Function-as-a-Service and kicked off a serverless computing movement, with Google and Microsoft launching their own versions a year or two later.
December 2014
Fedor Indutny creates io.js, a fork of Node.js
Node.js, maintained by Joyent at the time, had slow releases and lacked support for modern JavaScript features due to being on an outdated version of V8. Many developers became frustrated that Node.js wasn’t evolving fast enough, especially compared to the rapid progress in the browser and frontend world. Thus, the fork io.js was created. The intention is to merge io.js back into Node.js later.
2015
2015
The term “Jamstack” is coined by Matt Biilmann, CEO of Netlify.
Jamstack (”Jam” an acronym for JavaScript, API, and Markup) is a web development architecture pattern for frontend web development that offers better performance, scalability, and developer experience. This marks the start of a new era in modern web development where developers are moving away from SPA-architectures and more towards SSR and SSG.
February 2015
The Node.js Foundation is introduced.
Under the umbrella of the Linux Foundation, the Node.js Foundation was established to advance the development and adoption of Node.js by resolving project fragmentation. At the time, io.js, a prominent fork of Node.js, was managed by a group of former Node.js contributors seeking faster releases and better governance, which was merged back into Node.js in June 2015. The Node.js foundation had the support of major tech companies, such as IBM, Microsoft, PayPal, Intel, Fidelity, Joyent, and the Linux Foundation.
September 2015
GraphQL, a query language for APIs, is launched
Facebook began development on GraphQL in 2012 as a data query language that can be used declaratively. GraphQL offered a new way to access and mutate data, with fewer trips to the server and strong typing.
June 2015
Redux is released
With more and more developers building apps using React, the need for managing state rose. Redux, a predictable state container, was released to help. Now, Redux can be used with a wide variety of JavaScript frameworks.
June 2015
Web assembly is released
Web assembly aimed to solve the performance limitations of JavaScript in the browser. It enabled high speed execution of code intensive applications, like games, video editing, and more. It also addressed the need for a portable, secure way to run code written in languages like C/C++ on the web.
June 2015
Atom, a “hackable” text editor, is released
Atom was one of the first highly extensible desktop editors built entirely on web technologies. It emphasized deep customization, letting developers tweak everything from the UI to the core behavior with packages and themes. Not only did Atom validate Atom Shell (now known as Electron) as a framework for developing cross-platform desktop applications, it shifted how developers thought about text editors from tools to platforms. It inspired a wave of modern, extensible, web-powered tools such as VS Code, which adopted and refined many of Atom’s core ideas.
Atom 1.0 was released with this retro announcement video from GitHub.
July 2015
ECMAScript 6 (ES2015) is released
With the release of ES6, JavaScript finally got many of the features that developers had been asking for, like the fetch API and ESM native module system with import and export.
<script type="text/javascript">
function getData() {
fetch("https://api.example.com/data")
.then(response => {
if (!response.ok) {
throw new Error("Network response was not ok: " + response.status);
}
return response.text(); // or response.json() for JSON APIs
})
.then(data => {
document.getElementById("result").textContent = data;
})
.catch(error => {
console.error("Fetch error:", error);
alert("Error fetching data.");
});
}
}<button onclick="getData()">Fetch data</button>
<div id="result">Waiting for response...</div>September 2015
Node.js v0.12 and io.js merge to form Node.js v4.0
Node.js v4.0 represents countless hours of work in both the Node.js and the io.js project that is combined in a single codebase. The merger, which brings to close a fractured community in which many npm modules became incompatible with one or the other runtime, also brought a Long-Term support schedule and a new semantic versioning scheme. The success of the merger demonstrated the power of open governance and community collaboration.
2016
January 2016
Microsoft open sources Edge’s Chakra JavaScript engine
Microsoft aimted to attract external contributors and increase adoption beyond their Edge browser by open sourcing Chakra. It attracted significant initial interest from developers, and Microsoft even released a version of Node.js running on Chakra. However, V8 remained the dominant engine, largely due to its massive community and extensive tooling. By 2021, Microsoft announced the deprecation of Chakra, ceasing active development, as Microsoft began transitioning to the Chromium-based Edge that relied on the V8 engine.
March 2016
Azer Koculu removes Leftpad from npm, inadvertently leading to a supply chain attack on the order of millions of users impacted
Commonly known as the “npm Leftpad incident”, Azer removes left-pad from npm after a dispute with Kik Messenger. As a result, thousands of projects using left-pad as a dependency, including React and Babel, were unable to be built or installed. This created a huge disruption across major technology corporations, such as Meta, Netflix, Spotify, and highlighted the staggering magnitude that a supply chain vulnerability might have in the JavaScript ecosystem. Since then, npm changed its policy to limit a users’ ability to remove their package.
April 2016
Microsoft releases VSCode 1.0, a lightweight, fast, cross-platform IDE
Not only was it built on web technologies (Electron, TypeScript), but offered first-class JavaScript and TypeScript support. It quickly disrupted Sublime Text, Atom, and other full IDEs.
Microsoft announcing VSCode at the Microsoft Build conference in 2015.
June 2016
ECMAScript 2016 is released, with exponential operator (**) and array.includes() method
September 2016
Angular (Angular2) is released
Angular was a complete reimagining of the original AngularJS framework, written from scratch to address many of the original framework’s shortcomings. Some key differences include replacing the Model-View-Controller with a component tree structure, embracing TypeScript which allowed for better overall tooling, and Ahead-of-Time compilation for performance and security. Angular became a top choice for large-scale enterprise applications due to its structure and opinionated framework.
October 2016
Next.js 1.0 is released
Next.js began as a small framework for server-rendered universal JavaScript web applications, built on React, Webpack, and Babel. Next.js paved the way for full-stack React apps by making server-side rendering with React simple. With Next.js, developers can use React for content heavy, SEO-focused websites. This framework eventually becomes the default framework for production-grade React apps.
2017
March 2017
The initial commit for the Temporal proposal is created
The Temporal proposal was introduced as a solution to long-standing issues with the built-in Date object in JavaScript, such as lack of immutability, lack of time zone and day light savings time support, and inconsistent parsing. In 2021, the Temporal proposal was approved for inclusion in the ECMAScript standard. However, today, the only environments that support the Temporal API is Firefox Nightly and Deno.
April 2017
Prettier 1.0 is released
Prettier, an opinionated code formatter that enforces a consistent code style by parsing code and reprinting it with its own set of rules, aimed to reduce time wasted in code reviews that were plagued by inconsistent formatting. Tools like ESLint were focused on detecting issues, but they did not automatically fix formatting, which Prettier introduced. Prettier also promoted a write first, format later workflow, leading to cleaner code and collaboration. It’s impact extended beyond JavaScript: Python projects adopted Black, and Rust added a formatter as part of its toolchain, treating formatting as a non-negotiable build step.
June 2017
ECMAScript 2017 is released with string padding, Object.entries(), Object.values(), async functions, and more
By 2017, browser support for fetch() was strong across all modern browsers (except IE11), and many developers were using async/await (with and without Babel).
<script>
async function getData() {
try {
const response = await fetch("https://api.example.com/data");if (!response.ok) {
throw new Error("HTTP error " + response.status);
} const data = await response.text(); // or response.json() for JSON
document.getElementById("result").textContent = data;
} catch (error) {
console.error("Fetch failed:", error);
alert("Something went wrong!");
}
}
</script><button onclick="getData()">Load Data</button>
<pre id="result">Waiting for response...</pre>
September 2017
Facebook launches Yarn, a new package manager
Yarn was created to address pain points of npm at the time: speed, reliability, and consistency. Yarn introduced concepts such as deterministic dependency resolution with yarn.lock, auto-caching packages, parallelized installs, and more.
September 2017
Cloudflare launches Cloudflare Workers, allowing developers to run JavaScript at the edge
Cloudflare Workers ushers in the modern era of serverless edge computing by combining serverless principles with edge distribution (at the time with around 100 data centers and now with over 300) and fast, scalable isolation. Edge distribution meant serverless code can be executed close to end users, minimizing latency. Cold start times were also minimized, as Cloudflare Workers is built on lightweight V8 isolates (instead of containers or micro-VMs). The arrival of Cloudflare Workers not only transformed Cloudflare from a CDN company offering security and performance for websites to a full web application platform. This also paved the way for other platforms to add isolate-based edge functions, such as Netlify, Vercel, and Deno Deploy.
2018
January 2018
Google releases Puppeteer 1.0, marking a major milestone in browser automation tools
Unlike other browser automation tools like Selenium that required multiple language bindings, Puppeteer was built specifically for Node.js, offering a more modern, JavaScript-first API to control headless Chrome. Puppeteer’s release established Chromium as the default browser engine for automation, led to the decline of PhantomJS, and influenced the development of frameworks like Playwright and Cypress.
March 2018
TensorFlow.js is released, bringing machine learning to the browser via WebGL or WebGPU without needing compute
TensorFlow was released by Google in 2015 as an open-source machine learning (ML) network, and quickly became the go-to tool for ML research. TensorFlow.js lowered the barrier to entry for web developers to implement ML models without Python, as well as embedding ML models into web apps, unlocking real-time predictions and browser-based AI applications.
June 2018
ECMA TC39 “Smooshgate” was resolved by renaming flatten to flat
In 2018, TC39 proposed adding a new method to JavaScript arrays called flatten to flatten nested arrays. However, this name clashed with an existing method used by the popular JavaScript library, MooTools, which defined that method in a way that was incompatible with the proposed implementation. In response, some TC39 members jokingly suggested renaming the method from flatten to smoosh. While not meant to be taken seriously, it gained traction in discussions and memes.
June 2018
Ryan Dahl teases a new project in a talk about his regrets about Node
In 2018, Ryan Dahl announced a new JavaScript runtime named “Deno” (an anagram of Node) during his widely viewed talk “10 things I regret about Node”.
October 2018
ECMAScript 2018 is released with rest/spread properties, async iteration, promise.finally(), and more
2019
March 2019
The JavaScript Foundation and the Node.js Foundation merge to form the OpenJS Foundation
At the time, the JavaScript open source ecosystem had been fragmented across multiple foundations, each managing different projects. There was the Node.js Foundation focused on Node.js and server-side JavaScript. Then, there was the JavaScript Foundation, (formerly the jQuery Foundation), which managed client-side libraries like jQuery, ESLint, and Lodash. Both foundations were operating independently, resulting in overlapping resources and fragmented support for JavaScript projects. However, with Node.js becoming the de facto backend runtime for JavaScript and the growth of frontend libraries, the merger aimed to unify governance and support JavaScript as a whole.
April 2019
Node.js added experimental support for ECMAScript modules in v12.0.0
As JavaScript adopted ES modules as a way to modularize and share code, Node.js slowly follows suit. In v12.0.0, Node.js introduces the .mjs file extension, the type field in package.json, and new mechanisms for interoperability with CommonJS.
July 2019
ECMAScript 2019 is released with Object.fromEntries(), String.prototype.trimStart() and more
November 2019
Node.js stabilizes support for ECMAScript modules in v13.2.0
Node v13.2.0 marks the official stabilization of support for ECMAScript modules, a significant mile in the Node.js ecosystem. This brought Node.js in line with the modern JavaScript module system, allowing developers to use the standardize import and export syntax natively.
2020
May 2020
JavaScript makes it into space with SpaceX Dragon
This famous touchscreen interface below runs on Chromium and is fully written on JavaScript. In an AMA with the SpaceX software engineers, they cited choosing Chromium gave SpaceX access to lots of programmers skilled with the technology.
.
May 2020
Deno 1.0 is released
Ryan Dahl announces the first major version of Deno, a batteries-included, complete toolchain for writing modern JavaScript. It launches as a single executable file with first class TypeScript support, opt-in permissions model, and HTTP imports.
December 2020
Adobe sunset its Flash software, ending an era of videos and games that left an impression on internet culture
For the nolstagic, the Internet Archive has preserved Flash games and animations.
Who remembers this helicopter game?
2022
June 2022
Deno joins TC39, underscoring the company’s vision of embracing JavaScript standards server-side
June 2022
Internet Explorer 11 is retired
The retirement of IE11 marked the end of a two-decade-long era dominated by Internet Explorer, which was once the world’s most widely used browser. Due to many security vulnerabilities and lack of standards in IE11, this was a pivotal step towards advancing the web ecosystem towards a more standardized, secure, and performant future.
2022
ECMAScript 2022 is released with top-level await, new class elements, static block inside classes, and more
2023
September 2023
Bun 1.0 is released
Another server-side JavaScript runtime (written in Zig) emerges that bills itself the most performant drop-in replacement for Node.js.
2024
February 2024
Node.js selects Rocket Turtle as its mascot after a design contest
The idea of a mascot had been discussed within the Node.js community for years. In 2023, Matteo Collina started a GitHub issue discussing a Node.js mascot, culminating in a design contest on Twitter. By February, the final design was selected: Rocket Turtle.
June 2024
ECMAScript 2024 is released, featuring the toWellFormed() method for return well-formed Unicode strings, and more
March 2024
JSR, a modern, open sourced JavaScript registry, is released
The Deno team introduces JSR, the JavaScript registry, which aims to offer a better experience with installing and publishing JavaScript. It only supports ECMAScript modules, can natively understand TypeScript, can work with npm, and offers cross runtime support for Deno, Bun, workerd, and more.
September 2024
The legal battle against Oracle to #FreeJavaScript begins
When Ryan Dahl’s blog post asking Oracle to release the JavaScript trademark got some attention from the JavaScript community (and zero comment from Oracle), the Deno team wrote an open letter to Oracle with the intent to challenge Oracle’s ownership by filing a petition for cancellation with the USPTO, citing Trademark abandonment. This open letter received nearly 20,000 signatures, including from high profile individuals such as Brendan Eich, Isaac Z. Schlueter, and more. The legal battle is currently ongoing, but you can follow Deno’s X or Bluesky for updates.
October 2024
Deno 2 is released
Deno 2 is a major update that touts the simplicity of Deno 1.x but with the backwards compatibility with legacy JavaScript such as Node and npm. With the launch, Deno became the first JavaScript runtime to publish a commercial.
2025
March 2025
TypeScript will be ported to Go
TypeScript, originally implemented in TypeScript/JavaScript, has long faced performance challenges as projects have scaled. To address this, Anders Hejlsberg began experimenting with a Go port of TypeScript. Early benchmarks have shown improved speed of around 10x, encouraging the TypeScript team to move forward with the Go port, naming it tsgo. The team plans to release the Go port of TypeScript as TypeScript 7.0, once it has sufficient feature parity with the JavaScript-based version.
Anders Hejlsberg introduces a new port of TypeScript.
May 2025
Microsoft announces it will open source in VSCode’s Copilot Chat extension
As AI agentic coding heats up with several tools available for developers, Microsoft continues to champion open source by announcing it will license the GitHub Copilot Chat extension under the MIT license, with the eventual goal to make VS Code an open source AI editor. This move will encourage the community to refine and build upon common AI interactions across editors, improving the agentic coding experience across all tooling.
JavaScript has come a long way in its 30-year journey, from a scrappy scripting language to the backbone of modern web development powering everything from dynamic frontends to full-stack applications, native apps, and even AI tools. Its evolution has been driven by a dedication to open source, a passionate community, an ever-growing ecosystem, and constant innovation. As we celebrate three decades of JavaScript, we’re just as excited about where it’s heading next: toward faster runtimes, smarter tooling, and a web that’s more accessible, powerful, and creative than ever. Here’s to the next 30 years of pushing boundaries!
