optional\_permissions
=====================

|  |  |
| --- | --- |
| Type | `Array` |
| Mandatory | No |
| Manifest version | 2 or higher |
| Example | 
```json
"optional\_permissions": [
  "webRequest"
]
```
 |

Use the `optional_permissions` key to list permissions that you want to ask for at runtime, after your extension has been installed.

The `permissions` key lists permissions that your extension needs before it can be installed. In contrast, `optional_permissions` lists permissions that your extension doesn't need at install time but it may ask for after it has been installed. To ask for a permission, use the `permissions` API. Asking for a permission may present the user with a dialog requesting them to grant the permission to your extension.

For advice on designing your request for runtime permissions, to maximize the likelihood that users grant them, see Request permissions at runtime.

Starting with Firefox 84, users will be able to manage optional permissions from the Firefox Add-ons Manager. Extensions that use optional permissions should listen for browser.permissions.onAdded and browser.permissions.onRemoved API events to know when a user grants or revokes these permissions.

The key can contain two kinds of permissions: host permissions and API permissions.

Host permissions
----------------

These are the same as the host permissions you can specify in the `permissions` key.

**Note:** When using Manifest V3 or higher:

* in Chrome, host permissions must be specified in the `host_permission` manifest key.
* in Firefox, during the Manifest V3 developer preview, hosts can be in either `host_permissions` or `optional_permissions`. Subject to completion of bug 1766026, hosts will be specified in either `host_permissions` or `optional_host_permissions`.

API permissions
---------------

You can include any of the following here, but not in all browsers: check the compatibility table for browser-specific details.

* `activeTab`
* `background`
* `bookmarks`
* `browserSettings`
* `browsingData`
* `clipboardRead`
* `clipboardWrite`
* `contentSettings`
* `contextMenus`
* `cookies`
* `debugger`
* `declarativeNetRequest`
* `declarativeNetRequestFeedback`
* `declarativeNetRequestWithHostAccess`
* `devtools`
* `downloads`
* `downloads.open`
* `find`
* `geolocation`
* `history`
* `idle`
* `management`
* `nativeMessaging`
* `notifications`
* `pageCapture`
* `pkcs11`
* `privacy`
* `proxy`
* `scripting`
* `sessions`
* `tabHide`
* `tabs`
* `topSites`
* `webNavigation`
* `webRequest`
* `webRequestBlocking`
* `webRequestFilterResponse`
* `webRequestFilterResponse.serviceWorkerScript`

Note that this is a subset of the API permissions allowed in `permissions`.

Of this set, the following permissions are granted silently, without a user prompt:

* `activeTab`
* `cookies`
* `idle`
* `webRequest`
* `webRequestBlocking`
* `webRequestFilterResponse`
* `webRequestFilterResponse.serviceWorkerScript`
Example
-------


```json
 "optional\_permissions": ["\*://developer.mozilla.org/\*"]
```


In Manifest V2 only, enable the extension to ask for privileged access to pages under developer.mozilla.org.


```json
  "optional\_permissions": ["tabs"]
```


Enable the extension to ask for access to the privileged pieces of the `tabs` API.


```json
  "optional\_permissions": ["\*://developer.mozilla.org/\*", "tabs"]
```


In Manifest V2 only, enable the extension to ask for both of the above permissions.

Browser compatibility
---------------------

BCD tables only load in the browser with JavaScript enabled. Enable JavaScript to view data.