Skip to content

Why we need it

Modern Firefox cannot load legacy add-ons (extensions built on install.rdf and bootstrap.js), and it no longer loads userChrome.js scripts. Extensions like TabMixPlus and many popular user scripts depend on exactly those two mechanisms.

Firefox Scripts restores both, using Firefox's own AutoConfig startup hook, and adds the piece Mozilla will never ship: an updater, so what you install today keeps working after the next browser update.

Firefox 55 ESR disabled legacy add-ons by default and Firefox 57 dropped them entirely. The reasons were structural rather than a rejection of the feature:

  • Legacy add-ons ran with the full privileges of the browser process, the same trust level as Firefox's own code. A bootstrap.js had no permission model at all.
  • They were not signed, so a compromised add-on could not be distinguished from a legitimate one. WebExtensions (MV2, then MV3) introduced signing and a permission model to close that hole.

Nothing about the feature was ever declared fixed for good. But restoring it means re-introducing the same trust hole, deliberately, per browser installation. That is the trade-off every tool in this space makes, and it is worth making explicitly.

Nothing is injected into the browser binary, and no extension is installed. Two packages of plain files are copied into places Firefox already looks:

Package Goes where What it contains
fx-folder the browser's installation directory (next to the binary) config.js, defaults/pref/config-prefs.js
utils each profile's chrome/utils/ directory BootstrapLoader.js, userChrome.js, and the in-browser updater

The first file is picked up by Firefox's AutoConfig mechanism, which runs once at startup, before the browser window exists. That one file registers the second package and loads the rest. The full chain is explained in How it works.

The scripts come from xiaoxiaoflood/firefox-scripts, the original project that made this possible, published under the MPL-2.0. This repository packages them, keeps them working on current Firefox versions, and adds the installer and the updater. Waterfox ships its own variant of the loader; where a fork already provides one, ours stays out of the way.

  • Installation: install with the installer, or by hand.
  • Download: the current packages, and how to revert to an earlier build.
  • FAQ: safe mode, multiple profiles, security, forks.
  • How it works: config.js, BootstrapLoader.js, userChrome.js.