1995
Birth of JavaScript
Brendan Eich creates JavaScript in just 10 days at Netscape. Originally named Mocha, then LiveScript, it was later renamed to JavaScript.
From a 10-day prototype to the world's most popular programming language.
Celebrating three decades of innovation.
The incredible impact of JavaScript on the digital world
From simple scripts to full applications
Nearly all websites use JavaScript
Millions of developers worldwide
Frontend, backend, mobile, desktop, IoT
On this historic day, Netscape Communications Corporation and Sun Microsystems, Inc. announced JavaScript to the world, marking the beginning of a revolution in web development.
JavaScript was introduced as an open, cross-platform object scripting language designed for creating and customizing applications on enterprise networks and the Internet. The language complemented Java, making it accessible to HTML page authors and enterprise application developers for dynamic scripting of client and server behavior.
“JavaScript will be the most effective method to connect HTML-based content to Java applets.”
— Bill Joy, Co-founder and VP of Research, Sun Microsystems
“JavaScript is analogous to Visual Basic in that it can be used by people with little or no programming experience to quickly construct complex applications.”
— From the original press release
From a 10-day prototype to the world's most popular programming language
Brendan Eich creates JavaScript in just 10 days at Netscape. Originally named Mocha, then LiveScript, it was later renamed to JavaScript.
First official release of JavaScript with Netscape Navigator 2.0.
JavaScript is standardized as ECMAScript by Ecma International.
Major update introducing regular expressions, try/catch, and more robust error handling.
Google Maps and Gmail popularize AJAX, showcasing JavaScript's potential for rich web applications.
John Resig releases jQuery, simplifying DOM manipulation and cross-browser compatibility.
Google releases the V8 JavaScript engine with Chrome, dramatically improving performance.
Ryan Dahl creates Node.js, bringing JavaScript to server-side development.
Google releases AngularJS, popularizing the MV* pattern in frontend development.
Microsoft introduces TypeScript, adding static typing to JavaScript.
Facebook introduces React, changing how we think about building UIs with its virtual DOM.
Evan You creates Vue.js, offering a progressive framework for building user interfaces.
Major update to JavaScript with classes, modules, arrow functions, and more.
Complete rewrite of AngularJS using TypeScript, introducing component-based architecture.
Rich Harris creates Svelte, a compiler that turns components into highly efficient imperative code at build time.
Vercel releases Next.js, a React framework for server-side rendering and static site generation.
WebAssembly becomes a web standard, allowing near-native performance in browsers.
React introduces Hooks, revolutionizing state management in functional components.
Ryan Dahl releases Deno, a secure runtime for JavaScript and TypeScript, addressing Node.js design flaws.
JavaScript dominates web development with frameworks like React, Vue, and Angular. Node.js powers backend services, and JavaScript runs on mobile, desktop, and IoT devices. It's truly everywhere in the tech stack.
New features including logical assignment operators, numeric separators, and Promise.any().
Bun is released as a fast all-in-one JavaScript runtime, bundler, and package manager.
JavaScript celebrates 30 years of powering the web and beyond! From simple scripts to full-stack applications.
Fascinating facts about JavaScript's journey
Brendan Eich wrote the first version of JavaScript in just 10 days in May 1995.
Originally called Mocha, then LiveScript, and finally JavaScript for marketing reasons.
Netscape and Sun officially announced JavaScript to the world with 28 industry endorsements.
Apple, AT&T, Borland, HP, Oracle, and many others endorsed JavaScript on day one.
JavaScript now runs on servers, mobile apps, desktop applications, and even spacecraft!
JavaScript has the largest package ecosystem with over 2 million packages on npm.
As JavaScript continues to evolve, we're seeing exciting developments in WebAssembly integration, AI-powered development tools, edge computing, and new runtime environments. The language that started as a simple scripting tool has become the foundation of modern digital experiences.
JavaScript-powered AI applications and machine learning in the browser
JavaScript running closer to users with edge runtimes and serverless functions
Continued improvements in V8, new JIT optimizations, and WebAssembly synergy
Be part of the JavaScript community and help shape the next 30 years of web development. Connect with developers worldwide and share your JavaScript journey.
See how JavaScript has transformed from its humble beginnings in 1995 to the powerful language it is today. Compare the syntax and patterns developers used back then with modern ES2024 code.
How we declare variables has evolved dramatically
// JavaScript 1.0 - var only
var x = 5;
var y = 10;
var name = "JavaScript";
// Function scope issues
function test() {
if (true) {
var x = 20;
}
return x; // Returns 20, not 5!
}// Modern JavaScript - const, let, block scope
const x = 5;
let y = 10;
var name = "JavaScript"; // Still works but discouraged
// Block scope protection
function test() {
if (true) {
const x = 20;
}
return x; // Returns 5! ✅
}From function declarations to arrow functions
// Function declaration
function add(a, b) {
return a + b;
}
// Function expression
var multiply = function(a, b) {
return a * b;
};
// 'this' binding issues
var self = this;
setTimeout(function() {
console.log(self.value);
}, 100);// Arrow functions - concise syntax
const add = (a, b) => a + b;
const multiply = (a, b) => a * b;
// Lexical 'this' - no more self = this
setTimeout(() => {
console.log(this.value);
}, 100);
// Implicit returns, no parentheses needed
const square = x => x * x;From callbacks to modern async/await
// Callback hell - "pyramid of doom"
getData(function(a) {
getMoreData(a, function(b) {
getMoreData(b, function(c) {
getMoreData(c, function(d) {
console.log(d);
});
});
});
});
// Error handling was messy
try {
callback(function(err, data) {
if (err) {
// Handle error
}
// Handle success
});
} catch (e) {
// Handle sync errors
}// Clean async/await syntax
async function fetchData() {
try {
const a = await getData();
const b = await getMoreData(a);
const c = await getMoreData(b);
const d = await getMoreData(c);
console.log(d);
} catch (error) {
// Single error handling point
console.error('Something went wrong:', error);
}
}
// Promise chaining (still useful)
getData()
.then(a => getMoreData(a))
.then(b => getMoreData(b))
.catch(console.error);Finding and manipulating elements
// Limited DOM access methods
var element = document.getElementById('myId');
var elements = document.getElementsByTagName('div');
// Changing styles
element.style.color = 'red';
element.style.backgroundColor = 'blue';
// Creating elements
var newDiv = document.createElement('div');
newDiv.innerHTML = '<span>Hello</span>';
document.body.appendChild(newDiv);
// Event handling
element.onclick = function() {
alert('Clicked!');
};// Powerful CSS selectors
const element = document.querySelector('#myId');
const elements = document.querySelectorAll('div.myClass');
// Modern style manipulation
Object.assign(element.style, {
color: 'red',
backgroundColor: 'blue'
});
// Template literals for HTML
const newDiv = document.createElement('div');
newDiv.innerHTML = `<span>Hello ${name}</span>`;
document.body.appendChild(newDiv);
// Modern event listeners
element.addEventListener('click', () => {
console.log('Clicked!');
}, { once: true });From prototypes to classes
// Prototype-based inheritance
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.sayHello = function() {
return "Hello, I'm " + this.name;
};
// Inheritance was complex
function Employee(name, age, title) {
Person.call(this, name, age);
this.title = title;
}
Employee.prototype = Object.create(Person.prototype);
Employee.prototype.constructor = Employee;// Clean class syntax
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
sayHello() {
return `Hello, I'm ${this.name}`;
}
}
// Simple inheritance with extends
class Employee extends Person {
constructor(name, age, title) {
super(name, age);
this.title = title;
}
sayHello() {
return `${super.sayHello()} - ${this.title}`;
}
}
// Private fields and methods
class BankAccount {
#balance = 0;
deposit(amount) {
this.#balance += amount;
}
}From loops to functional methods
// Manual iteration with for loops
var numbers = [1, 2, 3, 4, 5];
var doubled = [];
for (var i = 0; i < numbers.length; i++) {
doubled.push(numbers[i] * 2);
}
// Finding elements
var found = null;
for (var i = 0; i < numbers.length; i++) {
if (numbers[i] > 3) {
found = numbers[i];
break;
}
}
// No built-in filtering
var evens = [];
for (var i = 0; i < numbers.length; i++) {
if (numbers[i] % 2 === 0) {
evens.push(numbers[i]);
}
}// Functional array methods
const numbers = [1, 2, 3, 4, 5];
// Map, filter, reduce - chainable
const doubled = numbers.map(n => n * 2);
const evens = numbers.filter(n => n % 2 === 0);
const sum = numbers.reduce((acc, n) => acc + n, 0);
// Method chaining
const result = numbers
.filter(n => n > 2)
.map(n => n * 3)
.reduce((acc, n) => acc + n, 0);
// Modern array methods
const found = numbers.find(n => n > 3);
const hasEven = numbers.some(n => n % 2 === 0);
const allPositive = numbers.every(n => n > 0);From slow, interpreted scripts to blazing-fast optimized machine code. See how JavaScript performance has improved dramatically over 30 years of innovation.
How quickly browsers can parse JavaScript code
JavaScript engine performance optimizations
Memory efficiency improvements in JS engines
Modern bundling and tree-shaking efficiency
Time to render first content on screen
Efficiency of updating web page elements
Key innovations that made JavaScript faster and more efficient
2008: Google's V8 engine introduced JIT compilation, making JavaScript 10x faster overnight.
2015: Eliminates unused code, reducing bundle sizes by up to 80%.
2013: React's Virtual DOM made UI updates 5-10x faster.
2017: Near-native performance in browsers, 20x faster for compute-heavy tasks.