[System]
You are a helpful assistant that answers strictly in JSON. Here's the JSON schema you must adhere to:
<schema>
{"$schema":"http://json-schema.org/draft-04/schema#","id":"https://json.schemastore.org/web-types.json","title":"JSON schema for Web-Types","type":"object","properties":{"$schema":{"type":"string"},"framework":{"description":"Framework, for which the components are provided by the library. If the library is not enabled in a particular context, all symbols from this file will not be available as well. If you want symbols to be always available do not specify framework.","type":"string"},"required-context":{"$ref":"#/definitions/required-context","description":"Since 2024.2. Specify contexts, which are required to enable contributions from this file."},"context":{"$ref":"#/definitions/required-context","description":"Deprecated since 2024.2 because of ambiguous meaning - use \"required-context\" instead.","deprecationMessage":"Use \"required-context\" instead."},"name":{"description":"Name of the library.","type":"string"},"version":{"description":"Version of the library, for which Web-Types are provided.","type":"string"},"js-types-syntax":{"$ref":"#/definitions/js-types-syntax"},"description-markup":{"$ref":"#/definitions/description-markup"},"framework-config":{"$ref":"#/definitions/framework-config"},"contexts-config":{"$ref":"#/definitions/contexts-config"},"default-icon":{"$ref":"#/definitions/icon"},"contributions":{"description":"Symbol can be contributed to one of the 3 namespaces - HTML, CSS and JS. Within a particular namespace there can be different kinds of symbols. In each of the namespaces, there are several predefined kinds, which integrate directly with IDE, but providers are free to define their own.","type":"object","properties":{"html":{"$ref":"#/definitions/html"},"css":{"$ref":"#/definitions/css"},"js":{"$ref":"#/definitions/js-global"}},"additionalProperties":false}},"required":["name","version"],"additionalProperties":false,"definitions":{"js-types-syntax":{"description":"Language in which JavaScript objects types are specified.","type":"string","enum":["typescript"]},"description-markup":{"description":"Markup language in which descriptions are formatted.","type":"string","default":"none","enum":["html","markdown","none"]},"required-context":{"oneOf":[{"type":"object","properties":{"kind":{"type":"string"},"name":{"type":"string"}},"required":["kind","name"],"additionalProperties":false},{"type":"object","properties":{"anyOf":{"type":"array","items":{"$ref":"#/definitions/required-context"}}},"required":["anyOf"],"additionalProperties":false},{"type":"object","properties":{"allOf":{"type":"array","items":{"$ref":"#/definitions/required-context"}}},"required":["allOf"],"additionalProperties":false},{"type":"object","properties":{"not":{"$ref":"#/definitions/required-context"}},"required":["not"],"additionalProperties":false}]},"framework-config":{"description":"Provide configuration for the specified web framework. This is an advanced feature, which is used to provide support for templating frameworks like Angular, Vue, Svelte, etc.","type":"object","properties":{"enable-when":{"$ref":"#/definitions/enablement-rules"},"disable-when":{"$ref":"#/definitions/disablement-rules"},"canonical-names":{"$ref":"#/definitions/name-conversion-rules-single","description":"In many frameworks symbols can have multiple versions of a name. Specify canonical name conversion rule for names of particular symbol kinds against which comparisons will be made. Format of the 'canonical-names' property names is '{namespace}/{symbol kind}'. By default symbol names in HTML namespace are converted to lower-case, and in CSS and JS namespaces are left as-is. In case of name patterns, rules are applied to each part of the pattern separately, so even if the symbol with pattern is in HTML namespace, references to JS events will be case-sensitive."},"match-names":{"$ref":"#/definitions/name-conversion-rules-multiple","description":"Provide an array of name conversions, in which particular symbol kinds should be matched against canonical names of symbols. By default symbol names are converted using canonical-names rule."},"name-variants":{"$ref":"#/definitions/name-conversion-rules-multiple","description":"Provide an array of name conversions, in which particular symbol kinds should be proposed in auto completion. Format of the 'name-variants' property names is '{namespace}/{symbol kind}'. All symbol kinds are by default provided as-is."}},"additionalProperties":false},"contexts-config":{"description":"Provide configuration for Web Types contexts. This allows to contribute additional Web Types for example if a particular library is present in the project.","type":"object","additionalProperties":{"$ref":"#/definitions/context-kind-config"}},"context-kind-config":{"type":"object","properties":{"kind":{"description":"Context kind. Only a single context of the particular kind will be enabled. An example of context kind is framework, which has dedicated support in Web Types.","deprecationMessage":"As of 2024.2 this is deprecated way of defining context. The outer context should be the context kind with a nested context name.","type":"string"},"enable-when":{"$ref":"#/definitions/enablement-rules","deprecationMessage":"As of 2024.2 this is deprecated way of defining context. The outer context should be the context kind with a nested context name."},"disable-when":{"$ref":"#/definitions/disablement-rules","deprecationMessage":"As of 2024.2 this is deprecated way of defining context. The outer context should be the context kind with a nested context name."}},"additionalProperties":{"$ref":"#/definitions/context-config"}},"context-config":{"description":"Since 2024.2. Provide rules for setting a particular name for particular context kind. This allows to contribute additional Web Types for example if a particular library is present in the project.","type":"object","properties":{"enable-when":{"$ref":"#/definitions/enablement-rules"},"disable-when":{"$ref":"#/definitions/disablement-rules"}},"additionalProperties":false},"enablement-rules":{"description":"Specify rules for enabling web framework support. Only one framework can be enabled in a particular file. If you need your contributions to be enabled in all files, regardless of the context, do not specify the framework.","type":"object","properties":{"node-packages":{"description":"Node.js package names, which enable framework support within the folder containing the package.json.","type":"array","items":{"type":"string"}},"ruby-gems":{"description":"Since 2024.2. Ruby gem names, which enable framework support within the particular Ruby module.","type":"array","items":{"type":"string"}},"file-extensions":{"description":"Extensions of files, which should have the framework support enabled. Use this to support custom file extensions like '.vue' or '.svelte'. Never specify generic extensions like '.html', '.js' or '.ts'. If you need your contributions to be present in every file don't specify the framework at all","type":"array","items":{"type":"string"}},"file-name-patterns":{"description":"RegExp patterns to match file names, which should have the framework support enabled. Use carefully as broken pattern may even freeze IDE.","type":"array","items":{"$ref":"#/definitions/pattern"}},"ide-libraries":{"description":"Global JavaScript libraries names enabled within the IDE, which enable framework support in the whole project","type":"array","items":{"type":"string"}},"project-tool-executables":{"description":"List of tool executables (without extension), which presence should be checked in the project. In case of Node projects, such tools will be searched in node_modules/.bin/","type":"array","items":{"type":"string"}}},"additionalProperties":{"$ref":"#/definitions/custom-enablement-rules"}},"custom-enablement-rules":{"description":"Since 2024.2. Custom package manager dependencies, which would enable context according to the rules of custom provider.","type":"array","items":{"type":"string"}},"disablement-rules":{"description":"Specify rules for disabling web framework support. These rules take precedence over enable-when rules. They allow to turn off framework support in case of some conflicts between frameworks priority.","type":"object","properties":{"file-extensions":{"description":"Extensions of files, which should have the framework support disabled","type":"array","items":{"type":"string"}},"file-name-patterns":{"description":"RegExp patterns to match file names, which should have the framework support disabled","type":"array","items":{"$ref":"#/definitions/pattern"}}},"additionalProperties":false},"name-conversion-rules-single":{"type":"object","patternProperties":{"^/[^/\\n\\r]+/[^/\\n\\r]+$":{"$ref":"#/definitions/name-converter"}},"additionalProperties":false},"name-conversion-rules-multiple":{"type":"object","patternProperties":{"^/[^/\\n\\r]+/[^/\\n\\r]+$":{"$ref":"#/definitions/name-converters"}},"additionalProperties":false},"name-converters":{"type":"array","items":{"$ref":"#/definitions/name-converter"}},"name-converter":{"type":"string","enum":["as-is","PascalCase","camelCase","lowercase","UPPERCASE","kebab-case","snake_case"]},"icon":{"description":"Relative path to the icon representing the symbol or actual SVG of the icon.","type":"string"},"base-contribution":{"type":"object","description":"The base for any contributions.","javaAbstract":true,"javaInterfaces":["GenericContributionsHost"],"properties":{"name":{"$ref":"#/definitions/name"},"description":{"$ref":"#/definitions/description"},"description-sections":{"$ref":"#/definitions/description-sections"},"required-context":{"$ref":"#/definitions/required-context","description":"Since 2024.2. Specify contexts, which are required to enable this contribution."},"doc-url":{"$ref":"#/definitions/doc-url"},"icon":{"$ref":"#/definitions/icon"},"source":{"$ref":"#/definitions/source"},"since":{"$ref":"#/definitions/since"},"deprecated":{"$ref":"#/definitions/deprecated"},"deprecated-since":{"$ref":"#/definitions/deprecated-since"},"obsolete":{"$ref":"#/definitions/obsolete"},"obsolete-since":{"$ref":"#/definitions/obsolete-since"},"experimental":{"$ref":"#/definitions/experimental"},"priority":{"$ref":"#/definitions/priority"},"proximity":{"$ref":"#/definitions/proximity"},"virtual":{"$ref":"#/definitions/virtual"},"abstract":{"$ref":"#/definitions/abstract"},"extension":{"$ref":"#/definitions/extension"},"extends":{"$ref":"#/definitions/extends"},"pattern":{"$ref":"#/definitions/name-pattern-root"},"html":{"$ref":"#/definitions/html"},"css":{"$ref":"#/definitions/css"},"js":{"$ref":"#/definitions/js"},"exclusive-contributions":{"$ref":"#/definitions/exclusive-contributions"}}},"typed-contribution":{"type":"object","description":"The base for any contribution, which can possibly have a JS type.","javaAbstract":true,"allOf":[{"$ref":"#/definitions/base-contribution"}],"properties":{"type":{"$ref":"#/definitions/type-list"}}},"generic-contribution":{"type":"object","description":"A generic contribution. All contributions are of this type, except for HTML attributes and elements, as well as predefined CSS contribution kinds.","javaAbstract":true,"allOf":[{"$ref":"#/definitions/typed-contribution"}],"properties":{"default":{"$ref":"#/definitions/default"},"required":{"$ref":"#/definitions/required"},"attribute-value":{"$ref":"#/definitions/html-attribute-value"}}},"type-list":{"description":"Specify type according to selected language for type syntax. The type can be specified by a string expression, an object with list of imports and an expression, or an array of possible types.","oneOf":[{"$ref":"#/definitions/type"},{"type":"array","items":{"$ref":"#/definitions/type"}}]},"type":{"oneOf":[{"$ref":"#/definitions/type-reference"},{"type":"string"}]},"type-reference":{"type":"object","properties":{"module":{"description":"Name of module, which exports the type. May be omitted, in which case it's assumed to be the name of the library.","type":"string"},"name":{"description":"Name of the symbol to import","type":"string"}},"required":["name"],"additionalProperties":false},"html-value-type":{"oneOf":[{"type":"string","description":"Provide one of special attribute value types:  \"enum\", \"symbol\", \"of-match\", or a simple JavaScript type according to the specified type format."},{"$ref":"#/definitions/type-reference"},{"type":"array","items":{"$ref":"#/definitions/type"}}]},"source":{"description":"Allows to specify the source of the entity. For Vue.js component this may be for instance a class.","type":"object","oneOf":[{"type":"object","properties":{"file":{"description":"Path to the file, relative to the web-types JSON.","type":"string"},"offset":{"description":"Offset in the file under which the source symbol, like class name, is located.","type":"integer"}},"required":["file","offset"],"additionalProperties":false},{"type":"object","properties":{"module":{"description":"Name of module, which exports the symbol. May be omitted, in which case it's assumed to be the name of the library.","type":"string"},"symbol":{"description":"Name of the exported symbol.","type":"string"}},"required":["symbol"],"additionalProperties":false}]},"name":{"type":"string"},"description":{"description":"Short description to be rendered in documentation popup. It will be rendered according to description-markup setting.","type":"string"},"description-sections":{"description":"Custom sections to be shown below description in the documentation popup.","type":"object","additionalProperties":{"type":"string"}},"doc-url":{"description":"Link to online documentation.","type":"string"},"virtual":{"description":"Mark contribution as virtual. Virtual contributions can be filtered out if needed in references. A virtual contribution meaning may differ by framework or kind contexts, but usually means something synthetic or something, which gets erased in the runtime by the framework. E.g. Vue or Angular attribute bindings are virtual. ","type":"boolean"},"abstract":{"description":"Mark contribution as abstract. Such contributions serve only as super contributions for other contributions.","type":"boolean"},"extension":{"description":"Mark contribution as an extension. Such contributions do not define a new contribution on their own, but can provide additional properties or contributions to existing contributions.","type":"boolean"},"priority":{"type":"string","enum":["lowest","low","normal","high","highest"]},"proximity":{"type":"integer"},"name-pattern-root":{"oneOf":[{"$ref":"#/definitions/name-pattern"},{"type":"string"}]},"exclusive-contributions":{"description":"Specify list of contribution kinds qualified with a namespace, for which during reference resolution this will be the final contribution host. E.g. if a special HTML element does not accept standard attributes, add:\n\"exclusive-contributions\": [\"/html/attributes\"].","type":"array","items":{"type":"string","pattern":"/[^/\\n\\r]+/[^/\\n\\r]+"}},"name-pattern":{"type":"object","oneOf":[{"type":"object","properties":{"required":{"$ref":"#/definitions/required"},"unique":{"type":"boolean"},"repeat":{"type":"boolean"},"template":{"$ref":"#/definitions/name-pattern-template"},"or":{"$ref":"#/definitions/name-pattern-template"},"delegate":{"$ref":"#/definitions/reference"},"deprecated":{"$ref":"#/definitions/deprecated"},"priority":{"$ref":"#/definitions/priority"},"proximity":{"$ref":"#/definitions/proximity"},"items":{"$ref":"#/definitions/list-reference"}},"additionalProperties":false},{"type":"object","properties":{"regex":{"type":"string"},"case-sensitive":{"type":"boolean","default":true}},"required":["regex"],"additionalProperties":false}]},"name-pattern-template":{"type":"array","minItems":1,"items":{"oneOf":[{"type":"string"},{"$ref":"#/definitions/name-pattern-template"},{"$ref":"#/definitions/name-pattern"}]}},"list-reference":{"description":"A reference to an element in Web-Types model.","oneOf":[{"$ref":"#/definitions/reference"},{"type":"array","items":{"$ref":"#/definitions/reference"}}]},"reference":{"description":"A reference to an element in Web-Types model.","oneOf":[{"$ref":"#/definitions/reference-with-props"},{"type":"string"}]},"reference-with-props":{"type":"object","properties":{"path":{"type":"string"},"includeVirtual":{"type":"boolean","default":true},"includeAbstract":{"type":"boolean"},"filter":{"type":"string"},"name-conversion":{"$ref":"#/definitions/reference-name-conversion","description":"Override global name conversion rules for matching symbols under the path."}},"required":["path"]},"reference-name-conversion":{"description":"Override global name conversion rules for matching symbols under the path.","type":"object","properties":{"canonical-names":{"description":"Override global canonical name conversion rule against which comparisons are made for the referenced symbols. When only rule name is specified, it applies to the symbols of the same kind as the last segment of the referenced path. Otherwise format of the property names is '{namespace}/{symbol kind}'. Supported by JetBrains IDEs since 2022.1.","oneOf":[{"$ref":"#/definitions/name-converter"},{"$ref":"#/definitions/name-conversion-rules-single"}]},"match-names":{"description":"Override global rules, by which referenced symbols should be matched against their canonical names. When only rule names are specified, they applies to the symbols of the same kind as the last segment of the referenced path. Otherwise format of the property names is '{namespace}/{symbol kind}'. Supported by JetBrains IDEs since 2022.1.","oneOf":[{"$ref":"#/definitions/name-converters"},{"$ref":"#/definitions/name-conversion-rules-multiple"}]},"name-variants":{"description":"Override global rules, by which referenced symbol names should be proposed in auto completion. When only rule names are specified, they applies to the symbols of the same kind as the last segment of the referenced path. Otherwise format of the property names is '{namespace}/{symbol kind}'. Supported by JetBrains IDEs since 2022.1.","oneOf":[{"$ref":"#/definitions/name-converters"},{"$ref":"#/definitions/name-conversion-rules-multiple"}]}}},"extends":{"$ref":"#/definitions/reference"},"default":{"type":"string"},"required":{"type":"boolean"},"since":{"description":"Version since this symbol is available.","type":"string"},"deprecated":{"description":"Specifies whether the symbol is deprecated. Deprecated symbol usage is discouraged, but still supported. Value can be a boolean or a string message with explanation and migration information.","type":["boolean","string"],"default":false},"deprecated-since":{"description":"Version in which this symbol was first deprecated.","type":"string"},"obsolete":{"description":"Specifies whether the symbol is obsolete. Obsolete symbols are no longer supported. Value can be a boolean or a string message with explanation and migration information.","type":["boolean","string"],"default":false},"obsolete-since":{"description":"Version in which this symbol was first made obsolete.","type":"string"},"experimental":{"description":"Specifies whether the symbol is experimental. Value can be a boolean or a string message with explanation. Experimental symbols should be used with caution as the API might change.","type":["boolean","string"],"default":false},"pattern":{"description":"A RegEx pattern to match whole content. Syntax should work with at least ECMA, Java and Python implementations.","oneOf":[{"type":"string"},{"type":"object","properties":{"regex":{"type":"string"},"case-sensitive":{"type":"boolean","default":true}}}]},"html-contributions-host":{"type":"object","javaInterfaces":["GenericContributionsHost"],"javaInterface":true,"properties":{"elements":{"description":"HTML elements.","type":"array","items":{"$ref":"#/definitions/html-element"}},"attributes":{"description":"HTML attributes.","type":"array","items":{"$ref":"#/definitions/html-attribute"}},"events":{"type":"array","items":{"$ref":"#/definitions/generic-html-contribution"},"description":"DOM events are deprecated in HTML namespace. Contribute events to JS namespace: /js/events","deprecationMessage":"Contribute events to JS namespace: /js/events"}},"patternProperties":{"^(?!pattern$).*$":{"$ref":"#/definitions/generic-html-contributions"}}},"generic-html-contributions":{"javaLenientDeserialize":true,"oneOf":[{"$ref":"#/definitions/generic-html-contribution-or-property"},{"type":"array","items":{"$ref":"#/definitions/generic-html-contribution-or-property"}}]},"generic-html-contribution-or-property":{"javaInterfaces":["GenericContributionOrProperty"],"oneOf":[{"$ref":"#/definitions/generic-html-contribution"},{"type":"string"},{"type":"number"},{"type":"boolean"}]},"generic-html-contribution":{"type":"object","allOf":[{"$ref":"#/definitions/generic-contribution"},{"$ref":"#/definitions/html-contributions-host"}]},"html":{"type":"object","description":"Contains contributions to HTML namespace. It's property names represent symbol kinds, its property values contain list of contributions of particular kind. There are 2 predefined kinds, which integrate directly with IDE - HTML elements and HTML attributes. There are also 2 deprecated kinds: tags (which is equivalent to 'elements') and 'events' (which was moved to JS namespace)","allOf":[{"$ref":"#/definitions/html-contributions-host"}],"properties":{"types-syntax":{"$ref":"#/definitions/deprecated-types-syntax"},"description-markup":{"$ref":"#/definitions/deprecated-description-markup"},"tags":{"type":"array","description":"Deprecated, use `elements` property.","deprecationMessage":"Use `elements` property.","items":{"$ref":"#/definitions/html-element"}}}},"html-element":{"type":"object","allOf":[{"$ref":"#/definitions/base-contribution"},{"$ref":"#/definitions/html-contributions-host"}]},"html-attribute":{"type":"object","allOf":[{"$ref":"#/definitions/base-contribution"},{"$ref":"#/definitions/html-contributions-host"}],"properties":{"value":{"$ref":"#/definitions/html-attribute-value"},"default":{"type":"string"},"required":{"$ref":"#/definitions/required"},"vue-argument":{"$ref":"#/definitions/deprecated-html-attribute-vue-argument"},"vue-modifiers":{"description":"Deprecated vue-specific property - contribute Vue directives to /contributions/html/vue-directives","deprecationMessage":"Contribute Vue directives to /contributions/html/vue-directives","type":"array","items":{"$ref":"#/definitions/deprecated-html-attribute-vue-modifier"}}}},"html-attribute-value":{"type":"object","properties":{"kind":{"type":"string","enum":["no-value","plain","expression"]},"type":{"$ref":"#/definitions/html-value-type"},"required":{"type":"boolean"},"default":{"type":"string"}},"additionalProperties":false},"css-contributions-host":{"type":"object","javaInterfaces":["GenericContributionsHost"],"javaInterface":true,"properties":{"properties":{"type":"array","description":"CSS properties","items":{"$ref":"#/definitions/css-property"}},"pseudo-elements":{"description":"CSS pseudo-elements","type":"array","items":{"$ref":"#/definitions/css-pseudo-element"}},"pseudo-classes":{"description":"CSS pseudo-classes","type":"array","items":{"$ref":"#/definitions/css-pseudo-class"}},"functions":{"description":"CSS functions","type":"array","items":{"$ref":"#/definitions/css-generic-item"}},"classes":{"description":"CSS classes","type":"array","items":{"$ref":"#/definitions/css-generic-item"}},"parts":{"description":"CSS parts","type":"array","items":{"$ref":"#/definitions/css-generic-item"}}},"patternProperties":{"^(?!pattern$).*$":{"$ref":"#/definitions/generic-css-contributions"}}},"generic-css-contributions":{"javaLenientDeserialize":true,"oneOf":[{"$ref":"#/definitions/generic-css-contribution-or-property"},{"type":"array","items":{"$ref":"#/definitions/generic-css-contribution-or-property"}}]},"generic-css-contribution-or-property":{"javaInterfaces":["GenericContributionOrProperty"],"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"$ref":"#/definitions/generic-css-contribution"}]},"generic-css-contribution":{"type":"object","allOf":[{"$ref":"#/definitions/generic-contribution"},{"$ref":"#/definitions/css-contributions-host"}]},"css":{"type":"object","description":"Contains contributions to CSS namespace. It's property names represent symbol kinds, its property values contain list of contributions of particular kind. There are predefined kinds, which integrate directly with IDE - properties, classes, functions, pseudo-elements, pseudo-classes and parts.","allOf":[{"$ref":"#/definitions/css-contributions-host"}]},"css-property":{"type":"object","allOf":[{"$ref":"#/definitions/base-contribution"},{"$ref":"#/definitions/css-contributions-host"}],"properties":{"values":{"type":"array","items":{"type":"string"}}}},"css-generic-item":{"type":"object","allOf":[{"$ref":"#/definitions/base-contribution"},{"$ref":"#/definitions/css-contributions-host"}]},"css-pseudo-element":{"type":"object","allOf":[{"$ref":"#/definitions/base-contribution"},{"$ref":"#/definitions/css-contributions-host"}],"properties":{"arguments":{"type":"boolean","description":"Specify whether the pseudo-element requires arguments."}}},"css-pseudo-class":{"type":"object","allOf":[{"$ref":"#/definitions/base-contribution"},{"$ref":"#/definitions/css-contributions-host"}],"properties":{"arguments":{"type":"boolean","description":"Specify whether the pseudo-class requires arguments."}}},"js-contributions-host":{"type":"object","javaInterfaces":["GenericContributionsHost"],"javaInterface":true,"properties":{"events":{"type":"array","items":{"$ref":"#/definitions/generic-js-contribution"},"description":"DOM events"},"properties":{"type":"array","items":{"$ref":"#/definitions/js-property"},"description":"JavaScript properties of an object, HTML tag, framework component, etc."},"symbols":{"type":"array","items":{"$ref":"#/definitions/js-symbol"},"description":"Symbols available for JavaScript resolve. TypeScript resolve is not supported."}},"patternProperties":{"^(?!pattern$).*$":{"$ref":"#/definitions/generic-js-contributions"}}},"generic-js-contributions":{"javaLenientDeserialize":true,"oneOf":[{"$ref":"#/definitions/generic-js-contribution-or-property"},{"type":"array","items":{"$ref":"#/definitions/generic-js-contribution-or-property"}}]},"generic-js-contribution-or-property":{"javaInterfaces":["GenericContributionOrProperty"],"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"$ref":"#/definitions/generic-js-contribution"}]},"generic-js-contribution":{"type":"object","allOf":[{"$ref":"#/definitions/generic-contribution"},{"$ref":"#/definitions/js-contributions-host"}]},"js-global":{"type":"object","description":"Contains contributions to JS namespace. It's property names represent symbol kinds, its property values contain list of contributions of particular kind. There are 2 predefined kinds, which integrate directly with IDE - properties and events, but only events can be contributed globally.","properties":{"events":{"type":"array","items":{"$ref":"#/definitions/generic-js-contribution"},"description":"DOM events"},"symbols":{"type":"array","items":{"$ref":"#/definitions/js-symbol"},"description":"Globally available symbols for JavaScript resolve. TypeScript resolve is not supported. Please note that these symbols will override any normally available global JavaScript symbols."}},"patternProperties":{"^(?!pattern$).*$":{"$ref":"#/definitions/generic-js-contributions"}}},"js":{"type":"object","description":"Contains contributions to JS namespace. It's property names represent symbol kinds, its property values contain list of contributions of particular kind. There are 2 predefined kinds, which integrate directly with IDE - properties and events.","allOf":[{"$ref":"#/definitions/js-contributions-host"}]},"js-property":{"type":"object","allOf":[{"$ref":"#/definitions/generic-contribution"},{"$ref":"#/definitions/js-contributions-host"}],"properties":{"read-only":{"description":"Specifies whether the property is read only.","type":"boolean"}}},"js-symbol":{"type":"object","allOf":[{"$ref":"#/definitions/typed-contribution"},{"$ref":"#/definitions/js-contributions-host"}],"properties":{"kind":{"description":"Kind of the symbol. Default is variable.","type":"string","enum":["Variable","Function","Namespace","Class","Interface","Enum","Alias","Module"]}}},"deprecated-types-syntax":{"oneOf":[{"$ref":"#/definitions/js-types-syntax"}],"description":"Deprecated, use top-level js-types-syntax property.","deprecationMessage":"Use top-level js-types-syntax property."},"deprecated-description-markup":{"description":"Deprecated, use top-level property.","deprecationMessage":"Use top-level property.","oneOf":[{"$ref":"#/definitions/description-markup"}]},"deprecated-html-attribute-vue-argument":{"type":"object","description":"Deprecated vue-specific property - contribute Vue directives to /contributions/html/vue-directives","deprecationMessage":"Contribute Vue directives to /contributions/html/vue-directives","properties":{"pattern":{"$ref":"#/definitions/name-pattern-root"},"description":{"$ref":"#/definitions/description"},"doc-url":{"$ref":"#/definitions/doc-url"},"required":{"description":"Whether directive requires an argument","type":"boolean","default":false}},"additionalProperties":false},"deprecated-html-attribute-vue-modifier":{"type":"object","properties":{"name":{"$ref":"#/definitions/name"},"pattern":{"$ref":"#/definitions/name-pattern-root"},"description":{"$ref":"#/definitions/description"},"doc-url":{"$ref":"#/definitions/doc-url"}},"required":["name"],"additionalProperties":false}}}
</schema>

[User] Provide a JSON object that satisfies the schema "JSON schema for Web-Types". Here are the required top‑level fields: name, version. Return only the valid JSON object.

JSON schema for Web-Types

Framework, for which the components are provided by the library. If the library is not enabled in a particular context, all symbols from this file will not be available as well. If you want symbols to be always available do not specify framework.

Since 2024.2. Specify contexts, which are required to enable contributions from this file.

Deprecated since 2024.2 because of ambiguous meaning - use "required-context" instead.

Name of the library.

Version of the library, for which Web-Types are provided.

Symbol can be contributed to one of the 3 namespaces - HTML, CSS and JS. Within a particular namespace there can be different kinds of symbols. In each of the namespaces, there are several predefined kinds, which integrate directly with IDE, but providers are free to define their own.

Language in which JavaScript objects types are specified.

Markup language in which descriptions are formatted.

Provide configuration for the specified web framework. This is an advanced feature, which is used to provide support for templating frameworks like Angular, Vue, Svelte, etc.

In many frameworks symbols can have multiple versions of a name. Specify canonical name conversion rule for names of particular symbol kinds against which comparisons will be made. Format of the 'canonical-names' property names is '{namespace}/{symbol kind}'. By default symbol names in HTML namespace are converted to lower-case, and in CSS and JS namespaces are left as-is. In case of name patterns, rules are applied to each part of the pattern separately, so even if the symbol with pattern is in HTML namespace, references to JS events will be case-sensitive.

Provide an array of name conversions, in which particular symbol kinds should be matched against canonical names of symbols. By default symbol names are converted using canonical-names rule.

Provide an array of name conversions, in which particular symbol kinds should be proposed in auto completion. Format of the 'name-variants' property names is '{namespace}/{symbol kind}'. All symbol kinds are by default provided as-is.

Provide configuration for Web Types contexts. This allows to contribute additional Web Types for example if a particular library is present in the project.

Context kind. Only a single context of the particular kind will be enabled. An example of context kind is framework, which has dedicated support in Web Types.

As of 2024.2 this is deprecated way of defining context. The outer context should be the context kind with a nested context name.

Since 2024.2. Provide rules for setting a particular name for particular context kind. This allows to contribute additional Web Types for example if a particular library is present in the project.

Specify rules for enabling web framework support. Only one framework can be enabled in a particular file. If you need your contributions to be enabled in all files, regardless of the context, do not specify the framework.

Node.js package names, which enable framework support within the folder containing the package.json.

Since 2024.2. Ruby gem names, which enable framework support within the particular Ruby module.

Extensions of files, which should have the framework support enabled. Use this to support custom file extensions like '.vue' or '.svelte'. Never specify generic extensions like '.html', '.js' or '.ts'. If you need your contributions to be present in every file don't specify the framework at all

RegExp patterns to match file names, which should have the framework support enabled. Use carefully as broken pattern may even freeze IDE.

Global JavaScript libraries names enabled within the IDE, which enable framework support in the whole project

List of tool executables (without extension), which presence should be checked in the project. In case of Node projects, such tools will be searched in node_modules/.bin/

Since 2024.2. Custom package manager dependencies, which would enable context according to the rules of custom provider.

Specify rules for disabling web framework support. These rules take precedence over enable-when rules. They allow to turn off framework support in case of some conflicts between frameworks priority.

Extensions of files, which should have the framework support disabled

RegExp patterns to match file names, which should have the framework support disabled

as-is PascalCase camelCase lowercase UPPERCASE kebab-case snake_case

Relative path to the icon representing the symbol or actual SVG of the icon.

The base for any contributions.

Since 2024.2. Specify contexts, which are required to enable this contribution.

The base for any contribution, which can possibly have a JS type.

A generic contribution. All contributions are of this type, except for HTML attributes and elements, as well as predefined CSS contribution kinds.

Specify type according to selected language for type syntax. The type can be specified by a string expression, an object with list of imports and an expression, or an array of possible types.

Name of module, which exports the type. May be omitted, in which case it's assumed to be the name of the library.

Name of the symbol to import

Provide one of special attribute value types:  "enum", "symbol", "of-match", or a simple JavaScript type according to the specified type format.

Allows to specify the source of the entity. For Vue.js component this may be for instance a class.

Path to the file, relative to the web-types JSON.

Offset in the file under which the source symbol, like class name, is located.

Name of module, which exports the symbol. May be omitted, in which case it's assumed to be the name of the library.

Name of the exported symbol.

Short description to be rendered in documentation popup. It will be rendered according to description-markup setting.

Custom sections to be shown below description in the documentation popup.

Link to online documentation.

Mark contribution as virtual. Virtual contributions can be filtered out if needed in references. A virtual contribution meaning may differ by framework or kind contexts, but usually means something synthetic or something, which gets erased in the runtime by the framework. E.g. Vue or Angular attribute bindings are virtual.

Mark contribution as abstract. Such contributions serve only as super contributions for other contributions.

Mark contribution as an extension. Such contributions do not define a new contribution on their own, but can provide additional properties or contributions to existing contributions.

Specify list of contribution kinds qualified with a namespace, for which during reference resolution this will be the final contribution host. E.g. if a special HTML element does not accept standard attributes, add:
"exclusive-contributions": ["/html/attributes"].

A reference to an element in Web-Types model.

Override global name conversion rules for matching symbols under the path.

Override global canonical name conversion rule against which comparisons are made for the referenced symbols. When only rule name is specified, it applies to the symbols of the same kind as the last segment of the referenced path. Otherwise format of the property names is '{namespace}/{symbol kind}'. Supported by JetBrains IDEs since 2022.1.

Override global rules, by which referenced symbols should be matched against their canonical names. When only rule names are specified, they applies to the symbols of the same kind as the last segment of the referenced path. Otherwise format of the property names is '{namespace}/{symbol kind}'. Supported by JetBrains IDEs since 2022.1.

Override global rules, by which referenced symbol names should be proposed in auto completion. When only rule names are specified, they applies to the symbols of the same kind as the last segment of the referenced path. Otherwise format of the property names is '{namespace}/{symbol kind}'. Supported by JetBrains IDEs since 2022.1.

Version since this symbol is available.

Specifies whether the symbol is deprecated. Deprecated symbol usage is discouraged, but still supported. Value can be a boolean or a string message with explanation and migration information.

Version in which this symbol was first deprecated.

Specifies whether the symbol is obsolete. Obsolete symbols are no longer supported. Value can be a boolean or a string message with explanation and migration information.

Version in which this symbol was first made obsolete.

Specifies whether the symbol is experimental. Value can be a boolean or a string message with explanation. Experimental symbols should be used with caution as the API might change.

A RegEx pattern to match whole content. Syntax should work with at least ECMA, Java and Python implementations.

HTML elements.

HTML attributes.

DOM events are deprecated in HTML namespace. Contribute events to JS namespace: /js/events

Contribute events to JS namespace: /js/events

Contains contributions to HTML namespace. It's property names represent symbol kinds, its property values contain list of contributions of particular kind. There are 2 predefined kinds, which integrate directly with IDE - HTML elements and HTML attributes. There are also 2 deprecated kinds: tags (which is equivalent to 'elements') and 'events' (which was moved to JS namespace)

Deprecated, use `elements` property.

Deprecated vue-specific property - contribute Vue directives to /contributions/html/vue-directives

Contribute Vue directives to /contributions/html/vue-directives

CSS properties

CSS pseudo-elements

CSS pseudo-classes

CSS functions

CSS classes

CSS parts

Contains contributions to CSS namespace. It's property names represent symbol kinds, its property values contain list of contributions of particular kind. There are predefined kinds, which integrate directly with IDE - properties, classes, functions, pseudo-elements, pseudo-classes and parts.

Specify whether the pseudo-element requires arguments.

Specify whether the pseudo-class requires arguments.

DOM events

JavaScript properties of an object, HTML tag, framework component, etc.

Symbols available for JavaScript resolve. TypeScript resolve is not supported.

Contains contributions to JS namespace. It's property names represent symbol kinds, its property values contain list of contributions of particular kind. There are 2 predefined kinds, which integrate directly with IDE - properties and events, but only events can be contributed globally.

DOM events

Globally available symbols for JavaScript resolve. TypeScript resolve is not supported. Please note that these symbols will override any normally available global JavaScript symbols.

Contains contributions to JS namespace. It's property names represent symbol kinds, its property values contain list of contributions of particular kind. There are 2 predefined kinds, which integrate directly with IDE - properties and events.

Specifies whether the property is read only.

Kind of the symbol. Default is variable.

Variable Function Namespace Class Interface Enum Alias Module

Deprecated, use top-level js-types-syntax property.

Deprecated, use top-level property.

Whether directive requires an argument

Provide a JSON object that satisfies the schema "JSON schema for Web-Types". Here are the required top‑level fields: name, version. Return only the valid JSON object.


[System]
You are a helpful assistant that answers strictly in JSON. Here's the JSON schema you must adhere to:
<schema>
{"$schema":"http://json-schema.org/draft-07/schema#","$id":"https://json.schemastore.org/webextension.json","title":"JSON schema for WebExtensions manifest files","description":"The manifest.json file is the only file that every extension using WebExtension APIs must contain.\n\nUsing manifest.json, you specify basic metadata about your extension such as the name and version, and can also specify aspects of your extension's functionality (such as background scripts, content scripts, and browser actions).\n\nIt is a JSON-formatted file, with one exception: it is allowed to contain \"//\"-style comments.\n\nhttps://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json","required":["manifest_version","name","version"],"type":"object","additionalProperties":true,"if":{"properties":{"manifest_version":{"const":2}}},"then":{"properties":{"browser_action":{"$ref":"#/definitions/action","description":"A browser action is a button that your extension adds to the browser's toolbar. The button has an icon, and may optionally have a popup whose content is specified using HTML, CSS, and JavaScript.\n\nThis key is replaced by action in Manifest V3 extensions.\n\nIf you supply a popup, then the popup is opened when the user clicks the button, and your JavaScript running in the popup can handle the user's interaction with it. If you don't supply a popup, then a click event is dispatched to your extension's background scripts when the user clicks the button.\n\nYou can also create and manipulate browser actions programmatically using the browserAction API.\n\nhttps://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_action"},"options_ui":{"properties":{"browser_style":{"description":"Use this to include a stylesheet in your page that will make it look consistent with the browser's UI and with other add-ons that use the browser_style property.","type":"boolean","default":true}}}},"definitions":{"common_action":{"properties":{"browser_style":{"description":"Your extension can include user interface elements - browser and page action popups, sidebars, and options pages - that are specified by:\n1. creating an HTML file defining the structure of the UI element.\n2. adding a manifest.json key (action, browser_action, page_action, sidebar_action, or options_ui) pointing to that HTML file.\n\nYou can style these elements to match the browser's style. The manifest.json keys include an optional property to help with this: browser_style. If this is included and set to true, your document gets one or more extra stylesheets that help make it look consistent with the browser's UI and with other extensions that use the browser_style property.\n\nhttps://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Browser_styles","type":"boolean","default":false}}},"sidebar_action":{"properties":{"browser_style":{"description":"In Firefox, the stylesheet can be seen at chrome://browser/content/extension.css or chrome://browser/content/extension-mac.css on macOS.","type":"boolean","default":true}}}}},"else":{"properties":{"action":{"$ref":"#/definitions/action","description":"An action is a button that your extension adds to the browser's toolbar. The button has an icon, and may optionally have a popup whose content is specified using HTML, CSS, and JavaScript.\n\nThis key replaces browser_action in Manifest V3 extensions.\n\nYou must specify this key to include a browser toolbar button in your extension. When specified, you can manipulate the button programmatically using the action API.\n\nIf you supply a popup, then the popup is opened when the user clicks the button, and your JavaScript running in the popup can handle the user's interaction with it. If you don't supply a popup, then a click event is dispatched to your extension's background scripts when the user clicks the button."},"background":{"properties":{"persistent":{"const":false}}},"host_permissions":{"type":"array","items":{"$ref":"#/definitions/match_pattern","description":"Use the host_permissions key to request access for the APIs in your extension that read or modify host data, such as cookies, webRequest, and tabs. This key is an array of strings, and each string is a request for a permission. Users can grant or revoke host permissions on an ad hoc basis. Therefore., most browsers treat host_permissions as optional.\n\nThe extra privileges include:\nXMLHttpRequest and fetch access to those origins without cross-origin restrictions (though not for requests from content scripts, as was the case in Manifest V2).\nthe ability to read tab-specific metadata without the \"tabs\" permission, such as the url, title, and favIconUrl properties of tabs.Tab objects.\nthe ability to inject scripts programmatically (using tabs.executeScript()) into pages served from those origins.\nthe ability to receive events from the webRequest API for these hosts.\nthe ability to access cookies for that host using the cookies API, as long as the \"cookies\" API permission is also included.\nbypassing tracking protection for extension pages where a host is specified as a full domain or with wildcards.\n\nhttps://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/host_permissions"}}},"definitions":{"browser_style":{"const":false}}},"properties":{"author":{"description":"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.\n\nhttps://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/author","type":"string"},"background":{"title":"background script inclusions","description":"Use the background key to include one or more background scripts, a background page, or a Service worker in your extension.\n\nBackground scripts are the place to put code that needs to maintain a long-term state or perform long-term operations independently of the lifetime of any particular web pages or browser windows.\n\nBackground scripts are loaded as soon as the extension is loaded and stay loaded until the extension is disabled or uninstalled unless persistent is specified as false. You can use any WebExtension APIs in the script if you have requested the necessary permissions.\n\nSee Background scripts for some more details.\n\nThe background key is an object that must have one of these properties (for more information on how these properties are supported, see Browser support)\n\nhttps://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/background","type":"object","additionalProperties":false,"properties":{"page":{"description":" 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.\n\nIf you use this property, you can not specify background scripts using scripts, but you can include scripts from the page, just like a normal web page.","type":"string"},"scripts":{"description":" 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.\nThe scripts share the same window global context.\nThe scripts are loaded in the order they appear in the array.\nIf you specify scripts, an empty page is created where your scripts run.\nNote: If you want to fetch a script from a remote location with the

[User] Provide a JSON object that satisfies the schema "JSON schema for WebExtensions manifest files". Here are the required top‑level fields: manifest_version, name, version. Return only the valid JSON object.

JSON schema for WebExtensions manifest files

The manifest.json file is the only file that every extension using WebExtension APIs must contain.

Using manifest.json, you specify basic metadata about your extension such as the name and version, and can also specify aspects of your extension's functionality (such as background scripts, content scripts, and browser actions).

It is a JSON-formatted file, with one exception: it is allowed to contain "//"-style comments.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json

A browser action is a button that your extension adds to the browser's toolbar. The button has an icon, and may optionally have a popup whose content is specified using HTML, CSS, and JavaScript.

This key is replaced by action in Manifest V3 extensions.

If you supply a popup, then the popup is opened when the user clicks the button, and your JavaScript running in the popup can handle the user's interaction with it. If you don't supply a popup, then a click event is dispatched to your extension's background scripts when the user clicks the button.

You can also create and manipulate browser actions programmatically using the browserAction API.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/browser_action

Use this to include a stylesheet in your page that will make it look consistent with the browser's UI and with other add-ons that use the browser_style property.

Your extension can include user interface elements - browser and page action popups, sidebars, and options pages - that are specified by:
1. creating an HTML file defining the structure of the UI element.
2. adding a manifest.json key (action, browser_action, page_action, sidebar_action, or options_ui) pointing to that HTML file.

You can style these elements to match the browser's style. The manifest.json keys include an optional property to help with this: browser_style. If this is included and set to true, your document gets one or more extra stylesheets that help make it look consistent with the browser's UI and with other extensions that use the browser_style property.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/user_interface/Browser_styles

In Firefox, the stylesheet can be seen at chrome://browser/content/extension.css or chrome://browser/content/extension-mac.css on macOS.

An action is a button that your extension adds to the browser's toolbar. The button has an icon, and may optionally have a popup whose content is specified using HTML, CSS, and JavaScript.

This key replaces browser_action in Manifest V3 extensions.

You must specify this key to include a browser toolbar button in your extension. When specified, you can manipulate the button programmatically using the action API.

If you supply a popup, then the popup is opened when the user clicks the button, and your JavaScript running in the popup can handle the user's interaction with it. If you don't supply a popup, then a click event is dispatched to your extension's background scripts when the user clicks the button.

Use the host_permissions key to request access for the APIs in your extension that read or modify host data, such as cookies, webRequest, and tabs. This key is an array of strings, and each string is a request for a permission. Users can grant or revoke host permissions on an ad hoc basis. Therefore., most browsers treat host_permissions as optional.

The extra privileges include:
XMLHttpRequest and fetch access to those origins without cross-origin restrictions (though not for requests from content scripts, as was the case in Manifest V2).
the ability to read tab-specific metadata without the "tabs" permission, such as the url, title, and favIconUrl properties of tabs.Tab objects.
the ability to inject scripts programmatically (using tabs.executeScript()) into pages served from those origins.
the ability to receive events from the webRequest API for these hosts.
the ability to access cookies for that host using the cookies API, as long as the "cookies" API permission is also included.
bypassing tracking protection for extension pages where a host is specified as a full domain or with wildcards.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/host_permissions

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.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/author

background script inclusions

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 operations independently of the lifetime of any particular web pages or browser windows.

Background scripts are loaded as soon as the extension is loaded and stay loaded until the extension is disabled or uninstalled unless persistent is specified as false. You can use any WebExtension APIs in the script if you have requested the necessary permissions.

See Background scripts for some more details.

The background key is an object that must have one of these properties (for more information on how these properties are supported, see Browser support)

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/background

 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 this property, you can not specify background scripts using scripts, but you can include scripts from the page, just like a normal web page.

 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 global context.
The scripts are loaded in the order they appear in the array.
If you specify scripts, an empty page is created where your scripts run.
Note: If you want to fetch a script from a remote location with the <script> tag (e.g., <script src = "https://code.jquery.com/jquery-3.6.0.min.js">), you have to change the content_security_policy key in the manifest.json file of your extension.

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.

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 browser starts until the extension is unloaded or disabled, or the browser is closed (that is, the background page is persistent).
`false` indicates the background page may be unloaded from memory when idle and recreated when needed. Such background pages are often called Event Pages, because they are loaded into memory to allow the background page to handle the events to which it has added listeners. Registration of listeners is persistent when the page is unloaded from memory, but other values are not persistent. If you want to store data persistently in an event page, then you should use the storage API.

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.

browser specific settings

The browser_specific_settings key contains keys that are specific to a particular host application.

gecko specific settings

id is the extension ID

Link to an add-on update manifest. (Requires Gecko 45)

gecko Android specific settings

When not defined, it falls back to `gecko`

safari specific settings

Specific for Safari and Safari on IOS

browser home page

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

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, such as "https://developer.mozilla.org/".

If two or more extensions both set this value, then the setting from the most recently installed one will take precedence.

To override new tabs, use "chrome_url_overrides" instead.

This is a localizable property.

search providers

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 sent along with the search.

The search provider will be presented to the user alongside the built-in providers.

All string properties are localizable.

The search engine's name, displayed to the user.

URL used by the search engine. This must be an HTTPS URL.

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.

An array of alternative URLs that can be used instead of search_url.

Encoding of the search term, specified as a standard character encoding name, such as "UTF-8".

URL pointing to an icon for the search engine. This must be an absolute HTTP or HTTPS URL.

URL used for image search.

POST parameters to send to image_url.

URL used for instant search.

POST parameters to send to instant_url.

Address bar keyword for the search engine.

The ID of a built-in search engine to use.

POST parameters to send to search_url.

URL used for search suggestions. This must be an HTTPS URL.

POST parameters to send to suggest_url.

custom special pages

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 the extension: you can't specify a remote URL here. You can specify it relative to the extension's root folder, like: "path/to/newtab.html".

The document can load CSS and JavaScript, just like a normal web page. JavaScript running in the page gets access to the same privileged "browser.*" APIs as the extension's background script.

If two or more extensions both define custom new tab pages, then the last one to be installed or enabled gets to use its value.

All properties are localizable.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/chrome_url_overrides

Provide a replacement for the page that shows the bookmarks.

Provide a replacement for the page that shows the browsing history.

Provide a replacement for the document that's shown in the "new tab" page

keyboard shortcuts

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 can listen for their associated key combinations with the commands JavaScript API.

The properties' name is the name of the shortcut.

There are these 4 special shortcuts with default actions for which the commands.onCommand event does not fire

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/commands

Works like a click on a toolbar button created with browserAction or specified in the browser_action key in the manifest.json key.

Works like a click on an address bar button created with pageAction or specified in the page_action key in the manifest.json key.

Opens the extension's sidebar specified in the sidebar_action manifest.json key.

A custom command

Instructs the browser to load content scripts into web pages whose URL matches a given pattern.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/content_scripts

content script

Specifies which pages this content script will be injected into.
There are other optional keys including and excluding.
In summary: Match the `matches` property, AND match the `include_globs` property, if present, AND NOT match the `exclude_matches` property, if present, AND NOT match the `exclude_globs` property, if present

Excludes pages that this content script would otherwise be injected into.

An array of paths, relative to manifest.json, referencing CSS files that will be injected into matching pages.
Files are injected in the order given, and at the time specified by run_at.
Note: Firefox resolves URLs in injected CSS files relative to the CSS file itself, rather than to the page it's injected into.

An array of paths, relative to manifest.json, referencing JavaScript files that will be injected into matching pages.
Files are injected in the order given. This means that, injected scripts cab utilize scripts included prior to them.
The files are injected after any files in `css`, and at the time specified by `run_at`.

This option determines when the files specified in css and js are injected. You can supply one of three strings here, each of which identifies a state in the process of loading a document. The states directly correspond to Document.readyState:
"document_start": Corresponds to loading. The DOM is still loading.
"document_end": Corresponds to interactive. The DOM has finished loading, but resources such as scripts and images may still be loading.
"document_idle": Corresponds to complete. The document and all its resources have finished loading.

`true`: Inject the scripts specified in `js` and `css` into all frames matching the specified URL requirements, even if the frame is not the topmost frame in a tab. This does not inject into child frames where only their parent matches the URL requirements and the child frame does not match the URL requirements. The URL requirements are checked for each frame independently.
Note: This also applies to any tracker or ad that uses iframes, which means that enabling this could make your content script get called dozens of times on some pages.

false`: Inject only into frames matching the URL requirements which are the topmost frame in a tab.

Applied after matches to include only those URLs that also match this glob.

Applied after matches to exclude URLs that match this glob.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/content_scripts#matching_url_patterns

Insert the content scripts into pages whose URL is "about:blank" or "about:srcdoc", if the URL of the page that opened or created this page matches the patterns specified in the rest of the content_scripts key.<br>This is especially useful to run scripts in empty iframes, whose URL is "about:blank". To do this you should also set the all_frames key.

The JavaScript world the script executes in.
"ISOLATED": The default content scripts execution environment. This environment is isolated from the page's context: while they share the same document, the global scopes and available APIs differ.
"MAIN": The web page's execution environment. This environment is shared with the web page without isolation. Scripts in this environment don't have any access to the APIs that are only available to content scripts.

Warning: Due to the lack of isolation, the web page can detect and interfere with the executed code. Do not use the MAIN world unless it is acceptable for web pages to read, access, or modify the logic or data that flows through the executed code. world, and therefore "MAIN", is not supported in Firefox (although it is planned, and the work to introduce it is tracked by Bug 1736575). In the meantime, JavaScript code running in the isolated content script sandbox can use the Firefox "Xray vision" feature, as described in Share objects with page scripts.

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

declarative net request rulesets

Specify static rulesets for use with declarativeNetRequest.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/declarative_net_request

An array of rulesets

ruleset

Definition of a ruleset

A non-empty string uniquely identifying the ruleset. IDs beginning with '_' are reserved for internal use.

Whether the ruleset is enabled by default. The declarativeNetRequest.updateEnabledRulesets method can be used to enable or disable a ruleset at runtime.

The path of the JSON ruleset relative to the extension directory. See the Rules section of the declarativeNetRequest API for information on the content of the ruleset JSON file.

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

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/default_locale

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.
This is a localizable property.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/description

developer information

The name of the extension's developer and their homepage URL, intended for display in the browser's user interface.
This object only allows for a single developer name and URL to be specified.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/developer

Overrides the `author` key

Overrides the `homepage_url` key

Use this key to enable your extension to extend the browser's built-in devtools.
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.
The use of this manifest key triggers an install-time permission warning about devtools. To avoid an install-time permission warning, mark the feature as optional by listing the "devtools" permission in the optional_permissions manifest key.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/devtools_page

localization

The dictionaries key specifies the locale_code for which your extension supplies a dictionary (like `en-US`).
If you use the dictionaries key, you must also set an ID for your extension using the browser_specific_settings manifest.json key.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/dictionaries

Although the dictionary consists of two files, one with a .dic and one with an .aff file extension, only the one with the .dic extension is referenced. The reference is relative to the manifest.json

external extension API

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 communicate with each other but not with web pages.

Note: For communication with web pages:
In Chrome, chrome.runtime.connect and chrome.runtime.sendMessage are used. These methods are only available when there is at least one extension listening for messages, see chrome.runtime will no longer be defined unconditionally in Chrome 106 for more details.
In Safari, browser.runtime.connect and browser.runtime.sendMessage are used.
In Firefox, neither API is supported. See Firefox bug 1319168.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/externally_connectable

Enables communication between this extension and other installed extensions specified by extension identifiers. Use the pattern "*" to communicate with all extensions.

A list of regular expressions that enables communication between an extension and the web pages that match the expression.

Note: If `externally_connectable` is not specified, communication among extensions is allowed as if `externally_connectable` specified `{"ids": ["*"] }`. Therefore, if you specify `externally_connectable.matches`, don't forget to add `ids` if you want to communicate with other extensions.

URL for the extension's home page.
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" key.
This is a localizable property.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/homepage_url

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.
It consists of key-value pairs of image size in px and image path relative to the root directory of the extension.
If icons is not supplied, a standard extension icon will be used by default.
You should supply at least a main extension icon, ideally 48x48 px in size. This is the default icon that will be used in the Add-ons Manager.
You can use SVG and the browser will scale your icon appropriately. There are currently two caveats though.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/icons

Use the incognito key to control how the extension works with private browsing windows.

Note: By default, extensions do not run in private browsing windows. Whether an extension can access private browsing windows is under user control. For details, see Extensions in Private Browsing. Your extension can check whether it can access private browsing windows using extension.isAllowedIncognitoAccess.

This is a string that can take any of these values:
"spanning" (the default): the extension will see events from private and non-private windows and tabs. Windows and tabs will get an incognito property in the `Window` or `Tab` that represents them. This property indicates whether or not the object is private
"split": the extension will be split between private and non-private windows. There are effectively two copies of the extension running: one sees only non-private windows, the other sees only private windows. Each copy has isolated access to Web APIs (so, for example, localStorage is not shared). However, the WebExtension API storage.local is shared. (Note: this setting is not supported by Firefox.)
"not_allowed": private tabs and windows are invisible to the extension.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/incognito

This key specifies the version of manifest.json used by this extension.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/manifest_version

Name of the extension. This is used to identify the extension in the browser's user interface and on sites like addons.mozilla.org.
It's good practice to keep the name short enough to display in the UI. Also, the length of the name of a published extension may be limited.
These restrictions do not apply to self-hosted extensions or extensions distributed outside the stores.
This is a localizable property.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/name

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 offline enabled and the default value of "offline_enabled" is true unless "webview" permission is requested. In this case, network connectivity is assumed to be required and "offline_enabled" defaults to false.

The "offline_enabled" value is also used to determine whether a network connectivity check will be performed when launching an app in ChromeOS kiosk mode. A network connectivity check will be performed when apps are not offline enabled, and app launching put on hold until the device obtains connectivity to the Internet. https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/offline_enabled

keywords

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. The extension will then be able to populate the address bar's drop-down suggestions list with its own suggestions.

If two or more extensions define the same keyword, then the extension that was installed last gets to control the keyword. Any previously installed extensions that defined the same keyword will no longer be able to use the omnibox API.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/omnibox

The keyword that will trigger your extension.

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 compatible with all browsers
Some are granted silently, without user prompt

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/optional_permissions

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 runtime.openOptionsPage().

Unlike options pages specified using the newer options_ui key, options pages specified using the deprecated options_page key don't receive browser styles and always open in a normal browser tab.

WARNING: This manifest key has been deprecated. Use `options_ui` instead.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/options_page#browser_compatibility

options page

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 runtime.openOptionsPage().

You specify options_ui as a path to an HTML file packaged with your extension. The HTML file can include CSS and JavaScript files, just like a normal web page. Unlike a normal page, though, the JavaScript can use all the WebExtension APIs that the extension has permissions for. However, it runs in a different scope than your background scripts.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/options_ui

The path to an HTML file containing the specification of your options page.

The path is relative to the location of manifest.json itself.

If true, the options page will open in a normal browser tab, rather than being integrated into the browser's add-ons manager.

Page popup

A page action is an icon that your extension adds inside the browser's URL bar.

Your extension may optionally also supply an associated popup whose content is specified using HTML, CSS, and JavaScript.

If you supply a popup, then the popup is opened when the user clicks the icon, and your JavaScript running in the popup can handle the user's interaction with it. If you don't supply a popup, then a click event is dispatched to your extension's background scripts when the user clicks the icon.

Page actions are like browser actions, except that they are associated with particular web pages rather than with the browser as a whole. If an action is only relevant on certain pages, then you should use a page action and display it only on relevant pages. If an action is relevant to all pages or to the browser itself, use a browser action.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/page_action

Hide the page action by default for pages whose URLs match any of the given match patterns.

Note that page actions are always hidden by default unless show_matches is given. Therefore, it only makes sense to include this property if show_matches is also given, and will override the patterns in show_matches.

Show the page action by default for pages whose URLs match any of the given patterns.

Controls whether or not the page action should appear in the location bar by default when the user installs the extension.

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 install time that the extension is requesting certain privileges, and ask them to confirm that they are happy to grant these privileges.

The key can contain three kinds of permissions:
 - host permissions: Specified as match patterns, and each pattern identifies a group of URLs for which the extension is requesting extra privileges. For example, a host permission could be "*://developer.mozilla.org/*".
- API permissions: Specified as keywords, and each keyword names a WebExtension API that the extension would like to use.
- activeTab: This permission is specified as "activeTab". If an extension has the activeTab permission, then when the user interacts with the extension, the extension is granted extra privileges for the active tab only.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/permissions

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 clicks a "mailto:" link, the browser opens the application selected as the handler for the "mailto:" protocol (or offers them a choice of handlers, depending on their settings).

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/protocol_handlers

protocol handler

A protocol handler specification

A string defining the protocol. It can either be one of the predefined protocols, or a custom name prefixed with "web+" or "ext+". For example: "web+foo" or "ext+foo". The custom name must consist only of lower-case ASCII characters. It's recommended that extensions use the "ext+" form.

A custom-named protocol. These MUST be prefixed with 'web+' or 'ext+', followed by a string consisting of only lower-case ASCII characters.

A pre-existing protocol allowed for use with WebExtensions.

bitcoin dat dweb ftp geo gopher im ipfs ipns irc ircs magnet mailto matrix mms news nntp sip sms smsto ssb ssh tel urn webcal wtai xmpp

A string representing the name of the protocol handler. This will be displayed to the user when they are being asked if they want this handler to open the link.

A string representing the URL of the handler. This string must include "%s" as a placeholder: this will be replaced with the escaped URL of the document to be handled. This URL might be a true URL, or it could be a phone number, email address, or so forth. This is a localizable property.

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 name will be used instead and may be truncated.

This is a localizable property.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/short_name

sidebar page

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.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/sidebar_action

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 is a localizable property.

 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.

This is a localizable property.

Determines whether the sidebar should open on install. The default behavior is to open the sidebar when installation is completed.

storage policies

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 system administrator instead of the user, enabling the app to be configured for all users of an organization.

After declaring the policies, they are read from the storage.managed API. However, if a policy value does not conform to the schema, then it is not published by the storage.managed API. It's up to the app to enforce the policies configured by the administrator.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/storage

The full path of the file within the extension that defines the schema of the manage storage.

theme

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

images

Represents the images to display in various parts of the browser.

The URL of a foreground image to be added to the header area and anchored to the upper right corner of the header area.

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.

URL for an additional background image

colors

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 https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/theme#colors.

All these properties can be specified as either a string containing any valid CSS color string including hexadecimal (see https://developer.mozilla.org/en-US/docs/Web/CSS/color_value), or an RGB array

Note: Where a component is affected by multiple color properties, the properties are listed in order of precedence.

The color of text and icons in the bookmark and find bars. Also, if tab_text isn't defined it sets the color of the active tab text and if icons isn't defined the color of the toolbar icons. Provided as Chrome compatible alias for toolbar_text.

The color of the background of the pressed toolbar buttons.

The color of the background of the toolbar buttons on hover.

The color of toolbar icons, excluding those in the find toolbar.

The color of toolbar icons in attention state such as the starred bookmark icon or finished download icon.

The color of the header area background, displayed in the part of the header not covered or visible through the images specified in "theme_frame" and "additional_backgrounds".

The color of the header area background when the browser window is inactive, displayed in the part of the header not covered or visible through the images specified in "theme_frame" and "additional_backgrounds".

The new tab page background color.

The new tab page card background color.

The new tab page text color.

The background color of popups (such as the URL bar dropdown and the arrow panels).

The border color of popups.

The background color of items highlighted using the keyboard inside popups (such as the selected URL bar dropdown item).

The text color of items highlighted inside popups.

The text color of popups.

The background color of the sidebar.

The border and splitter color of the browser sidebar

The background color of highlighted rows in built-in sidebars

The text color of highlighted rows in sidebars.

The text color of sidebars.

The color of the vertical separator of the background tabs.

DEPRECATED

The color of the text displayed in the inactive page tabs. If tab_text or bookmark_text isn't specified, applies to the active tab text.

The color of the selected tab line.

The color of the tab loading indicator and the tab loading burst.

The background color of the selected tab. When not in use selected tab color is set by frame and the frame_inactive.

Represents the text color for the selected tab. If tab_line isn't specified, it also defines the color of the selected tab line.

The background color for the navigation bar, the bookmarks bar, and the selected tab.

This also sets the background color of the "Find" bar.

The color of the line separating the bottom of the toolbar from the region below.

The background color for fields in the toolbar, such as the URL bar.

This also sets the background color of the Find in page field.

The border color for fields in the toolbar.

This also sets the border color of the Find in page field.

The focused border color for fields in the toolbar.

The focused background color for fields in the toolbar, such as the URL bar.

The background color used to indicate the current selection of text in the URL bar (and the search bar, if it's configured to be separate).

The color used to draw text that's currently selected in the URL bar (and the search bar, if it's configured to be separate box).

The color of separators inside the URL bar. In Firefox 58 this was implemented as toolbar_vertical_separator.

DEPRECATED

The color of text in fields in the toolbar, such as the URL bar. This also sets the color of text in the Find in page field.

The color of text in focused fields in the toolbar, such as the URL bar.

The color of toolbar text. This also sets the color of text in the "Find" bar.

The color of the line separating the top of the toolbar from the region above.

The color of the separator in the bookmarks toolbar.

properties

Affects how the "additional_backgrounds" images are displayed and color schemes are applied.

An array of enumeration values defining the alignment of the corresponding "additional_backgrounds": array item.

bottom
center
left
right
top
center bottom
center center
center top
left bottom
left center
left top
right bottom
right center
right top

Defines how the corresponding "additional_backgrounds": array item repeats.

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

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

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 function, even if no API script is specified.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/user_scripts

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 script executes automatically on any webpage defined in matches by userScripts.register. However, this is before the user script sandbox object is created and the custom API methods can be exported.

To export the custom API methods, the script listens for userScripts.onBeforeScript and then export the custom API methods.

Not every user script may need to consume all of the custom API methods. You can, therefore, include details of the APIs needed in scriptMetadata when running userScripts.register. The API script then accesses the scriptMetadata through the script parameter received by the userScripts.onBeforeScript listener (as script.metadata).

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 string doesn't comply with this format. They may also apply restrictions to the range of numbers available.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/version

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 for display purposes as well.https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/version_name

Sometimes you want to package resources—for example, images, HTML, CSS, or JavaScript—with your extension and make them available to web pages and other extensions.

With the web_accessible_resources key, you list all the packaged resources that you want to make available to web pages. You specify them as paths relative to the manifest.json file.

Note that content scripts don't need to be listed as web accessible resources.

If an extension wants to use webRequest or declarativeNetRequest to redirect a public URL (e.g., HTTPS) to a page that's packaged in the extension, then the extension must list the page in the web_accessible_resources key.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/web_accessible_resources

extension button

Defines the part of the browser in which the button is initially placed.

This property is only supported in Firefox.

navbar menupanel tabstrip personaltoolbar

This property enables you to specify different icons for themes depending on whether Firefox detects that the theme uses dark or light text.

theme icon

A URL pointing to an icon. This icon displays when a theme using dark text is active (such as the Firefox Light theme, and the Default theme if no default_icon is specified).

Icons are specified as URLs relative to the manifest.json file.

A URL pointing to an icon. This icon displays when a theme using light text is active (such as the Firefox Dark theme).

Icons are specified as URLs relative to the manifest.json file.

The size of the two icons in pixels.

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_migration

CSS color string.

https://developer.mozilla.org/en-US/docs/Web/CSS/color_value

RGB array

RGB color component

A description of the shortcut; i.e. what it does

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.

The two modifiers cannot be the same, but that is not validated due to it being inherently obvious and for the sake of the readability of the regex

There are two valid formats for shortcut keys: as a key combination or as a media key.

Key combinations must consist of 2 or 3 keys (<modifier>+[<secondary_modifier>]+<key>), e.g.: "Ctrl+Shift+Z"

If a key combination is already used by the browser (like "Ctrl+P") or by an existing add-on, then you can't override it. You can define it, but your event handler will not be called when the user presses the key combination.

https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/manifest.json/commands#shortcut_values

 Use this to specify one or more icons for the browser action. The icon is shown in the browser toolbar by default.

Icons are specified as URLs relative to the manifest.json file itself.

You can specify a single icon file by supplying a string here

To specify multiple icons in different sizes, specify an object here. The name of each property is the icon's height in pixels, and must be convertible to an integer. The value is the URL.

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 file. Don't use <script> with embedded code, because you'll get a confusing Content Violation Policy error.

Unlike a normal web page, JavaScript running in the popup can access all the WebExtension APIs (subject, of course, to the extension having the appropriate permissions).

This is a localizable property.

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.

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 are supported. "*" is not valid in this field.

See the list of valid Gecko versions: https://addons.mozilla.org/api/v5/applications/firefox/

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.

See the list of valid Gecko versions: https://addons.mozilla.org/api/v5/applications/firefox/

Provide a JSON object that satisfies the schema "JSON schema for WebExtensions manifest files". Here are the required top‑level fields: manifest_version, name, version. Return only the valid JSON object.

JSON schema for WebExtensions manifest files