WebExtensions
WebExtension manifest files
manifest.json
Validate
Check your file against this schema
Opens the validator with this schema already loaded. Paste your
manifest.json and it validates in your browser — nothing is uploaded.
Reference
Fields
Generated directly from the schema, following local
$refs, to two levels of nesting.
| Field | Type | Description |
|---|---|---|
author | string | The extension's author, intended for display in the browser's user interface. If the developer key is supplied and it contains the "name`" property, it will override the author key. There's no way to specify multiple authors |
background | object | Use the background key to include one or more background scripts, a background page, or a Service worker in your extension. Background scripts are the place to put code that needs to maintain a long-term state or perform long-term |
background.page | string | If you need specific content in the background page, you can define a page using the page property. This is a String representing a path relative to the manifest.json file to an HTML document included in your extension bundle. If you use |
background.scripts | array<string> | An Array of Strings, each of which is a path to a JavaScript source. The path is relative to the manifest.json file itself. These are the scripts that are executed in the extension's background page. The scripts share the same window |
background.service_worker | string | Specify a JavaScript file as the extension service worker. A service worker is a background script that acts as the extension's main event handler. |
background.persistent | boolean | If omitted, this property defaults to true in Manifest V2 and false in Manifest V3. Setting to true in Manifest V3 results in an error. `true` indicates the background page is to be kept in memory from when the extension is loaded or the |
background.type | string | Determines whether the scripts specified in "scripts" are loaded as ES modules. `classic` indicates the background scripts or service workers are not included as an ES Module. If omitted, this property defaults to classic. one of: "classic", "module" |
browser_specific_settings | object | The browser_specific_settings key contains keys that are specific to a particular host application. |
browser_specific_settings.gecko | object | — |
browser_specific_settings.gecko.strict_min_version | string | Minimum version of Gecko to support. If the Browser version on which the extension is being installed or run is below this version, the extension is not installed or not run. If not provided, all versions earlier than strict_max_version default: "42a1" |
browser_specific_settings.gecko.strict_max_version | string | Maximum version of Gecko to support. If the Browser version on which the extension is being installed or run is above this version, the extension is not installed or not run. Defaults to "*", which disables checking for a maximum version default: "*" |
browser_specific_settings.gecko_android | object | — |
browser_specific_settings.gecko_android.strict_min_version | string | Minimum version of Gecko to support. If the Browser version on which the extension is being installed or run is below this version, the extension is not installed or not run. If not provided, all versions earlier than strict_max_version default: "42a1" |
browser_specific_settings.gecko_android.strict_max_version | string | Maximum version of Gecko to support. If the Browser version on which the extension is being installed or run is above this version, the extension is not installed or not run. Defaults to "*", which disables checking for a maximum version default: "*" |
browser_specific_settings.safari | object | — |
browser_specific_settings.safari.strict_min_version | string | Minimum version of Gecko to support. If the Browser version on which the extension is being installed or run is below this version, the extension is not installed or not run. If not provided, all versions earlier than strict_max_version default: "42a1" |
browser_specific_settings.safari.strict_max_version | string | Maximum version of Gecko to support. If the Browser version on which the extension is being installed or run is above this version, the extension is not installed or not run. Defaults to "*", which disables checking for a maximum version default: "*" |
chrome_settings_overrides | object | Use the chrome_settings_overrides key to override the browser's home page and add a new search engine. https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/chrome_settings_overrides |
chrome_settings_overrides.homepage | string | Defines the page to be used as the browser's homepage. The replacement is given as a URL. The URL may: - point to a file bundled with the extension, in which case it is given as a URL relative to the manifest.json file - be a remote URL |
chrome_settings_overrides.search_provider | object | Defines a search provider to add to the browser. In the URLs you supply, use "{searchTerms}" to interpolate the search term into the URL, like: https://www.discogs.com/search/?q={searchTerms}. You can also provide POST parameters to be |
chrome_settings_overrides.search_provider.namerequired | string | The search engine's name, displayed to the user. |
chrome_settings_overrides.search_provider.search_urlrequired | string | URL used by the search engine. This must be an HTTPS URL. |
chrome_settings_overrides.search_provider.is_default | boolean | True if the search engine should be the default choice. On Firefox, this is opt-in and the user will only be asked the first time the extension is installed. They will not be asked again if a search engine is added later. |
chrome_settings_overrides.search_provider.alternate_urls | array<string> | An array of alternative URLs that can be used instead of search_url. |
chrome_settings_overrides.search_provider.encoding | string | Encoding of the search term, specified as a standard character encoding name, such as "UTF-8". |
chrome_settings_overrides.search_provider.favicon_url | string | URL pointing to an icon for the search engine. This must be an absolute HTTP or HTTPS URL. |
chrome_settings_overrides.search_provider.image_url | string | URL used for image search. |
chrome_settings_overrides.search_provider.image_url_post_params | string | POST parameters to send to image_url. |
chrome_settings_overrides.search_provider.instant_url | string | URL used for instant search. |
chrome_settings_overrides.search_provider.instant_url_post_params | string | POST parameters to send to instant_url. |
chrome_settings_overrides.search_provider.keyword | string | Address bar keyword for the search engine. |
chrome_settings_overrides.search_provider.prepopulated_id | string | The ID of a built-in search engine to use. |
chrome_settings_overrides.search_provider.search_url_post_params | string | POST parameters to send to search_url. |
chrome_settings_overrides.search_provider.suggest_url | string | URL used for search suggestions. This must be an HTTPS URL. |
chrome_settings_overrides.search_provider.suggest_url_post_params | string | POST parameters to send to suggest_url. |
chrome_url_overrides | object | Use the chrome_url_overrides key to provide a custom replacement for the documents loaded into various special pages usually provided by the browser itself. The replacements are given as a URL to an HTML file. The file must be bundled with |
chrome_url_overrides.bookmarks | string | Provide a replacement for the page that shows the bookmarks. |
chrome_url_overrides.history | string | Provide a replacement for the page that shows the browsing history. |
chrome_url_overrides.newtab | string | Provide a replacement for the document that's shown in the "new tab" page |
commands | object | Use the commands key to define one or more keyboard shortcuts for your extension. Each keyboard shortcut is defined with a name, a combination of keys, and a description. Once you've defined commands in your extension's manifest.json, you |
commands._execute_browser_action | object | — |
commands._execute_browser_action.description | string | A description of the shortcut; i.e. what it does |
commands._execute_browser_action.suggested_key | object | The value of each property is the keyboard shortcut for the command on that platform, as a string containing keys separated by "+". The value for "default" is used on all platforms that are not explicitly listed. |
commands._execute_page_action | object | — |
commands._execute_page_action.description | string | A description of the shortcut; i.e. what it does |
commands._execute_page_action.suggested_key | object | The value of each property is the keyboard shortcut for the command on that platform, as a string containing keys separated by "+". The value for "default" is used on all platforms that are not explicitly listed. |
commands._execute_sidebar_action | object | — |
commands._execute_sidebar_action.description | string | A description of the shortcut; i.e. what it does |
commands._execute_sidebar_action.suggested_key | object | The value of each property is the keyboard shortcut for the command on that platform, as a string containing keys separated by "+". The value for "default" is used on all platforms that are not explicitly listed. |
content_scripts | array<object> | Instructs the browser to load content scripts into web pages whose URL matches a given pattern.<br><br>https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/content_scripts |
content_security_policy | string | Extensions have a content security policy (CSP) applied to them by default. The default policy restricts the sources from which extensions can load code (such as <script> resources) and disallows potentially unsafe practices such as the default: "default-src 'self'" |
declarative_net_request | object | Specify static rulesets for use with declarativeNetRequest.<br><br>https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/declarative_net_request |
declarative_net_request.rule_resourcesrequired | array<object> | An array of rulesets |
default_locale | string | This key must be present if the extension contains the _locales directory, and must be absent otherwise. It identifies a subdirectory of _locales, and this subdirectory will be used to find the default strings for your default: "en" |
description | string | A short description of the extension, intended for display in the browser's user interface. In Firefox and Chrome this value can be up to 132 characters. The limit in other browsers may differ.<br>This is a localizable |
developer | object | The name of the extension's developer and their homepage URL, intended for display in the browser's user interface.<br>This object only allows for a single developer name and URL to be |
developer.name | string | Overrides the `author` key |
developer.url | string | Overrides the `homepage_url` key |
devtools_page | string | Use this key to enable your extension to extend the browser's built-in devtools.<br>This key is defined as a URL to an HTML file. The HTML file must be bundled with the extension, and the URL is relative to the extension's root.<br>The use |
dictionaries | object | The dictionaries key specifies the locale_code for which your extension supplies a dictionary (like `en-US`).<br>If you use the dictionaries key, you must also set an ID for your extension using the browser_specific_settings manifest.json |
externally_connectable | object | Externally connectable controls which other extensions and web pages can communicate with an extension using runtime.connect() and runtime.sendMessage() message passing. If externally_connectable is not specified, all extensions can |
externally_connectable.ids | array<string> | Enables communication between this extension and other installed extensions specified by extension identifiers. Use the pattern "*" to communicate with all extensions. |
externally_connectable.matches | array<string> | A list of regular expressions that enables communication between an extension and the web pages that match the expression.<br><br>Note: If `externally_connectable` is not specified, communication among extensions is allowed as if |
homepage_url | string | URL for the extension's home page.<br>If a developer key containing the "url" property and "homepage_url" are defined, Firefox uses "developer.url" while Opera uses "homepage_url". Chrome and Safari do not support the "developer" |
icons | any | The icons key specifies icons for your extension. Those icons will be used to represent the extension in components such as the Add-ons Manager.<br>It consists of key-value pairs of image size in px and image path relative to the root |
incognito | string | Use the incognito key to control how the extension works with private browsing windows.<br><br>Note: By default, extensions do not run in private browsing windows. Whether an extension can access private browsing windows is under user default: "spanning"one of: "spanning", "split", "not_allowed" |
manifest_versionrequired | integer | This key specifies the version of manifest.json used by this extension.<br><br>https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/manifest_version one of: 2, 3 |
namerequired | string | Name of the extension. This is used to identify the extension in the browser's user interface and on sites like addons.mozilla.org.<br>It's good practice to keep the name short enough to display in the UI. Also, the length of the name of a |
offline_enabled | boolean | Whether the app or extension is expected to work offline. When Chrome detects that it is offline, apps with this field set to true will be highlighted on the New Tab page. As of Chrome 35, apps (ChromeOS only from 2018) are assumed to be default: true |
omnibox | object | Use the omnibox key to define an omnibox keyword for your extension. When the user types this keyword into the browser's address bar, followed by a space, then any subsequent characters will be sent to the extension using the omnibox API |
omnibox.keywordrequired | string | The keyword that will trigger your extension. |
optional_permissions | array | Use the optional_permissions key to list permissions which you want to ask for at runtime, after your add-on has been installed. The key can contain two kinds of permissions: host permissions and API permissions. Not all permissions are |
options_page | string | Use the options_page key to define an options page for your extension. The options page contains settings for the extension. The user can access it from the browser's add-ons manager, and you can open it from within your extension using |
options_ui | object | Use the options_ui key to define an options page for your extension. The options page contains settings for the extension. The user can access it from the browser's add-ons manager, and you can open it from within your extension using |
options_ui.pagerequired | string | The path to an HTML file containing the specification of your options page. The path is relative to the location of manifest.json itself. |
options_ui.browser_styledeprecated | any | Do not set browser_style to true: its not support in Manifest V3 from Firefox 118. See Manifest V3 migration for browser_style. https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Browser_styles#manifest_v3 |
options_ui.open_in_tab | boolean | If true, the options page will open in a normal browser tab, rather than being integrated into the browser's add-ons manager. default: false |
page_action | object | — |
page_action.default_icon | string | object | — |
page_action.default_popup | string | The path to an HTML file containing the specification of the popup. The HTML file may include CSS and JavaScript files using <link> and <script> elements, just like a normal web page. However, <script> must have src attribute to load a |
page_action.default_title | string | Tooltip for the button, displayed when the user moves their mouse over it. If the button is added to the browser's menu panel, this is also shown under the app icon. This is a localizable property. |
page_action.browser_styledeprecated | any | Do not set browser_style to true: its not support in Manifest V3 from Firefox 118. See Manifest V3 migration for browser_style. https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Browser_styles#manifest_v3 |
permissions | array | Use the permissions key to request special powers for your extension. This key is an array of strings, and each string is a request for a permission. If you request permissions using this key, then the browser may inform the user at |
protocol_handlers | array<object> | Use this key to register one or more web-based protocol handlers. A protocol handler is an application that knows how to handle particular types of links: for example, a mail client is a protocol handler for "mailto:" links. When the user |
short_name | string | Short name for the extension. If given, this will be used in contexts where the name field is too long. It's recommended that the short name should not exceed 12 characters. If the short name field is not included in manifest.json, then |
sidebar_action | object | A sidebar is a pane that is displayed at the left-hand side of the browser window, next to the web page. The browser provides a UI that enables the user to see the currently available sidebars and to select a sidebar to display |
sidebar_action.default_icon | string | object | — |
sidebar_action.default_panelrequired | string | The path to an HTML file that specifies the sidebar's contents. Unlike a normal web page, JavaScript running in the panel can access all the WebExtension APIs (subject, of course, to the extension having the appropriate permissions). This |
sidebar_action.default_title | string | Title for the sidebar. This is used in the browser UI for listing and opening sidebars, and is displayed at the top of the sidebar when it is open. This property is optional: if it is omitted, the sidebar's title is the extension's name |
sidebar_action.open_at_install | boolean | Determines whether the sidebar should open on install. The default behavior is to open the sidebar when installation is completed. default: true |
sidebar_action.browser_styledeprecated | any | Do not set browser_style to true: its not support in Manifest V3 from Firefox 118. See Manifest V3 migration for browser_style. https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Browser_styles#manifest_v3 |
storage | object | Use the storage key to specify the name of the schema file that defines the structure of data in managed storage. Managed data declares the enterprise policies supported by the app. Policies are analogous to options but are configured by a |
storage.managed_schemarequired | string | The full path of the file within the extension that defines the schema of the manage storage. |
theme | object | Use the theme key to define a static theme to apply to Firefox. https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/theme |
theme.images | object | Represents the images to display in various parts of the browser. |
theme.images.theme_frame | string | The URL of a foreground image to be added to the header area and anchored to the upper right corner of the header area. |
theme.images.additional_backgrounds | array<string> | An array of URLs for additional background images to be added to the header area and displayed behind the "theme_frame": image. These images layer the first image in the array on top, the last image in the array at the bottom. |
theme.colors | object | Represents the colors of various parts of the browser. These properties define the colors used for different parts of the browser. How these properties affect the Firefox UI can be seen at |
theme.colors.bookmark_text | oneOf | — |
theme.colors.button_background_active | oneOf | — |
theme.colors.button_background_hover | oneOf | — |
theme.colors.icons | oneOf | — |
theme.colors.icons_attention | oneOf | — |
theme.colors.frame | oneOf | — |
theme.colors.frame_inactive | oneOf | — |
theme.colors.ntp_background | oneOf | — |
theme.colors.ntp_card_background | oneOf | — |
theme.colors.ntp_text | oneOf | — |
theme.colors.popup | oneOf | — |
theme.colors.popup_border | oneOf | — |
theme.colors.popup_highlight | oneOf | — |
theme.colors.popup_highlight_text | oneOf | — |
theme.colors.popup_text | oneOf | — |
theme.colors.sidebar | oneOf | — |
theme.colors.sidebar_border | oneOf | — |
theme.colors.sidebar_highlight | oneOf | — |
theme.colors.sidebar_highlight_text | oneOf | — |
theme.colors.sidebar_text | oneOf | — |
theme.colors.tab_background_separator | oneOf | — |
theme.colors.tab_background_text | oneOf | — |
theme.colors.tab_line | oneOf | — |
theme.colors.tab_loading | oneOf | — |
theme.colors.tab_selected | oneOf | — |
theme.colors.tab_text | oneOf | — |
theme.colors.toolbar | oneOf | — |
theme.colors.toolbar_bottom_separator | oneOf | — |
theme.colors.toolbar_field | oneOf | — |
theme.colors.toolbar_field_border | oneOf | — |
theme.colors.toolbar_field_border_focus | oneOf | — |
theme.colors.toolbar_field_focus | oneOf | — |
theme.colors.toolbar_field_highlight | oneOf | — |
theme.colors.toolbar_field_highlight_text | oneOf | — |
theme.colors.toolbar_field_separator | oneOf | — |
theme.colors.toolbar_field_text | oneOf | — |
theme.colors.toolbar_field_text_focus | oneOf | — |
theme.colors.toolbar_text | oneOf | — |
theme.colors.toolbar_top_separator | oneOf | — |
theme.colors.toolbar_vertical_separator | oneOf | — |
theme.properties | object | Affects how the "additional_backgrounds" images are displayed and color schemes are applied. |
theme.properties.additional_backgrounds_alignment | array<string> | An array of enumeration values defining the alignment of the corresponding "additional_backgrounds": array item. |
theme.properties.additional_backgrounds_tiling | array<string> | Defines how the corresponding "additional_backgrounds": array item repeats. |
theme.properties.color_scheme | array<string> | Determines which color scheme is applied to the chrome (for example, context menus) and content (for example, built-in pages and the preferred color scheme for web pages). |
theme.properties.content_color_scheme | array<string> | Determines which color scheme is applied to the content (for example, built-in pages and preferred color scheme for web pages). Overrides color_scheme. |
user_scripts | object | Instructs the browser to load a script packaged in the extension, known as the API script, this script is used to export a set of custom API methods for use in user scripts. Note: The user_script key is required for the userScripts API to |
user_scripts.api_script | string | The API script: - runs in the content processes. - has access to the window and document globals related to the webpage it is attached to. - has access to the same subset of WebExtension APIs usually available in a content script. The |
versionrequired | string | The version string for the extension. The version string consists of 1 to 4 numbers separated by dots, for example, 1.2.3.4. Non-zero numbers must not include a leading zero. Extension stores and browsers may enforce or warn if the version |
version_name | string | In addition to the version field, which is used for update purposes, version_name can be set to a descriptive version string and will be used for display purposes if present. If no version_name is present, the version field will be used |
Audit
What we found in this schema
- Declared draft: draft-07
- Validates cleanly against its own meta-schema.
- Has 7 place(s) where keywords sit beside
$ref. Under draft-07 those keywords are silently ignored by every conforming validator — first at#/else/properties/web_accessible_resources/items/properties/extension_ids. - 193 properties, 89% carrying a description, max nesting depth 8.
Standards
Specification sections for the keywords in this schema
| Keyword | Document | Section |
|---|---|---|
$id | JSON Schema Core, draft 2020-12 | §8.2.1 — The "$id" Keyword |
$ref | JSON Schema Core, draft 2020-12 | §8.2.3.1 — Direct References with "$ref" |
$schema | JSON Schema Core, draft 2020-12 | §8.1.1 — "$schema" |
additionalProperties | JSON Schema Core, draft 2020-12 | §10.3.2.3 — "additionalProperties" |
anyOf | JSON Schema Core, draft 2020-12 | §10.2.1.2 — "anyOf" |
const | JSON Schema Validation, draft 2020-12 | §6.1.3 — "const" |
default | JSON Schema Validation, draft 2020-12 | §9.2 — "default" |
description | JSON Schema Validation, draft 2020-12 | §9.1 — "title" and "description" |
enum | JSON Schema Validation, draft 2020-12 | §6.1.2 — "enum" |
format | JSON Schema Validation, draft 2020-12 | §7 — Vocabularies for Semantic Content With "format" |
if | JSON Schema Core, draft 2020-12 | §10.2.2.1 — "if" |
items | JSON Schema Core, draft 2020-12 | §10.3.1.2 — "items" |
minItems | JSON Schema Validation, draft 2020-12 | §6.4.2 — "minItems" |
pattern | JSON Schema Validation, draft 2020-12 | §6.3.3 — "pattern" |
patternProperties | JSON Schema Core, draft 2020-12 | §10.3.2.2 — "patternProperties" |
properties | JSON Schema Core, draft 2020-12 | §10.3.2.1 — "properties" |
required | JSON Schema Validation, draft 2020-12 | §6.5.3 — "required" |
then | JSON Schema Core, draft 2020-12 | §10.2.2.2 — "then" |
type | JSON Schema Validation, draft 2020-12 | §6.1.1 — "type" |
uniqueItems | JSON Schema Validation, draft 2020-12 | §6.4.3 — "uniqueItems" |
format: "uri" | RFC 3986 (STD 66) | §3 — Syntax Components |
format: "uri-reference" | RFC 3986 (STD 66) | §4.1 — URI Reference |
Documents
- JSON Schema Core, draft 2020-12 — JSON Schema: A Media Type for Describing JSON Documents, A. Wright, H. Andrews, B. Hutton, G. Dennis, Eds., 2022. draft-bhutton-json-schema-01. An expired Internet-Draft with no formal standing in the IETF standards process; it is nonetheless the specification of record for JSON Schema 2020-12, published by json-schema.org.
- JSON Schema Validation, draft 2020-12 — JSON Schema Validation: A Vocabulary for Structural Validation of JSON, A. Wright, H. Andrews, B. Hutton, Eds., 2022.
- RFC 8259 (STD 90) — The JavaScript Object Notation (JSON) Data Interchange Format, T. Bray, Ed., 2017. The format a schema describes.
- RFC 6901 — JavaScript Object Notation (JSON) Pointer. Defines the pointer syntax used by $ref fragments and the ~0 / ~1 escapes.
Source
Attribution
This schema comes from SchemaStore, distributed under the Apache License 2.0. Copyright 2015–present Mads Kristensen and contributors. View the original file. The field table and audit on this page are generated by JSONTools.tools; the schema itself is unmodified.