Keep development fast by using the lightest update strategy for each file change.
Need fast feedback after each file change? Extension.js chooses the safest and fastest update path automatically:
Before evaluating reload behavior, confirm the same setup checks shown in the Extension.js DevTools Confirm setup dialog:
| Setup step | Why it matters for reload/HMR |
|---|---|
Turn on Developer mode in chrome://extensions |
Lets extension runtime updates (including service worker changes) apply reliably during development. |
| Allow local network access prompt for content scripts | Required for reliable content-script reload workflows when the browser asks for permission. |
If either step is missing, reload behavior can appear inconsistent even when the build pipeline is healthy.
HMR is used when code can update without restarting extension runtime wiring.
Common examples:
Some file changes require reloading the extension runtime itself.
Typical hard-reload triggers:
manifest.json_locales/**.jsonExtension.js applies browser-specific hard reload mechanisms internally (Chromium and Firefox flows differ under the hood), but behavior is unified at the CLI/user level.
When extension entrypoint references change (instead of just module contents), Extension.js reports restart-required diagnostics so you do not continue with a stale graph.
Typical restart-required scenarios:
pages/ / scripts/ file set changes in watch mode (especially removals)| Change type | Default behavior |
|---|---|
| JS/CSS module updates in existing entries | HMR where supported |
manifest.json / locales / service-worker-critical updates |
Hard extension reload |
| Entrypoint structure updates (manifest lists, HTML script/style refs) | Restart required |
pages/ or scripts/ file add/remove during watch |
Warning/error with restart guidance |
pages/ and scripts/ follow the same reload strategy as manifest-declared assets.
Example:
Note: The
/pagesand/scriptsfolders are special folders recognized by Extension.js for hot-reloading. Each entry in these folders is treated as a separate page or script that can be reloaded independently.
manifest.json and locale edits to avoid repeated hard extension reloads.pages/ and scripts/ for off-manifest assets, then restart when file sets or entry wiring changes.