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.
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 (runner-dependent behavior)
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+) |
In Docker, continuous integration (CI), or containerized environments Extension.js also adds --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