Pale Moon: Release notes

General notes:
DiD This means that a fix is "Defense-in-Depth": It is a fix that does not apply to a (potentially) actively exploitable vulnerability in Pale Moon, but prevents future vulnerabilities caused by the same code, e.g. when surrounding code changes, exposing the problem, or when new attack vectors are discovered.



v35.0.0 (2026-09-17)

This is a milestone release with many changes, primarily focused on web compatibility.
Note: due to an oversight, the installer for this version was not code-signed.

New features:
  • Pale Moon now uses a number of compatibility shims/polyfills by default. This will provide compatibility bridging with the following: Document.elementFromPoint(s) with non-finite args, the GetAnimations API, image.decode(), Intl.DisplayNames API, Intl.ListFormat API, Intl.RelativeTimeFormat API, Intl.Segmenter API, in addition to pipethrough(), pipeto(), TextDecoderStream, TextEncoderStream and TransformStream methods of the Streams API. See implementation notes.
  • Implemented the CSS revert-layer keyword.
  • Implemented CSSStyleSheet replaceSync.
  • Implemented the CSS :has() pseudo class.
  • Implemented support for adoptedStyleSheets.
Changes/fixes:
  • Firefox compatibility mode had its version updated to 140 by default. Of course this can still easily be overridden (globally or per-site) where necessary.
  • JavaScript garbage collection and DOM cycle collection have been given a number of important fixes to better deal with heavy modern websites that would not properly release their resources. The "ghostbuster" workaround for lingering window objects has been removed in tandem as it is no longer necessary.
  • Removed old and obsolete code from the platform related to ancient or completely unsupported compile targets.
  • The uppercase version of ß (eszett/scharfes S) will now always mirror the lowercase writing method. See implementation notes.
  • Added more updates for LoongArch64 (including full JIT) and Mac/PPC support.
  • Linux/FreeBSD: Added a GTK2 dependency toggle to build NPAPI support without GTK2. This allows Pale Moon to build plugin support on systems with no GTK2 packages.
  • Removed the unused "network tickler" module, an inherited component that could ping wireless networks on a regular interval.
  • Modernized std::*<T>::value/::type to their _v and _t suffix forms, respectively, aligning with more modern C++ language standards and compiler behavior.
  • Updated CSS aspect-ratio to be more spec-compliant.
  • Updated flex container buttons to report a definite size (avoiding 0-sized elements on some websites).
  • Restored the ability to compile Pale Moon on MIPS targets.
  • Fixed an issue with possible hangs in recursive restyling calls (causing a recursive reflow storm), avoiding potentially long browser hangs/lockups.
  • Updated several parts of the ICU code for better internationalization support.
  • Linux: Improved typing performance on some complex pages.

Security fixes:
  • Updated the internal json viewer for better handling of resources.
  • Updated NSS to 3.90.14.0 (UXP) to pick up several security fixes.
  • As usual, many potential security reports/issues were examined and ported where applicable to our code.
  • Security issues addressed: CVE-2026-74982, CVE-2026-74969 (DiD), CVE-2026-74977 (DiD), CVE-2026-74945, CVE-2026-74964, CVE-2026-74971, CVE-2026-74943, and several others that did not have a CVE designation at the time of evaluation.

Implementation notes:
  • Pale Moon now includes and preloads a number of compatibility shims/polyfills on web pages, to respond to the constant rapid adoption of draft specs and syntactic sugar in websites, primarily driven by top-heavy JavaScript frameworks that target primarily Chrome-based layout engines. While this isn't ideal, it's a pragmatic solution that solves major web compatibility issues with frameworks that are extremely intolerant to not having an exact expected feature set or collection of web APIs. There are a few caveats with this approach which we've adopted from a sibling project (Basilisk), primarily that it may not universally work on all sites, in particular very strict content security policies might interfere, and it's not the most performant solution imaginable (although given the heft of JS framework sites, this is likely barely noticeable).
  • Primarily in German, the ß character (known as "eszett" or "scharfes S") can be written with its proper character or with the alternative latinized "ss". Because the uppercase version of ß was not commonly included in system fonts for a while, with historical typewriter conventions in mind, converting text to uppercase would convert ß to "SS". However, this can cause ambiguity in some wordswhere both a spelling with ß and with "ss" exist which have different meaning. Since the uppercase unicode character has been included in system fonts for a long time now and is more commonly also included in custom fonts, this conversion is an old notion. The linguistic bodies in Germany also prefer using the uppercase ẞ now when capitalizing, so Pale Moon will use the unicode character by default going forward when converting case (e.g. with CSS or JavaScript), abandoning the on-the-fly conversion to "SS".
  • Our FreeBSD GTK3 builds are making use of the new option to build NPAPI support without GTK2 dependencies. If you need this functionality on FreeBSD, either use the GTK2 binaries or build from source yourself with the appropriate configuration for your system.


You can find the release notes for previous releases of Pale Moon on the Archived Release Notes page.

Site and contents Copyright © 2009-2026 Moonchild Productions - All rights reserved
Important legal considerations surrounding Pale Moon.
Policies: Cookies - User Content - Privacy.