Build, test and ship Manifest V3 extensions

A practical cross-browser resource for building, testing, and publishing modern browser extensions. Every page leads with the constraint that bites first — service worker eviction, permission review, the API the other engine does not have, or the auto-update that landed while the user had twenty tabs open.

4 tracks · 40 topic guides · 383 in-depth pages · Chrome, Firefox and Safari differences on every page

Four tracks through MV3

Pick the track that matches what you are building right now — each one ends where the next begins.

Browse every topic

40 guides, each with runnable code, an execution-context note under every snippet, and the Chrome, Firefox and Safari divergences spelled out.

Testing, Debugging & Performance Optimization

Unit test, end-to-end automate, debug every MV3 execution context, and profile service worker performance — a practical engineering discipline for Chrome, Firefox, and Safari extensions.

Core APIs & Cross-Browser Data Management

Master MV3 storage, messaging, declarativeNetRequest, tabs, and scripting APIs — with cross-browser compatibility patterns for Chrome, Firefox, and Safari extensions.

MV3 Architecture & Extension Lifecycle

Master Manifest V3 service workers, content scripts, popup & options UI, and store compliance — with cross-browser patterns for Chrome, Firefox, and Safari.

UI/UX Patterns & Interactive Components

Build production-ready extension UIs in MV3: popup design, options pages, keyboard shortcuts, context menus, and side panels — with accessibility, theming, and CSP patterns.

Recently added

The newest guides: eight new topics — cookies and request observation, native messaging, backend sync, host permissions and site access, the MV2 to MV3 migration, the manifest keys that cause the most trouble, UI injected into web pages, and privacy-preserving usage analytics — plus deeper coverage of every existing topic, from omnibox ranking to reproducible release builds.

Cookies & webRequest Observation

Read, write and watch cookies with chrome.cookies, observe network traffic with non-blocking webRequest in MV3, and handle partitioned cookies, incognito stores and auth challenges.

Native Messaging & Host Integration

Connect an MV3 extension to a native app with connectNative and sendNativeMessage: host manifests, the length-prefixed wire format, per-OS registration, Safari's app extension model and debugging.

Network Requests & Backend Sync

Talk to your own backend from an MV3 extension: cross-origin fetch with host permissions, CORS from content scripts, WebSockets and push in a service worker, streaming, offline queues and sync.

Host Permissions & Site Access

How MV3 extensions get access to websites: host_permissions, optional hosts, activeTab, Chrome's user site-access controls, incognito modes, Firefox's revocable grants and Safari's per-site prompts.

Manifest V2 to V3 Migration

Migrate a Manifest V2 extension to MV3 end to end: manifest key changes, background page to service worker, action APIs, chrome.scripting, remote code removal, DOM-free background code and the MV2 timeline.

Manifest Keys Reference

A practical reference to MV3 manifest.json keys: required fields, background, action, permissions, content scripts, web_accessible_resources, CSP, key, minimum versions, icons and browser_specific_settings.

In-Page Overlays & Injected UI

Build UI inside web pages from an MV3 content script: shadow DOM isolation, floating buttons, highlights, tooltips at the selection, modal dialogs in the top layer, and removing everything cleanly.

Usage Analytics & Feature Flags

Measure and steer an MV3 extension without remote code or creepy tracking: privacy-first event collection from the service worker, GA4 Measurement Protocol, uninstall surveys, remote flags and A/B tests.

Building a Command Palette in an Extension

Build a keyboard-first command palette for an MV3 extension: opening it with a command, an accessible combobox and listbox, fuzzy matching, running actions in the right context, and an in-page palette in shadow DOM.

Start here

Coming from MV2

Your background page is now an evictable service worker, and that single change explains most of the bugs you are about to meet.

Migration checklist

Building the interface

Popups, options pages, side panels and context menus — including which surface is right for state the user needs to keep visible.

UI patterns

Getting it published

Permission justifications reviewers accept, the audit that catches rejections before upload, and a release pipeline that reaches all three stores.

Submission & compliance

Shipping version two

An auto-update lands on a running browser: storage migrations that survive eviction, and the open tabs still running last week's content script.

Updates & migration