> ## Documentation Index
> Fetch the complete documentation index at: https://docs.extensy.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# manifest.json

> Understand every field in the manifest.json file — the configuration file that tells Chrome how to run your extension.

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:

```json theme={null}
{
  "manifest_version": 3,
  "name": "My Extensy Tool",
  "version": "1.0.0",
  "description": "A productivity extension generated by Extensy.",
  "action": {
    "default_popup": "popup.html",
    "default_icon": "icons/icon48.png"
  },
  "permissions": [
    "storage",
    "tabs"
  ],
  "host_permissions": [
    "https://*.google.com/*"
  ],
  "background": {
    "service_worker": "background.js",
    "type": "module"
  },
  "content_scripts": [
    {
      "matches": ["https://*.google.com/*"],
      "js": ["content.js"],
      "run_at": "document_idle"
    }
  ],
  "icons": {
    "16": "icons/icon16.png",
    "48": "icons/icon48.png",
    "128": "icons/icon128.png"
  }
}
```

## Field reference

> **manifest\_version**
>
> 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.

> **name, version, description**
>
> 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"`).

> **action**
>
> 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.

> **permissions**
>
> 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.

> **host\_permissions**
>
> 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>"`).

> **background**
>
> 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.

> **content\_scripts**
>
> 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.

> **icons**
>
> 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.

> [!WARNING]
>
> 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.

> [!TIP]
>
> Before uploading to the Chrome Web Store, validate your manifest against Google's [official manifest documentation](https://developer.chrome.com/docs/extensions/reference/manifest) to confirm every field is correct.

> [!NOTE]
>
> 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.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.