> ## 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.

# Customize Manifest

> Edit your extension's manifest.json to control permissions, icons, match patterns, and metadata.

After downloading your extension from Extensy, you can open and edit `manifest.json` directly to unlock browser features that require explicit configuration — like keyboard shortcuts, web-accessible resources, or custom icon sets.

> [!WARNING]
>
> Manual edits to `manifest.json` are local only. They will not sync back to Extensy. Keep a backup of your edited file before re-generating the extension.

## Edit the name, version, and description

Open `manifest.json` and update the top-level identity fields:

```json theme={null}
{
  "manifest_version": 3,
  "name": "My Tab Manager",
  "version": "1.2.0",
  "description": "Organize and search your open tabs instantly."
}
```

Increment `version` each time you publish an update to the Chrome Web Store.

## Add or remove permissions

Add permissions to the `"permissions"` array to request access to browser APIs. Remove any permissions your extension does not use — the Chrome Web Store flags unnecessary permissions during review.

**Before:**

```json theme={null}
{
  "permissions": ["storage"]
}
```

**After (adding tabs and alarms):**

```json theme={null}
{
  "permissions": ["storage", "tabs", "alarms"]
}
```

> [!NOTE]
>
> Some APIs (like `"tabs"` and `"history"`) require user consent and display a warning during installation. Only include permissions your extension actually needs.

Common permissions and when to use them:

| Permission | Use case |
| - | - |
| `storage` | Read/write `chrome.storage` |
| `tabs` | Access tab URLs, titles, and states |
| `alarms` | Schedule recurring tasks |
| `notifications` | Show desktop notifications |
| `contextMenus` | Add items to the right-click menu |
| `activeTab` | Temporary access to the current tab on user action |

## Adjust content script match patterns

Control which pages your content scripts run on by editing the `"matches"` array under `"content_scripts"`:

```json theme={null}
{
  "content_scripts": [
    {
      "matches": ["https://*.github.com/*"],
      "js": ["content.js"],
      "run_at": "document_end"
    }
  ]
}
```

**Specific domain**

```json theme={null}
"matches": ["https://www.example.com/*"]
```

Runs only on `example.com`.

**All HTTPS pages**

```json theme={null}
"matches": ["https://*/*"]
```

Runs on every HTTPS page the user visits.

**Multiple domains**

```json theme={null}
"matches": [
  "https://*.github.com/*",
  "https://*.gitlab.com/*"
]
```

Runs on GitHub and GitLab.

## Update icon paths

Replace the generated icon placeholders with your own files. Icons must be PNG files at each declared size:

```json theme={null}
{
  "icons": {
    "16": "icons/icon16.png",
    "32": "icons/icon32.png",
    "48": "icons/icon48.png",
    "128": "icons/icon128.png"
  },
  "action": {
    "default_icon": {
      "16": "icons/icon16.png",
      "32": "icons/icon32.png"
    },
    "default_title": "Open My Tab Manager"
  }
}
```

Place your icon files in the same directory structure you reference above, then reload the extension in `chrome://extensions`.

## Add keyboard shortcuts

Use the `"commands"` key to register keyboard shortcuts:

```json theme={null}
{
  "commands": {
    "toggle-popup": {
      "suggested_key": {
        "default": "Ctrl+Shift+Y",
        "mac": "Command+Shift+Y"
      },
      "description": "Toggle the extension popup"
    }
  }
}
```

> [!TIP]
>
> Listen for the command in your background service worker with `chrome.commands.onCommand.addListener`.

## Make assets accessible to web pages

If a content script needs to load images or scripts from your extension package into the page, declare them under `"web_accessible_resources"`:

```json theme={null}
{
  "web_accessible_resources": [
    {
      "resources": ["images/*.png", "fonts/*.woff2"],
      "matches": ["https://*/*"]
    }
  ]
}
```

After declaring a resource, reference it in your content script using:

```javascript theme={null}
const imgUrl = chrome.runtime.getURL("images/logo.png");
```


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