How Pale Moon Diverged from the Firefox Codebase
Pale Moon began in 2009 as a simple, performance-optimized rebuild of Mozilla Firefox, created by developer M.C. Straver (known as Moonchild). Initially, it shared the exact same source code as Firefox, differing only in how it was compiled for Windows hardware. However, fundamental disagreements over user interface design, browser architecture, and extension support gradually pushed the two projects apart. Over time, Pale Moon transitioned from a basic Firefox rebuild into a completely independent hard fork, culminating in the creation of its own rendering engine, Goanna, and the Unified XUL Platform (UXP).
The Early Years: Optimized Rebuilds
From 2009 to 2013, Pale Moon was not a true fork in the modern sense. Mozilla provided open-source code built to run on the widest possible variety of computers, including very old hardware. Moonchild took this exact code and compiled it specifically for modern processors using advanced instruction sets (like SSE2).
To further increase speed and reduce memory usage, Pale Moon stripped out Firefox features deemed unnecessary for the average user, such as accessibility features, parental controls, and crash reporters. Aside from these under-the-hood tweaks, Pale Moon functioned identically to Firefox and maintained full compatibility with its extensions.
The Turning Point: Firefox 24 ESR and the Australis UI
The first major divergence occurred in 2014 with the release of Firefox 29. Mozilla introduced a radical new user interface called "Australis," which made Firefox look and behave much like Google Chrome. Australis removed the customizable add-on bar, rounded the tabs, and restricted how much users could alter the browser's appearance.
Moonchild and the Pale Moon community rejected this change, favoring the classic, highly customizable interface. Instead of following Mozilla's updates, Pale Moon froze its codebase at Firefox 24 Extended Support Release (ESR). From this point onward, Pale Moon maintained its own version of the old interface while selectively backporting security patches from newer versions of Firefox.
The Hard Fork: Introducing the Goanna Engine
By 2015, simply patching the aging Firefox 24 ESR code was no longer sustainable for modern web compatibility. With the release of Pale Moon 26 in 2016, the project severed ties with Mozilla's Gecko rendering engine and introduced Goanna.
Goanna was a hard fork of the Gecko engine. While it originated from Mozilla's code, Goanna was heavily modified regarding how it handled memory, rendered graphics, and processed web standards. This change officially separated Pale Moon from Firefox, meaning Pale Moon was now recognized by websites as an entirely different browser rather than a variant of Firefox.
The Unified XUL Platform (UXP)
As the web evolved, Pale Moon needed a more modern foundation without adopting the features Mozilla was forcing upon Firefox users. In 2017, Mozilla released Firefox 57 (Quantum), which completely overhauled the browser by integrating the Rust programming language, enforcing a multi-process architecture (Electrolysis), and killing off classic extensions in favor of Chrome-style WebExtensions.
To modernize Pale Moon while avoiding the Quantum overhaul, Moonchild forked the Mozilla codebase one final time, using Firefox 52 ESR—the absolute last version of Firefox to support legacy technologies.
Moonchild stripped out Mozilla's multi-process code, Rust components, and telemetry, using the remaining code to build the Unified XUL Platform (UXP). Released in 2018 with Pale Moon 28, UXP became the permanent, independent foundation for the browser.
Key Technical Differences Today
Because of how Pale Moon diverged, its current codebase differs drastically from modern Firefox in several specific ways:
- XUL and XPCOM Retention: Pale Moon still uses the XML User Interface Language (XUL) and XPCOM. This allows extensions and themes to modify the browser entirely, a capability Firefox abandoned in 2017.
- Single-Process Architecture: While Firefox splits tabs and extensions into multiple background processes to prevent crashes, Pale Moon intentionally remains a single-process application to keep memory consumption low and code complexity manageable.
- NPAPI Plugin Support: Firefox removed support for NPAPI plugins (such as Java, Silverlight, and Adobe Flash) years ago. Pale Moon retains this code for users and enterprises that still rely on legacy web applications.
- Zero Rust Code: Modern Firefox relies heavily on the Rust programming language for its core components (Servo). Pale Moon's codebase remains strictly C, C++, and JavaScript.
- Absence of Mozilla Services: All code relating to Mozilla's Pocket integration, WebRTC, telemetry data collection, and DRM (Digital Rights Management) has been completely excised from the Pale Moon codebase.