Skip to main content
Every Chrome extension contains exactly one manifest.json file. It is the configuration file Chrome reads first, and it tells the browser your extension’s name, version, what permissions it needs, and which files to load. Without it, your extension cannot run. When Extensy generates your extension, it auto-fills all of these fields based on your prompt. You only need to edit this file if you are doing manual refinements.

Minimal MV3 manifest

Here is a complete, working Manifest V3 example with every core field included:

Field reference

Must be set to 3. This value tells Chrome which extension platform architecture to use. Omitting it or setting it to 2 will cause your extension to be rejected by the Chrome Web Store.
Basic metadata shown on the browser’s extensions page (chrome://extensions) and in your Chrome Web Store listing. version follows semantic versioning (e.g., "1.0.0").
Configures the toolbar icon and the popup window that appears when a user clicks it. default_popup points to your popup HTML file; default_icon sets the toolbar icon image.
An array of Chrome API capabilities your extension needs — such as storage, tabs, scripting, or notifications. Each entry you add is shown to users during installation.
Lists the specific websites or URL patterns your extension is allowed to run on or make fetch requests to. Keep this as narrow as possible (e.g., "https://*.github.com/*" instead of "<all_urls>").
Points to your service worker file (background.js), which handles browser events even when the extension’s UI is closed. Setting "type": "module" lets you use ES module import syntax inside that file.
An array of script configurations. Each entry specifies which URLs to match (matches), which JavaScript files to inject (js), and when to inject them (run_at). "document_idle" waits until the page has fully loaded.
Paths to icon images at different sizes. Chrome uses these on the toolbar, the extensions management page, and the store listing. Providing all three sizes (16, 48, 128) ensures your icon looks sharp everywhere.

Common manifest issues

  1. Incorrect file paths — If you rename popup.html or background.js but do not update the manifest to match, your extension will fail to load with a “Could not load manifest” error.
  2. Missing permissions — If your code calls chrome.storage.set() but "storage" is not in your permissions array, you will see a runtime console error and the call will silently fail.
  3. Invalid JSON — A missing comma, trailing comma, or unmatched quote causes Chrome to show a “Manifest file is unreadable” error. Use a JSON linter to catch these before uploading.
Never add permissions your extension does not use. Each extra permission increases the chance that a user or Chrome Web Store reviewer will hesitate before installing your extension.
Before uploading to the Chrome Web Store, validate your manifest against Google’s official manifest documentation to confirm every field is correct.
Extensy auto-generates and validates your manifest.json at build time. The permissions, file paths, and host patterns are all derived directly from your prompt.