build compiles your extension in production mode and writes output to dist/<browser>.
For monorepo/submodule projects, see Environment variables for config-time env resolution (project root first, then workspace-root fallback).
When to use build
- Preparing extension packages for Chrome Web Store, Edge Add-ons, or Firefox Add-ons.
- Running continuous integration (CI) jobs that produce deterministic release artifacts.
- Validating production bundle output and browser-target differences before submission.
Build command capabilities
| Capability | What it gives you |
|---|---|
| Production compilation | Generate optimized extension artifacts per target |
| Multi-target output | Build multiple browser targets in one command |
| Packaging support | Create distribution zip artifacts with optional source bundle |
| CI-friendly behavior | Keep build outputs and naming predictable in automation |
Usage
Build output
After runningbuild, Extension.js generates optimized files for the selected browser targets. Output goes to dist/ with one subfolder per target. Each folder contains bundled JavaScript, CSS, HTML, and required runtime assets.
Example output structure:
Browser target matrix
| Target style | Examples | Notes |
|---|---|---|
| Named targets | chromium, chrome, edge, firefox | Build one specific browser target |
| Engine targets | chromium-based, gecko-based, firefox-based | Useful for engine-family workflows |
| Multi-target | chrome,firefox | Comma-separated targets |
Arguments and flags
| Flag | Alias | What it does | Default |
|---|---|---|---|
[path] | - | Builds a local extension project. | process.cwd() |
--browser <browser> | - | Browser or engine target (chromium, chrome, edge, firefox, engine aliases, or comma-separated values). | chromium |
--polyfill [boolean] | - | Enables browser.* API compatibility polyfill for Chromium targets. | false |
--zip [boolean] | - | Creates a packaged zip artifact. | false |
--zip-source [boolean] | - | Includes source files in zip output. | false |
--zip-filename <name> | - | Sets custom zip filename. | extension name + version |
--silent [boolean] | - | Suppresses build logs. | false |
--extensions <list> | - | Comma-separated companion extensions or store URLs. | unset |
--install [boolean] | - | Install project dependencies when missing. | command behavior default |
--author | --author-mode | Enable maintainer diagnostics. | disabled |
Shared global options
Also supports global flags.Zip behavior
| Option | Effect | Typical use |
|---|---|---|
--zip | Creates a packaged artifact zip | Store submission/manual distribution |
--zip-filename | Sets custom zip name | CI naming conventions |
--zip-source | Adds source archive alongside artifacts | Compliance/review pipelines |
Examples
Building with zip output and custom filename
my-extension.zip.
Building with polyfill support
Building source and artifact zip
Best practices
- Check build logs: Review logs for warnings and missing assets after each build.
- Optimize your manifest: Keep
manifest.jsoncompatible with every target browser. - Name artifacts intentionally: Use
--zip-filenamefor stable CI artifact naming. - Validate target output: Check each
dist/<browser>folder before publishing.
Next steps
- Run existing build output with
preview. - Build and launch in one command with
start. - Configure shared defaults in
extension.config.js. - Review config env loading behavior in Environment variables.
- Review supported targets in browsers available.

