
Browser Extension Builder
Scaffold and ship Manifest V3 browser extensions with content scripts, service workers, popup UI, and Chrome Web Store publishing readiness.
Overview
Browser Extension Builder is an agent skill for the Build phase that guides Manifest V3 extension architecture, content scripts, popup UI, and Chrome Web Store publishing for indie builders.
Install
npx skills add https://github.com/sickn33/antigravity-awesome-skills --skill browser-extension-builderWhat is this skill?
- Manifest V3 architecture: service workers, content scripts, permissions model
- Chrome and cross-browser extension structure with publish-to-store guidance
- Popup and extension UX patterns that differentiate tools from toy extensions
- Monetization strategy framing for indie extension products
- Documented project layout centered on manifest.json and extension folders
Adoption & trust: 1.1k installs on skills.sh; 40.1k GitHub stars; 2/3 security scanners passed (skills.sh audits).
What problem does it solve?
You want a browser extension that solves a daily problem but MV3, permissions, and store rules feel like a separate platform from your usual web app stack.
Who is it for?
Solo builders shipping a focused Chrome or Firefox extension with popup and content-script value.
Skip if: Teams building only SaaS web apps, native mobile apps, or extensions that require enterprise policy deployment without store listing.
When should I use this skill?
User is building or planning a Chrome, Firefox, or cross-browser extension including MV3, content scripts, popup UI, or store publishing.
What do I get? / Deliverables
You leave with a structured MV3 project plan, UI and worker patterns, and a clearer path to cross-browser support and store submission.
- Extension repository structure with manifest.json and worker/script boundaries
- Popup and content-script implementation guidance
- Store publishing and monetization checklist aligned to extension products
Recommended Skills
Journey fit
Extension architecture, MV3, and store publishing are product construction tasks that belong on the Build shelf. Popup interfaces, content-script UX, and extension-facing UI patterns map to frontend even when background workers handle logic.
How it compares
Extension-specific build playbook—not a generic React SPA scaffold or backend API skill.
Common Questions / FAQ
Who is browser-extension-builder for?
Indie developers and solo founders targeting Chrome Web Store or Firefox Add-ons who need MV3 structure, UX, and publishing guidance from one skill.
When should I use browser-extension-builder?
During Build when scaffolding manifest.json, content scripts, background service workers, popup HTML/CSS/JS, or preparing monetization and listing assets.
Is browser-extension-builder safe to install?
Extensions handle sensitive browser APIs—review Security Audits on this page and audit permissions and content-script scopes in your own manifest.
SKILL.md
READMESKILL.md - Browser Extension Builder
# Browser Extension Builder Expert in building browser extensions that solve real problems - Chrome, Firefox, and cross-browser extensions. Covers extension architecture, manifest v3, content scripts, popup UIs, monetization strategies, and Chrome Web Store publishing. **Role**: Browser Extension Architect You extend the browser to give users superpowers. You understand the unique constraints of extension development - permissions, security, store policies. You build extensions that people install and actually use daily. You know the difference between a toy and a tool. ### Expertise - Chrome extension APIs - Manifest v3 - Content scripts - Service workers - Extension UX - Store publishing ## Capabilities - Extension architecture - Manifest v3 (MV3) - Content scripts - Background workers - Popup interfaces - Extension monetization - Chrome Web Store publishing - Cross-browser support ## Patterns ### Extension Architecture Structure for modern browser extensions **When to use**: When starting a new extension ## Extension Architecture ### Project Structure ``` extension/ ├── manifest.json # Extension config ├── popup/ │ ├── popup.html # Popup UI │ ├── popup.css │ └── popup.js ├── content/ │ └── content.js # Runs on web pages ├── background/ │ └── service-worker.js # Background logic ├── options/ │ ├── options.html # Settings page │ └── options.js └── icons/ ├── icon16.png ├── icon48.png └── icon128.png ``` ### Manifest V3 Template ```json { "manifest_version": 3, "name": "My Extension", "version": "1.0.0", "description": "What it does", "permissions": ["storage", "activeTab"], "action": { "default_popup": "popup/popup.html", "default_icon": { "16": "icons/icon16.png", "48": "icons/icon48.png", "128": "icons/icon128.png" } }, "content_scripts": [{ "matches": ["<all_urls>"], "js": ["content/content.js"] }], "background": { "service_worker": "background/service-worker.js" }, "options_page": "options/options.html" } ``` ### Communication Pattern ``` Popup ←→ Background (Service Worker) ←→ Content Script ↓ chrome.storage ``` ### Content Scripts Code that runs on web pages **When to use**: When modifying or reading page content ## Content Scripts ### Basic Content Script ```javascript // content.js - Runs on every matched page // Wait for page to load document.addEventListener('DOMContentLoaded', () => { // Modify the page const element = document.querySelector('.target'); if (element) { element.style.backgroundColor = 'yellow'; } }); // Listen for messages from popup/background chrome.runtime.onMessage.addListener((message, sender, sendResponse) => { if (message.action === 'getData') { const data = document.querySelector('.data')?.textContent; sendResponse({ data }); } return true; // Keep channel open for async }); ``` ### Injecting UI ```javascript // Create floating UI on page function injectUI() { const container = document.createElement('div'); container.id = 'my-extension-ui'; container.innerHTML = ` <div style="position: fixed; bottom: 20px; right: 20px; background: white; padding: 16px; border-radius: 8px; box-shadow: 0 4px 12px rgba(0,0,0,0.15); z-index: 10000;"> <h3>My Extension</h3> <button id="my-extension-btn">Click me</button> </div> `; document.body.appendChild(container); document.getElementById('my-extension-btn').addEventListener('click', () => { // Handle click }); } injectUI(); ``` ### Perm