Introduction
manifest.json is the file every browser extension has at its top
level. It is what makes a folder an extension: its name and version, the permissions
it asks for, and the scripts and pages it uses. It is used by Chrome and the other
Chromium browsers, and by Firefox and Safari, which follow the same WebExtensions
design. In a package it sits at the top of a
.crx or .xpi file.
The file is JSON, and MDN notes it may
also contain // comments. A file dropped on any page of this site, and
named manifest.json with a manifest_version, opens in the
explorer with its permissions and keys explained.
Structure
The file holds one JSON object. Only three keys are required on every browser.
{
"manifest_version": 3,
"name": "Sample Extension",
"version": "1.0",
"description": "A sample",
"icons": { "128": "icon.png" },
"action": { "default_popup": "popup.html" },
"background": { "service_worker": "worker.js" },
"permissions": ["storage"],
"host_permissions": ["https://*.example.org/*"]
}
| Key | Required by | Holds |
|---|---|---|
manifest_version | every browser | The manifest’s format: 2 or 3. |
name | every browser | The extension’s name. |
version | every browser | The extension’s version. |
description | Chrome Web Store | A description. |
icons | Chrome Web Store | Icons, as a map from size to file. |
The rest of the format is described on these pages:
- Keys – every key, and the structure of the main ones
- Permissions – what each permission allows, and the host permissions
Manifest versions
Chrome supports only Manifest V3 now. Chrome 139 removed Manifest V2, and the remaining Manifest V2 extensions were removed from the Chrome Web Store on 31 August 2026. Firefox supports both.
| Key | Manifest V2 | Manifest V3 |
|---|---|---|
| Toolbar button | browser_action, page_action | action |
| Background | background.page or background.scripts | background.service_worker in Chrome; Firefox uses background.scripts |
| Host permissions | In permissions and optional_permissions | In host_permissions and optional_host_permissions |
web_accessible_resources | A list of file paths, open to every site and extension | A list of objects, each saying who may use the files |
content_security_policy | A string | An object with extension_pages and sandbox |
Also used for
- GeoJSON – Map points, lines and areas with properties, written as JSON.
- Hugging Face model config (config.json) – config.json: a model’s architecture and sizes, read before the weights.
- Hugging Face tokenizer (tokenizer.json) – tokenizer.json: a language model’s vocabulary and tokenising rules.
- JSON Schema – A JSON document that describes and validates other JSON documents.
- JavaScript Object Notation – Text format for objects, arrays, strings, numbers and booleans.
- Lottie animation – Vector animations as JSON, exported from After Effects and played in apps and web pages.
- Visual Studio Code settings – VS Code’s settings.json: dotted setting IDs in JSON with comments.
- npm package manifest (package.json) – A JavaScript package’s name, version, scripts and dependencies, in JSON.
Links
Software
- Google Chrome – reads the manifest of a Chrome extension (Windows, macOS, Linux)
- Firefox – reads the manifest of a WebExtension (Windows, macOS, Linux)
- Safari – Apple’s browser, which also runs WebExtensions (macOS, iOS)
Reference
- Manifest file format – Chrome’s reference to every key
- manifest.json – MDN’s reference for WebExtensions