start when you want a production build and immediate browser launch in one command.
The start command runs a production build first, then launches the built extension using the same flow as the preview command.
When to use start
- Manually validating production behavior right after compilation.
- Reproducing runtime differences between watch mode and production output.
- Running a production-like check locally without a separate
buildthenpreviewstep.
Start command capabilities
How it differs from other commands
dev: dev server + hot module replacement (HMR)/watch modebuild: production build onlypreview: launch an existing built extension without buildingstart:build+previewin sequence
Usage
Arguments and flags
Two deprecated aliases are hidden from
--help but still work:
--wait-format <pretty|json>maps onto--outputand warns once on stderr. Migrate scripts to--output.--authorand--author-modemap onto--debug.
Browser support
start has no Safari path. Passing --browser safari (or webkit-based) exits with E_UNSUPPORTED_BROWSER. Use dev or build for Safari targets.
Automation metadata
start writes readiness metadata to:
dist/extension-js/<browser>/ready.json
--no-browser:
- Wait for
status: "ready"before launching external runners. - Handle
status: "error"as a deterministic failure signal. - Use
runIdandstartedAtto correlate a specific runtime session.
--no-browser and readiness synchronization
--no-browser only disables browser launch. It does not block external runners until the production build finishes.
For production-oriented Playwright, continuous integration (CI), and AI workflows:
- Run
extension start --no-browseras the producer process. - Run
extension start --wait --browser=<browser>as the readiness gate. - Launch external browser automation only after
status: "ready".
--wait exits non-zero on error/timeout and ignores stale contracts from dead processes (pid no longer alive).
Because start can finish quickly, a contract from a completed run still counts when its timestamp is within a 60 second window.
--wait requires a local project path. Passing a remote URL exits with E_ARGS.
If you pass both --wait and --no-browser in the same invocation, --wait takes precedence. The command runs in wait-only mode.
Machine output with --output json
--output json prints schema-1 envelopes on stdout, one JSON object per line:
- A plain
startrun prints onestatus: "started"frame before the build. It carries the project path, browser list, requested port, andpid. - A
start --waitrun prints onestatus: "ready"frame on success. Itsvalue.resultsarray carries the full ready contract per browser. - A failed build prints one
ok: falseframe withstatus: "build-failed"anderror.code: "E_COMPILE"before the process exits1.
Logging flags
These flags are experimental and may change between minor releases.Shared global options
Also supports Global flags.Examples
Start with default browser
Start in Firefox
Build and skip browser launch
Behavior notes
startdoes not run a dev server and does not provide hot module replacement (HMR) or watch mode.startis production-mode oriented. Usedevfor iterative local development.- For machine consumers, parse
dist/extension-js/<browser>/ready.jsoninstead of terminal text.

