ES6 modules work in Chrome 61+, Edge 16+, Firefox 60+, Safari 11+, Opera 48+, Samsung Internet 8.2+, and Android. Learn ES6 modules browser support and limits.

Prince Dewani
May 6, 2026
ES6 modules are the ECMAScript module system that lets JavaScript files share code through import and export statements. They work in Chrome 61+, Edge 16+, Firefox 60+, Safari 11+ on macOS and iOS, Opera 48+, Samsung Internet 8.2+, and Chrome for Android 61+, while Internet Explorer never added support.
This guide covers what ES6 modules are, the supported browsers, the key features, how to use them in browsers, the differences from CommonJS, and known issues.
ES6 modules are the JavaScript module system standardized in ECMAScript 2015 and maintained by the TC39 committee. Each .js file becomes a module with its own scope, and developers use the export statement to expose values and the import statement to pull them into other files.
ES6 modules work natively in every major modern browser through the script type=module tag, with the exception of Internet Explorer.
Chrome supports ES6 modules from Chrome 61 on Windows, macOS, Linux, ChromeOS, and Android. Chrome 60 had modules disabled by default behind the chrome://flags experimental web platform features flag, and Chrome 4 to 59 did not support them. Chrome for Android follows the same version numbering as desktop Chrome.
Microsoft Edge supports ES6 modules from Edge 16 on Windows. Edge 15 had them disabled by default behind a flag, and Edge 12 to 14 did not support them. Chromium Edge from Edge 79 inherits full ES6 module support from the Chromium engine and ships modules enabled by default on every desktop platform.
Firefox supports ES6 modules from Firefox 60 on Windows, macOS, Linux, and Android. Firefox 54 to 59 had modules disabled by default behind the dom.moduleScripts.enabled flag in about:config, and Firefox 2 to 53 did not support them at all. Firefox for Android follows the same version numbering.
Safari supports ES6 modules from Safari 11 on macOS and from Safari 11 on iOS and iPadOS. Safari 10.1 had partial support that recognized type=module but did not honor the nomodule attribute, so it ran both the modern and legacy code paths. Safari 3 to 10 did not support modules at all.
Opera supports ES6 modules from Opera 48 on Windows, macOS, and Linux. Opera 47 had modules disabled by default behind a flag, and Opera 9 to 46 did not support them. Opera Mobile is built on the same Chromium engine and supports ES6 modules from Opera Mobile 48 on Android.
Samsung Internet supports ES6 modules from Samsung Internet 8.2 on Galaxy phones and tablets. Earlier versions 4.0 to 7.4 did not support them. Samsung Internet shares the Chromium engine, so module loading, dynamic import, and the nomodule fallback all track Chrome behavior closely.
Chrome for Android supports ES6 modules from Chrome for Android 61, the same version as desktop Chrome. The legacy stock Android Browser, which shipped as the default through Android 4.4, never added support. On modern Android phones, use Chrome, Firefox, or Samsung Internet for a working ES6 module setup.
Internet Explorer does not support ES6 modules in any version. IE 11 is the last release and Microsoft has retired the browser. Sites that still target IE 11 must transpile import and export statements down to ES5 with a tool like Babel, Webpack, or Rollup before shipping the JavaScript bundle.
Note: ES6 modules behave differently across older Safari, Edge, and Android Browser builds. Test them on real browsers and OS with TestMu AI. Try TestMu AI free!
ES6 modules add five features that change how JavaScript files load, share code, and run in a browser.
You can run ES6 modules in any modern browser by adding type="module" to the script tag and serving the files through a web server. The browser then handles fetching, parsing, and dependency resolution for you.
The snippet below shows a minimal two-file ES6 module setup that runs in any modern browser through a single HTML page:
// math.js - export named values from a module
export function add(a, b) {
return a + b;
}
export const PI = 3.14159;
// main.js - import the values into another module
import { add, PI } from './math.js';
console.log('add(2, 3):', add(2, 3));
console.log('PI is:', PI);
// In your HTML, load the entry module with type="module":
// <script type="module" src="main.js"></script>ES6 modules and CommonJS are both JavaScript module systems but differ in syntax, loading model, and runtime support. ES6 modules are the browser-native standard, while CommonJS is the original Node.js convention.
| Dimension | ES6 Modules | CommonJS |
|---|---|---|
| Origin | ECMAScript 2015 standard, maintained by TC39 | Node.js convention based on the CommonJS spec |
| Syntax | import and export keywords | require() and module.exports |
| Loading model | Static, parsed before execution | Dynamic, evaluated at runtime |
| Strict mode | Always on | Off by default |
| Runtime support | Modern browsers and Node.js 12+ | Node.js native; browsers need a bundler |
| File extension | .mjs or .js with type:module in package.json | .js or .cjs |
| Bindings | Live bindings to the original value | Copy of the exported value at require time |
| Top-level await | Supported | Not supported |
| Tree-shaking | Yes, the static graph allows dead-code removal | Limited, dynamic shape blocks most analysis |
ES6 modules are widely supported, but a handful of real edge cases still trip up developers in production. The biggest hits are Internet Explorer, server configuration, and a few module-specific browser rules.
In my experience, the most surprising failure happens when a developer opens an HTML file directly from the disk and sees a CORS error in the console. The page works the moment they serve the same files through npx serve, so always run modules through a real web server before debugging anything else.
All ES6 module version numbers and platform 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