dist/<browser>. It can also generate zip packages for distribution.
How it works
Run a production build:chromium unless you override it.
Browser selection
You can target a specific browser/engine:chromeedgefirefoxchromiumchromium-basedgecko-based/firefox-based(aliases)
chrome, edge, and firefox.
Output layout
Each target writes to its own folder:dist/chromedist/edgedist/firefoxdist/chromiumdist/chromium-baseddist/gecko-based
Build capabilities
| Option | What it does |
|---|---|
--browser=<target> | Builds for a specific browser or engine family. |
--zip | Creates a distribution zip per target output. |
--zip-filename=<name> | Overrides the default zip file name. |
--zip-source | Creates a source archive alongside output. |
--polyfill | Enables compatibility behavior for browser.* API usage in Chromium-family targets. |
Generating a zip file
Generate a distribution zip from each target output with--zip:
name + version, for example:
my-extension-1.0.0.zip
my-release.zip inside the target dist/<browser> folder.
Include source archive
Use--zip-source to generate a source archive alongside distribution output.
--zip-source produces:
dist/<name>-<version>-source.zip
Polyfilling browser APIs
If your code relies on Gecko-stylebrowser.* APIs and you need Chromium compatibility, enable --polyfill:
Best practices
- Build per target in continuous integration (CI): Treat each browser output as an independent artifact.
- Use a browser matrix command for parity checks: Catch target-specific issues early in one pipeline step.
- Package intentionally: Use
--zipfor store uploads and--zip-sourcefor traceable source artifacts. - Keep target configuration explicit: Use
extension.config.*command/browser defaults for reproducible builds.
Next steps
- Learn more about the Browsers available.
- Explore Path resolution for asset/output mapping details.

