CLIActive

Extension.js

Cross-browser extension development tool for Chrome and Firefox.

Open source page

Field note

What it does

Extension.js compiles a single extension project into per-browser artifacts for Chrome, Edge, and Firefox, handling browser-specific manifest fields and API polyfills.

Capabilities

Available capabilities

CI IntegrationSecurity review capabilitiesHard ReloadRuntime Attached GateAutomatic Update Mode SelectionHosted MCP serverHeadless handler testingCross-browser buildsNested prefix resolutionPerformance budgetsMCP ServerAI Agent CLI ControlQuality gatesEntry discovery integrationPath normalizationCross-browser Build TargetsScaffoldingDocker and container CI supportllms.txt endpointReference validationManifest compilationBoilerplate GenerationHot Module ReplacementContent-script safety checksThree-tier precedencePer-page AI actionsFamily-wide prefix matchingCLI agent controlCapabilities HandshakeFetch GitHub repositoriesTelemetry controlsMessage boundary validationAct Verbs (storage, reload, open, inspect)Build/preview flowCommand ConfigurationCustom path resolutionPolyfill supportAutomation contract via ready.json--ai-help Self-DescriptionUI surface optimizationPolyfill supportManifest pathsBackground translationType-Safe ConfigurationRspack ConfigurationManifest filteringBrowser-specific field filteringCI-ready reportsCross-browser submission workflowRestart diagnosticsPlaywright E2E TestingBrowser SupportPlaywright E2E testingManifest field rewritingBrowser-prefix resolutionEnvironment LoadingE2E testingBrowser Target ConfigurationPermissions scope verificationRun extensionsTargeted outputsService worker optimizationHot Module ReloadingMulti-browser build matrixMachine JSON OutputCI templatesDependency setupContent script optimizationCross-browser runtime checksWeb-accessible resources exposure checkBrowser launchTemplate managementConfig FilesStore metadata management

Tags

Tags

Ways to use it

Ways to use it

cli

javascript / extension

docker

Not filed / https://extension.js.org/docs/workflows/ci-templates

cli

javascript / extension

cli

javascript / extension

npm

typescript / @playwright/test

other

Not filed / https://extension.js.org/docs/workflows/playwright-e2e

cli

javascript / extension

mcp

json / extensionjs

cli

JavaScript / extension

cli

Not filed / extension

Product features

Product features

Agents that drive the CLI

Auto-repair

Diagnoses and auto-repairs manifest shapes that Chromium would refuse to load.

​ Automation contract (recommended)

Browser flag

Use --browser=firefox or --browser=edge to target different browsers.

Browser Flags

Add or exclude browser launch flags.

Browser-prefixed keys

Supports chromium, chrome, edge, firefox, gecko prefixes for top-level and nested fields.

Browser-specific manifest fields

Prefixed manifest keys for Chromium and Gecko targets.

Build-time field filtering

Emit only the manifest fields matching the active target at compile time.

​ Canonical Playwright flow (AI-friendly)

CLI Commands

Provides commands like create, dev, and build for extension development.

​ Common pitfalls

Companion Extensions

Load companion extensions together with the main extension.

Cross-browser compatibility

Ship one codebase to multiple browsers.

Custom Binaries

Use custom Chromium or Gecko binary paths.

Custom browser binary

Specify a custom browser binary for development.

​ Development mode vs test mode

Engine-family resolution

Environment variables

Manage environment-specific behavior.

Extension configuration

Centralize build/runtime defaults.

Framework templates

Templates for React, Vue, Svelte, Preact, TypeScript, and vanilla JS.

GitHub URL input

Pass a GitHub URL to extension dev to fetch and build the extension.

Hosted MCP server

Exposes a Model Context Protocol server at https://extensionjs.mintlify.app/mcp for AI clients.

​ Important distinction: run mode vs readiness gate

Init command

Create a minimal extension from scratch with init.

Inline-prefixed manifest fields

Define browser-specific manifest values inline with prefixes like chromium: and firefox:.

llms.txt endpoints

Provides /llms.txt index and /llms-full.txt full-content bundle for ingestion.

Local path input

Use a local path relative to the current working folder.

Manifest change recompilation

Recompiles and triggers hard reload on manifest changes; may require restart for structural changes.

Manifest source locations

Reads manifest from src/manifest.json or project root, not public/.

Multi-platform builds

Build and package for target matrices.

Offline scaffolding

JavaScript template ships inside the CLI and scaffolds offline.

One-click install

Contextual menu on each page provides install buttons for Claude, Cursor, VS Code, and ChatGPT.

Output path rewriting

Rewrites background.service_worker to background/service_worker.js and side_panel.default_path to sidebar/index.html.

Per-browser output

Outputs dist/chrome, dist/edge, dist/firefox.

Per-page AI actions

Copy page as Markdown, view as Markdown, and ask ChatGPT/Claude/Perplexity with page context.

Permission design guidance

Recommends minimal permissions and optional permissions.

Playwright E2E testing for extensions

​ Playwright testing capabilities

​ Practical guidance for extensions

Profile Management

Set browser profile path, persist profile, keep changes, copy from existing profile.

​ Recommended baseline

Reproducible scaffolds

Templates pinned to an immutable commit, ensuring identical scaffolds.

Rspack configuration

Extend bundler behavior safely.

​ Running tests

Scaffold from URL

Scaffold directly from a GitHub or ZIP URL.

Special folders

Keep non-manifest assets organized.

Supported manifest fields

Handles action, background, content_scripts, icons, options_ui, and more.

Telemetry and privacy

Template catalog

Catalog with 6 groups and roughly 50 templates.

​ Typical setup

​ Why use it

ZIP URL input

Treat other http(s) URLs as ZIP archives and extract them.