Build extension UIs with plain HTML entrypoints while Extension.js handles asset wiring, script/style bundling, and dev-time update behavior.
Extension.js processes HTML entrypoints from manifest fields and from the special pages/ folder.
| Capability | What it gives you |
|---|---|
| Entrypoint discovery | Compile HTML declared in manifest and pages/ with one flow |
| Asset wiring | Bundle referenced scripts and styles from HTML tags |
| Public path handling | Keep intentional public-root assets stable |
| Dev tracking | Recompile on HTML and referenced asset edits |
The following manifest fields use HTML files as entrypoints:
| Manifest field | File type expected |
|---|---|
action.default_popup |
.html |
background.page |
.html |
chrome_url_overrides.* |
.html |
devtools_page |
.html |
options_ui.page / options_page |
.html |
page_action.default_popup |
.html |
sandbox.pages |
.html |
side_panel.default_path |
.html |
sidebar_action.default_panel |
.html |
You can also add standalone pages under pages/ without expanding manifest entrypoint fields for every file.
For each HTML entrypoint, Extension.js:
/icon.png) as public assets/ paths are treated as extension public-root paths.$EXTENSION_PUBLIC_* and related placeholders can be replaced in emitted HTML during compilation.Place extra files in pages/:
/ paths only for intentional public assets.pages/ for additional extension pages that are not primary manifest UI entrypoints.