> ## Documentation Index
> Fetch the complete documentation index at: https://extension.js.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Browser targeting for Chrome, Firefox, Edge

> Configure browser targets for Chrome, Firefox, and Edge extension development. Covers targeting, profiles, flags, and custom binaries in Extension.js.

Run one extension codebase across Chrome, Edge, Firefox, and custom binaries
with explicit browser targeting workflows.

## Chrome extension development

For Chrome extension development, target `chrome` (or `chromium` for the default Chromium binary): `extension dev --browser=chrome`. Extension.js loads the extension into a fresh, isolated profile and applies a sane set of [Chrome launch flags](/docs/browsers/browser-flags) so reload behavior is predictable.

## Firefox extension development

For Firefox extension development, target `firefox`: `extension dev --browser=firefox`. Manifest V3 background scripts compile to a non-persistent `scripts` array (Firefox does not use `service_worker`), and Firefox preferences replace the Chromium concept of `chrome://flags`. See [Browser preferences](/docs/browsers/browser-preferences).

## Edge extension development

For Edge extension development, target `edge`: `extension dev --browser=edge`. Edge shares the Chromium engine, so most flags and APIs match Chrome, but Extension.js still emits a separate `dist/edge` artifact for distribution.

## Cross-browser extension development

For cross-browser extension development, run multiple targets in one command (`extension dev --browser=chrome,firefox`) and keep browser differences in [browser-prefixed manifest fields](/docs/features/browser-specific-fields). One project, one `manifest.json`, distinct outputs per browser. See [Cross-browser compatibility](/docs/features/cross-browser-compatibility) for the full pipeline.

You can also run two dev sessions concurrently, one terminal per browser. Session state (ready contract, control channel, logs, profile) is keyed per browser, so a Chrome session and a Firefox session never collide. See [Session artifacts](/docs/concepts/session-artifacts) for the on-disk layout.

## What to read first

| Need | Read this |
| - | - |
| Choose browser targets quickly | [Browsers available](/docs/browsers/browsers-available) |
| Customize launch behavior | [Browser flags](/docs/browsers/browser-flags) |
| Configure Firefox preferences | [Browser preferences](/docs/browsers/browser-preferences) |
| Control profile isolation | [Browser profile](/docs/browsers/browser-profile) |
| Run Brave or custom binaries | [Running other browsers](/docs/browsers/running-other-browsers) |
| Develop under WSL | [WSL support](/docs/browsers/wsl) |

## Practical target strategy

1. Use named targets (`chrome`, `edge`, `firefox`) for daily checks.
2. Use comma-separated targets for release validation.
3. Use engine targets only when you need custom binaries.
4. Keep browser differences in browser-prefixed manifest fields.

## Next steps

* Learn manifest filtering in [Cross-browser compatibility](/docs/features/cross-browser-compatibility).
* Configure browser-specific keys in [Browser-specific manifest fields](/docs/features/browser-specific-fields).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.