preferences from extension.config.* and applies them at browser launch. Firefox and Gecko targets get a user.js file. Chromium targets get a seeded Default/Preferences file.
How it works
Configure preferences inextension.config.js (or .mjs / .cjs) under:
browser.<target>.preferencescommands.dev|start|preview.preferences
Preference capabilities
Firefox and Gecko-based behavior
Example configuration
user.js file into the active profile (managed or explicit profile) and merges:
- Internal baseline preferences required for development and runtime behavior.
- Your custom
preferencesvalues (your values win on key conflicts).
EXTENSION_USE_SYSTEM_PROFILE=true), Extension.js does not write a managed profile file.
Chromium-family behavior
Chromium-family launches (chrome, edge, chromium, chromium-based) seed your preferences too, through the profile rather than a user.js file.
At launch, Extension.js deep-merges your preferences object into the vendorโs master-preferences baseline. The result is written once to Default/Preferences inside the active profile. The write happens only when that file does not exist yet, so a fresh profile gets seeded and an existing profile keeps its state. Chrome and Edge each have their own baseline object, chosen by the target you run.
Because the write is once per profile, a persisted profile (
persistProfile
or keepProfileChanges) does not pick up later preference edits. Delete the
profile, or run an ephemeral profile, to re-seed.browserFlagsexcludeBrowserFlagsprofile/persistProfile
extension.config.js, set EXTENSION_BROWSER_FLAGS (whitespace-separated, for example --headless=new). It applies to every launched browser and is appended after config browserFlags, so the environment wins when a flag repeats.
Dark mode defaults
Extension.js injects dark-mode defaults unless you already define those keys:- Chromium family: dark-mode launch flags
- Firefox/Gecko family: dark-mode preference keys (for UI + content color scheme)
preferences/flags override these defaults.
Interface example
Example with custom profile
More detailed preference references
For a comprehensive list of available Firefox preferences, explore the Firefox source code. Mozilla defines many defaults inall.js or firefox.js.
Best practices
- Prefer browser-scoped preferences: Keep Firefox/Gecko preference keys under browser-targeted configuration blocks.
- Use command overrides for temporary experiments: Put short-lived preference tweaks in
commands.dev. - Keep profiles isolated: Use separate profiles for reproducible debugging.
- Use flags for Chromium launch tuning: Preferences seed the profile once, so per-run behavior changes belong in flags.
Next steps
- Learn more about Browser flags.
- Learn more about Browser profile.

