Chrome extension toolchain

Write the extension.
Skip the wiring.

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

amber.config.tssource
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') }
  }
})
build output
dist/
├─ entries/background.js generated
├─ index.html
└─ manifest.json

Less MV3 ceremony

The browser extension work you meant to do.

Amber owns the wiring that repeats in every MV3 project, so your configuration describes the extension instead of its build output.

01 / MANIFEST

Derived, not maintained.

Declare pages, workers, content scripts, and icons as objects. Amber resolves paths and writes manifest.json.

02 / DEVELOPMENT

HMR reaches MV3.

Pages update through Vite. Content scripts are rebuilt and re-injected. Workers are rebuilt and restarted—without a manual extension reload.

03 / RUNTIME

Messages carry their type.

Call a background handler from a content script and receive its actual return type. Handler signatures propagate across contexts.

Three contexts, one extension

Keep the boundaries.
Lose the blind spots.

How Amber maps to MV3
service worker

Background

Browser-owned, DOM-free, and restarted when idle. Amber rebuilds and restarts it on change.

</>web page

Content script

Works against a page’s DOM in an isolated JavaScript world. Amber re-injects it into matching tabs.

extension origin

Page

Popups, options, and extension pages run on their own Chrome extension origin with standard Vite HMR.

Local development

Start coding. Amber handles the loading ritual.

Run the dev server to build an unpacked extension in dist/. Or open an isolated Chromium profile with the extension already loaded.

Dev server details
my-extension — zsh

$ 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?

Your first build should be about the product.

Create an Amber project