01 / MANIFEST
Derived, not maintained.
Declare pages, workers, content scripts, and icons as objects. Amber resolves paths and writes manifest.json.
Chrome extension toolchain
Amber is the MV3 framework that turns declared entrypoints into a working extension—manifest, dev server, and context-aware runtime included.
$npm create amber@latest
import { defineConfig, BackgroundScript,
ContentScript, Page } from '@amber.js/bundler'
export default defineConfig({
manifest: {
name: 'my-extension',
background: new BackgroundScript(
'src/background.ts'
),
action: { default_popup: new Page('index.html') }
}
})Less MV3 ceremony
Amber owns the wiring that repeats in every MV3 project, so your configuration describes the extension instead of its build output.
01 / MANIFEST
Declare pages, workers, content scripts, and icons as objects. Amber resolves paths and writes manifest.json.
02 / DEVELOPMENT
Pages update through Vite. Content scripts are rebuilt and re-injected. Workers are rebuilt and restarted—without a manual extension reload.
03 / RUNTIME
Call a background handler from a content script and receive its actual return type. Handler signatures propagate across contexts.
Three contexts, one extension
Browser-owned, DOM-free, and restarted when idle. Amber rebuilds and restarts it on change.
Works against a page’s DOM in an isolated JavaScript world. Amber re-injects it into matching tabs.
Popups, options, and extension pages run on their own Chrome extension origin with standard Vite HMR.
Local development
Run the dev server to build an unpacked extension in dist/. Or open an isolated Chromium profile with the extension already loaded.
$ amber dev --dev-browser
Amber v0.5.2 ready in 382 ms
➜ extension written to dist/
➜ Chromium started with extension preloaded
press e to reload extension · p to reload active tab
Ready to make an extension?