Unblock local development quickly by checking the most common failures first. Use this page as a practical triage path before deeper debugging.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.
Troubleshooting capabilities
| Area | What this helps you verify |
|---|---|
| Restart diagnostics | Whether a restart is required for structural changes |
| Dependency setup | Whether optional tooling is missing for the current stack |
| Browser launch | Whether target/browser binary configuration is valid |
| Build/preview flow | Whether output exists for preview and matches target |
| Manifest paths | Whether referenced files resolve correctly |
Fast triage flow
- Reproduce with one target (
--browser=chromium). - Remove custom profile and binary flags.
- Confirm whether the issue happens in
dev,build, or both. - Fix one error class at a time (restart, dependency, path, or launch).
Quick diagnosis decision tree
| If this fails… | Check first | Next action |
|---|---|---|
| Extension does not load | Build and manifest errors | Verify referenced files and rerun dev |
| Browser does not launch | --browser + binary path | Remove custom binary/profile flags and retry |
| Changes are not updating | Update type (hot module replacement vs restart-required) | Review Dev update behavior and restart when required |
preview fails | Existing dist/<browser> output | Run extension build --browser=<target> first |
| Runtime still broken | Minimal reproducible setup | Reduce scope and capture exact command + error |
Common issues
Restart required diagnostics
If you see a restart-required error, stop and rerunextension dev.
Typical triggers:
- Manifest entrypoint list changes.
- Adding/removing files in
pages/orscripts/. - Structural HTML script/style entry changes.
Missing optional dependencies
The CLI installs some integrations on demand (for example, Vue/Preact refresh tooling, style preprocessors). If the CLI prompts for optional dependency installation:- Allow the install.
- Restart
extension dev. - Run again after dependencies finish installing.
Browser binary problems
If target browser launch fails:- Verify custom binary path (
--chromium-binary/--gecko-binary). - Confirm browser target is compatible with the provided binary.
- Fall back to the default
chromiumtarget to isolate configuration issues.
Build runs but preview fails
preview expects existing build output.
- Run
extension build --browser=<target>. - Then run
extension preview --browser=<target>.
Manifest reference errors
If build reports missing manifest files:- Verify paths are relative to manifest location.
- Verify leading
/usage (public-root semantics). - Ensure files actually exist in source/public locations.
Docker, dev containers, and Codespaces
When running inside a container, the dev server binds to127.0.0.1 by default, so the host machine cannot reach it.
- Pass
--host 0.0.0.0to bind to all interfaces. - Use
--port 0to let the OS assign a free port if8080is taken. - If browser connections are slow or flaky in continuous integration (CI) containers, increase the connection timeouts using browser transport tuning variables.
Node.js script in scripts/ folder
If the build fails with scripts/ is a reserved folder in Extension.js, you have a Node.js file inside the scripts/ special folder. Extension.js wraps every file in scripts/ with a browser content-script runtime. Node.js-only files fail in this context.
Move the file to a different folder at the project root (for example, bin/, tools/, or ci-scripts/). See special folders for details.
Still blocked after fixes
If the issue persists:- Clear temporary assumptions and reproduce from a clean terminal session.
- Reduce to the smallest manifest/entrypoint case that still fails.
- Capture the exact command + error output for issue reporting.
Debugging checklist
- Reproduce with a single browser target first (
--browser=chromium). - Reproduce without custom profile/binary flags.
- Check whether the issue appears in both
devandbuild. - Keep one change at a time when touching manifest + entrypoint files.
Next steps
- Review Security checklist.
- Review Performance playbook.

