Free tool
Chrome extension manifest.json generator
Build a valid manifest.json from a simple form. Pick permissions, set your service worker, and get a clean Manifest V3 file to copy or download, with inline warnings for the permissions that scare users away.
manifest.json
{
"manifest_version": 3,
"name": "My Extension",
"version": "1.0.0",
"permissions": [
"storage"
],
"background": {
"service_worker": "background.js"
}
}How it works
From form to manifest in three steps.
- 01
Fill in the basics
Name, version, description, and your background service worker file.
- 02
Pick permissions
Toggle the permissions you need — flagged ones trigger a strong install warning.
- 03
Copy or download
Drop the generated
manifest.jsonstraight into your project root.
Reference
What each manifest.json field does.
The fields a Manifest V3 extension uses most, in the order they usually appear. Only manifest_version, name and version are required.
manifest_version- Always 3 for a new extension. Chrome no longer accepts new Manifest V2 extensions in the Web Store.
name- The name shown in Chrome and the Web Store, up to 75 characters. short_name (about 12 characters) is used where space is tight.
version- One to four dot-separated numbers, such as 1.0.2. Raise it with every Web Store upload; Chrome uses it to decide whether to update.
description- A plain-text summary of up to 132 characters, shown on the extensions page and the store listing.
icons- Your icon at 16, 32, 48 and 128 pixels, as PNG files. 128 is the one the Web Store shows.
action- The toolbar button: default_popup is the HTML page it opens, default_icon and default_title its icon and tooltip. Replaces browser_action and page_action from Manifest V2.
background.service_worker- The script that handles events in the background. It is a service worker, so it stops when idle: keep state in chrome.storage rather than in variables. Add "type": "module" to use ES imports.
permissions- The Chrome APIs the extension uses, such as storage, alarms or tabs. Some trigger an install warning; request only what you use.
host_permissions- The sites the extension can read or change, as match patterns like https://*.example.com/*. Separate from permissions since Manifest V3, and the biggest source of install warnings.
content_scripts- Scripts and styles injected into matching pages: matches lists the URL patterns, js and css the files, run_at when they run.
options_page / options_ui- A settings page for the extension, opened from its menu in Chrome.
web_accessible_resources- Files inside the extension that web pages may load, such as an image a content script adds to the page. In Manifest V3 each entry pairs resources with the matches allowed to use them.
A complete example
A small extension with a popup, a service worker and a content script on one site:
{
"manifest_version": 3,
"name": "Page Notes",
"version": "1.0.0",
"description": "Keep a note for any page you visit.",
"icons": { "16": "icon16.png", "48": "icon48.png", "128": "icon128.png" },
"action": { "default_popup": "popup.html", "default_title": "Page Notes" },
"background": { "service_worker": "background.js" },
"permissions": ["storage"],
"host_permissions": ["https://*.example.com/*"],
"content_scripts": [
{ "matches": ["https://*.example.com/*"], "js": ["content.js"], "run_at": "document_idle" }
]
}Already have a manifest? Check it with the Manifest Validator, or move an old one forward with the MV2 to MV3 Checker.
FAQ
Manifest V3, explained.
Shipped it? Now learn why users leave.
A lean manifest gets the install. UserFeed tells you what happens next — a branded uninstall feedback form and drop-off funnel, free for one extension.
Explore UserFeed