ES6 works in Chrome 51+, Edge 15+, Firefox 54+, Safari 10+ on macOS and iOS, Opera 38+, and Samsung Internet 5+. Learn ES6 browser support, features, and known issues.

Prince Dewani
May 1, 2026
ES6, or ECMAScript 2015, is the sixth edition of the ECMAScript standard from Ecma International's TC39 that added let, const, classes, arrow functions, promises, and modules to JavaScript. It works in Chrome 51+, Edge 15+, Firefox 54+, Safari 10+, Opera 38+, and Samsung Internet 5+, while Internet Explorer 11 supports only a small subset.
This guide covers what ES6 is, the browsers that support it, the key features, how to check support, the ES5 differences, and the known issues.
ES6 is the sixth edition of the ECMAScript language specification, also known as ECMAScript 2015 or ES2015. Ecma International's TC39 committee publishes it as ECMA-262. It adds block-scoped variables, classes, arrow functions, template literals, destructuring, default parameters, promises, and native modules to JavaScript.
ES6 works in every modern desktop and mobile browser, with Chrome, Firefox, Safari, Edge, Opera, and Samsung Internet all shipping the full specification by default. Internet Explorer 11 covers only a small slice, and IE 9 and 10 do not support ES6 at all.
Chrome supports the full ES6 specification from Chrome 51 on Windows, macOS, Linux, ChromeOS, and Android. Chrome 21 to 50 had partial support, with arrow functions, classes, and let or const arriving in stages. Chrome 1 to 20 did not support any ES6 features. Chrome for Android follows the same version numbers as desktop Chrome.
Microsoft Edge supports ES6 from Edge 15 on Windows 10, the first version to ship the full specification. Legacy EdgeHTML 12 to 14 had partial support, with most syntax features working but a few iterator and tail-call corners missing. Chromium-based Edge from Edge 79 inherits Chrome's full ES6 support on Windows, macOS, Linux, and Android.
Firefox supports the full ES6 specification from Firefox 54 on Windows, macOS, Linux, and Android. Firefox 6 to 53 had progressive partial support, with let and const landing in Firefox 44, classes in Firefox 45, and arrow functions in Firefox 22. Firefox 1 to 5 did not support ES6.
Safari supports the full ES6 specification from Safari 10 on macOS Sierra and from Safari 10 on iOS 10. Safari 7.1 to 9.1 on macOS and Safari 7 to 9.3 on iOS shipped partial ES6 support, with classes, let, const, and template literals appearing across that range. Safari 6 and earlier do not support ES6.
Opera supports the full ES6 specification from Opera 38, which tracks the same Chromium engine as Chrome 51. Opera 15 to 37 had partial support that mirrored Chromium's progress. Opera Mobile 38 and later support ES6 on Android. Opera 12 and earlier, on the Presto engine, do not support ES6.
Samsung Internet supports the full ES6 specification from Samsung Internet 5 on Galaxy phones and tablets. Samsung Internet 4 had partial support that mirrored Chrome 44. The browser is built on Chromium, so it follows the same ES6 rollout as Chrome for Android.
Chrome for Android supports the full ES6 specification from Chrome 51 on Android 4.1 and later. The legacy stock Android Browser shipped with Android 4.4 had partial ES6 support, mostly typed arrays and Map and Set. The pre-Chromium Android Browser on Android 4.3 and earlier does not support ES6. Modern Android phones use Chrome for Android, Samsung Internet, or Firefox for Android.
Internet Explorer 11 supports a small subset of ES6, mostly typed arrays, Map, Set, WeakMap, and WeakSet. It does not support let, const, arrow functions, classes, modules, promises, template literals, destructuring, default parameters, or rest and spread. IE 9 and 10 do not support any ES6 features. Microsoft has retired Internet Explorer, so any new ES6 work targets Edge or another modern browser.
Note: ES6 syntax breaks across older Safari, IE 11, and legacy mobile WebView builds. Test it on real browsers and OS with TestMu AI. Try TestMu AI free!
ES6 added the largest set of language features in any single ECMAScript edition. Most modern JavaScript code, including React, Vue, Angular, Node.js, and TypeScript output, depends on these features by default.
You can confirm ES6 support inside any browser by trying to compile a small block of ES6 syntax with the Function constructor and checking that the global Symbol and Promise objects exist. The Function constructor throws a SyntaxError on engines that cannot parse ES6, which gives you a reliable yes or no answer.
Paste this snippet into the browser DevTools console to confirm ES6 support and the related ES6 module loader hook:
// Paste this into the browser DevTools console to test ES6 support.
function supportsES6() {
try {
// Each line uses an ES6-only construct: arrow function with default param,
// class syntax, template literal with const, and array destructuring with let.
new Function("(a = 1) => a")();
new Function("class T {}");
new Function("const x = `v${1}`");
new Function("let [a, b] = [1, 2]");
return typeof Symbol === "function" && typeof Promise === "function";
} catch (e) {
return false;
}
}
console.log("ES6 supported in this browser:", supportsES6());
console.log("Module script support:", "noModule" in document.createElement("script"));If supportsES6() returns true, the engine handles every common ES6 syntax feature. The noModule check tells you whether the same engine recognises the script type="module" attribute, which is the gate for native ES6 modules. For a finer-grained read, use compat-table.github.io/compat-table/es6/ in any browser.
ES5 is the JavaScript baseline that every browser, including IE 9, supports natively. ES6 is the 2015 rewrite that brings JavaScript closer to languages like Java, Python, and C# in syntax and ergonomics.
| Dimension | ES5 | ES6 |
|---|---|---|
| Standard edition | 5th edition of ECMA-262 | 6th edition of ECMA-262, also called ECMAScript 2015 |
| Variable declarations | var only, function-scoped | let and const for block scope, plus var |
| Functions | function expressions, dynamic this | Arrow functions with lexical this, default and rest parameters |
| Classes | Prototype chain with manual setup | class, extends, super, and static keywords |
| Strings | String concatenation with quotes and the plus operator | Backtick template literals with interpolation and multi-line |
| Async | Callback-based, manual error handling | Native Promise object with chaining and Promise.all |
| Modules | None native, CommonJS or AMD on the side | Native import and export with script type="module" |
| Browser reach | Every browser including IE 9 and IE 10 | Chrome 51+, Firefox 54+, Safari 10+, Edge 15+, Opera 38+, Samsung Internet 5+. IE 11 partial only. |
ES6 has near-universal modern support, but a few real failure modes still bite teams that target older Windows fleets, embedded WebViews, or international markets where legacy mobile browsers persist. The biggest hits are Internet Explorer, partial-support Safari builds, and silent module-loader breakage.
In my experience, the most surprising failure happens on corporate Windows fleets where IE 11 still loads in compatibility mode for one internal app. A single inline arrow function in a third-party widget script crashes the whole page with "Object doesn't support this property or method", and the error never surfaces in dev tools because IE silently skips the rest of the script. Always wrap third-party widgets in a feature detect or a Babel build before shipping to a Windows enterprise audience.
All ES6 version numbers and feature notes in this guide come from these primary sources:
Did you find this page helpful?
More Related Hubs
TestMu AI forEnterprise
Get access to solutions built on Enterprise
grade security, privacy, & compliance