Mutation Events ran in Chrome 15 to 134, Edge 12 to 136, Firefox 6 to 139, and Safari 4 to 18.7, but Chrome 135+, Edge 137+, Firefox 140+, and Safari 26+ removed it. Migrate to MutationObserver.

Prince Dewani
May 1, 2026
Mutation Events is a W3C DOM Level 2 API that fires synchronous events when nodes are inserted, removed, or changed. It works in Chrome through 134, Edge through 136, Firefox through 139, Safari through 18.7, Opera 11.6+, Samsung Internet through 29, and Internet Explorer 9 to 11; Chrome 135+, Edge 137+, Firefox 140+, and Safari 26+ have removed it.
This guide covers what Mutation Events are, the browsers that support them, the event types, deprecation reasons, and migration to MutationObserver.
Mutation Events is a deprecated DOM Level 2 API that fires synchronous events when DOM nodes are inserted, removed, renamed, or modified. The W3C defined nine event types like DOMNodeInserted, DOMSubtreeModified, and DOMAttrModified, then deprecated the whole API in DOM Level 3 over performance and design problems.
Mutation Events once shipped in every major browser but is now disabled or removed across modern releases. Chrome 135+, Edge 137+, Firefox 140+, and Safari 26+ have stripped the API.
Chrome supports Mutation Events as a partial implementation from Chrome 15 to Chrome 126 on Windows, macOS, Linux, ChromeOS, and Android. Chrome 127 to 134 disabled them behind the MutationEventsEnabled enterprise policy. Chrome 135+ removes them entirely, so DOMNodeInserted listeners fire nothing on a current release.
Microsoft Edge supports Mutation Events as a partial implementation from Edge 12 to Edge 126 on Windows and macOS. Edge 127 to Edge 136 disabled them by default and accepted the MutationEventsEnabled group policy as a temporary opt-in. Edge 137+ removes the events outright and marks the policy itself obsolete.
Firefox supports Mutation Events as a partial implementation from Firefox 6 to Firefox 139 on Windows, macOS, Linux, and Android. Mozilla kept DOMElementNameChanged and DOMAttributeNameChanged off the public web. Firefox 140+ removes the entire MutationEvent interface from Gecko.
Safari supports Mutation Events as a partial implementation from Safari 4 to Safari 18.7 on macOS and from Safari 4.2 to 18.7 on iOS and iPadOS. Apple never shipped DOMAttrModified in WebKit, so attribute-change listeners always fired nothing on Apple devices. Safari 26+ removes the remaining mutation events on both macOS and iOS.
Opera supported Mutation Events fully from Opera 11.6 to Opera 12.1 on Presto, then partially from Opera 15 to Opera 112 on Chromium. Opera 113+ disabled the events by default in line with upstream Chromium and is on track to remove them. Opera Mini does not expose Mutation Events in any version.
Samsung Internet supports Mutation Events as a partial implementation from Samsung Internet 4 to Samsung Internet 29 on Galaxy phones and tablets. The browser tracks the Chromium event surface, so Samsung Internet 25+ matches Chrome 127+ behavior. Samsung Internet 30 and later track the upstream removal.
The legacy Android Browser supports Mutation Events from Android 2.3 to Android 4.4.4 on the original WebView builds. Chrome for Android 147+ removes the events in line with the desktop Chrome 135+ change, so Mutation Events are effectively gone across the Android platform.
Internet Explorer 9 to 11 support DOMSubtreeModified, DOMNodeInserted, DOMNodeRemoved, and DOMCharacterDataModified on Windows 7 and later. Internet Explorer 6 to 8 did not support Mutation Events. Microsoft has retired Internet Explorer, so move listener-based code to Chromium-based Edge or Chrome.
Note: Mutation Events behave differently across browsers and removal versions vary. Test them on real browsers and OS with TestMu AI. Try TestMu AI free!
The DOM Level 2 spec defines nine mutation events. Six fired across every major engine, while three shipped patchy or only in Firefox.
The W3C deprecated Mutation Events in DOM Level 3 because the synchronous design slowed every DOM modification and cross-browser support never converged. Vendors have since disabled or removed the API in favor of MutationObserver.
A migration swaps every addEventListener call for a DOM mutation name with a single MutationObserver instance that watches a target subtree.
Paste this snippet into the DevTools console of any modern browser to watch the same subtree changes the old listeners used to receive.
// Replace a DOMNodeInserted / DOMNodeRemoved listener with a MutationObserver.
const target = document.getElementById("app");
const observer = new MutationObserver((records) => {
for (const record of records) {
record.addedNodes.forEach((node) => {
console.log("Node added under #app:", node);
});
record.removedNodes.forEach((node) => {
console.log("Node removed from #app:", node);
});
if (record.type === "attributes") {
console.log("Attribute changed:", record.attributeName, "on", record.target);
}
}
});
observer.observe(target, {
childList: true,
subtree: true,
attributes: true,
characterData: true,
});
// Stop watching when the page no longer needs the updates.
// observer.disconnect();Even inside the support windows above, Mutation Events behaved inconsistently. The cross-browser quirks below catch most QA teams off guard.
In my experience, the issue that bites teams hardest is the silent DOMAttrModified gap on Safari. A feature that watches an aria attribute works in Chrome and Firefox QA, then fires zero events on iPhone Safari users. Run the MutationObserver migration on real iOS Safari before shipping.
All Mutation Events 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