> ## 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 guide for Chrome, Firefox, and Edge

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

<AvatarBrowsers browsers={["chrome", "firefox", "edge"]} />

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.

## 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) |

## 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).

## Video walkthrough
