Control browser launch behavior for debugging, automation, and runtime
experiments.
Tune browser launch behavior without changing extension source code. Extension.js merges browser flags from your extension.config.* and applies them in dev, preview, and start flows.
Does Firefox have firefox://flags?
Firefox does not use firefox://flags the way Chromium browsers use chrome://flags or edge://flags. Firefox exposes runtime toggles through about:config (preferences) and accepts launch flags from the command line.
If you searched for firefox://flags, firefox //flags, browser://flags, mozilla://flags, or about flags firefox, you are probably trying to change browser behavior during extension development. In Extension.js, do that in two places:
- Use
browserFlags for launch-time flags Extension.js passes to the browser binary.
- Use Firefox preferences for repeatable Gecko runtime behavior that would otherwise live in
about:config.
Both work for Chrome, Edge, and Firefox extension development from the same Extension.js project.
Template examples
new-browser-flags
See browser flags in action with a new-tab extension that configures launch behavior.
npx extension@latest create my-extension --template=new-browser-flags
Repository: extension-js/examples/new-browser-flags
How it works
Configure flags in extension.config.*:
browser.<target>.browserFlags
commands.dev|start|preview.browserFlags
- Optional
excludeBrowserFlags to remove defaults or user flags (behavior depends on whether you target Chromium or Firefox).
Override order: browser defaults → command defaults → CLI-selected command context.
Flag capabilities
| Config key | What it does |
|---|
browser.<target>.browserFlags | Sets default launch flags for a specific browser target. |
commands.dev.browserFlags | Adds or overrides flags for dev runs. |
commands.start.browserFlags | Adds or overrides flags for start runs. |
commands.preview.browserFlags | Adds or overrides flags for preview runs. |
browser.<target>.excludeBrowserFlags | Removes matching default or user flags for a target. |
commands.<name>.excludeBrowserFlags | Removes flags in a command-specific context. |
Example configuration
export default {
browser: {
chrome: {
browserFlags: ["--disable-web-security", "--auto-open-devtools-for-tabs"],
excludeBrowserFlags: ["--mute-audio"],
},
firefox: {
browserFlags: ["--devtools", "--new-instance"],
excludeBrowserFlags: ["--devtools"],
},
},
};
Chromium vs Firefox behavior
-
Chromium family (
chrome, edge, chromium, chromium-based)
- Starts from an internal default flag set, then appends your
browserFlags.
excludeBrowserFlags removes matching default flags (exact-match filtering).
- Extension.js manages
--load-extension=... and filters it out from user-provided flags.
-
Firefox/Gecko family (
firefox, gecko-based / firefox-based)
- Uses user-provided
browserFlags (no large default flag bundle like Chromium).
excludeBrowserFlags removes user flags by prefix matching.
Default Chromium flags
Extension.js applies these flags automatically when launching Chromium-family browsers. Use excludeBrowserFlags to remove any you do not need.
| Flag | Purpose |
|---|
--no-first-run | Disable first run experience |
--disable-client-side-phishing-detection | Disable phishing detection |
--disable-sync | Disable sync to avoid account prompts |
--disable-component-extensions-with-background-pages | Disable built-in extensions not affected by --disable-extensions |
--disable-default-apps | Disable installation of default apps |
--disable-features=InterestFeedContentSuggestions | Disable Discover feed on new tab page (NTP) |
--disable-features=Translate | Disable Chrome translation |
--hide-scrollbars | Hide scrollbars from screenshots |
--mute-audio | Mute any audio |
--no-default-browser-check | Disable default browser check prompt |
--ash-no-nudges | Avoid user education nudges |
--disable-search-engine-choice-screen | Disable search engine choice screen |
--disable-features=MediaRoute | Disable Chrome Media Router background networking |
--use-mock-keychain | Use mock keychain on Mac to prevent blocking dialogs |
--disable-background-networking | Disable background network services |
--disable-breakpad | Disable crashdump collection |
--disable-component-update | Disable component updates |
--disable-domain-reliability | Disable domain reliability monitoring |
--no-pings | Disable hyperlink auditing pings |
--enable-features=SidePanelUpdates | Ensure side panel is visible |
--disable-features=DisableLoadExtensionCommandLineSwitch | Allow --load-extension at the command line |
--enable-unsafe-extension-debugging | Allow Chrome DevTools Protocol (CDP) extension management (Chrome 126+) |
--silent-debugger-extension-api | Suppress the “X is debugging this browser” infobar |
In Docker, continuous integration (CI), or containerized environments,
Extension.js also applies --no-sandbox and --disable-setuid-sandbox
automatically.
Supported targets and references
| Browser | Usage | More information |
|---|
| Chrome | extension dev --browser=chrome | Chrome Flags |
| Edge | extension dev --browser=edge | Edge Flags |
| Firefox | extension dev --browser=firefox | Firefox Flags |
| Chromium-based | extension dev --browser=chromium-based | Chromium Flags |
| Gecko-based | extension dev --browser=gecko-based | Firefox-based browsers share the same flags as Firefox. |
Use binary flags when needed for engine-based targets:
--chromium-binary=...
--gecko-binary=...
Best practices
- Add only necessary flags: Minimize long flag lists to reduce flaky or non-portable setups.
- Prefer
excludeBrowserFlags over replacing defaults: Remove only what conflicts with your workflow.
- Do not pass
--load-extension manually: Extension.js manages extension loading flags internally.
- Validate per browser family: A flag working in Chromium may be invalid or ignored in Firefox.
Next steps