Quick answer
A Chrome extension's manifest.json declares its name, version, files and permissions, and Manifest V3 is the only format Chrome runs today. Playxoft's free Chrome Extension Manifest Generator builds one from a guided form: choose a popup, service worker, content scripts and permissions, and it writes valid JSON, previews the exact install warnings Chrome will show, and packages a starter project with icons as a zip you can load unpacked.
- Guided Manifest V3 form
- Exact install warning preview
- Searchable permissions catalogue
- Live validation
- Starter project zip
- PNG icons drawn for you
- Copy and download
How to use the Chrome Extension Manifest Generator
- 1Enter the Name, Version and Description. The counters keep you inside Chrome's 75 and 132 character limits.
- 2Choose the parts your extension has: a Toolbar button with a popup, a Service worker, Content scripts, an options page or a side panel.
- 3Pick permissions from the searchable catalogue. Set each one to Required or Optional and watch the Install warnings preview change.
- 4Add host permissions only for the sites you need, as narrow as you can make them.
- 5Copy or download manifest.json, or click Download starter project for a zip with the service worker, popup, icons and a README.
- 6Open chrome://extensions, turn on Developer mode, click Load unpacked and pick the unzipped folder.
What is manifest.json in a Chrome extension?
Every Chrome extension has a manifest.json file in its root folder. It tells Chrome what the extension is called, which files to run, and what it is allowed to access. Chrome needs three keys to load it, and the Chrome Web Store needs two more before you can publish:
| Key | Needed by | Rule |
|---|---|---|
manifest_version | Chrome | Must be the integer 3 |
name | Chrome | Up to 75 characters |
version | Chrome | 1 to 4 dot-separated integers, each 0 to 65535 |
description | Chrome Web Store | Up to 132 characters |
icons | Chrome Web Store | Always include a 128×128 PNG |
Versions can't have leading zeros (1.032 is invalid) and can't be all zeros. Put labels such as "1.0 beta" in version_name instead. The full list of keys is in Chrome's manifest reference.
What does a Manifest V3 manifest look like?
Here is a complete manifest for a typical extension: a toolbar popup, a background service worker, one content script and narrow permissions.
{
"manifest_version": 3,
"name": "Focus Highlighter",
"version": "1.2.0",
"description": "Highlight the key sentences on any article with one click.",
"icons": { "16": "icons/icon16.png", "48": "icons/icon48.png", "128": "icons/icon128.png" },
"action": { "default_popup": "popup.html", "default_title": "Highlight this page" },
"background": { "service_worker": "service-worker.js", "type": "module" },
"content_scripts": [
{ "matches": ["https://*.wikipedia.org/*"], "js": ["content.js"] }
],
"permissions": ["storage", "activeTab", "scripting"]
}actionis the toolbar button. It replacedbrowser_actionandpage_action.background.service_workertakes one file. Add"type": "module"to useimportstatements.content_scriptsrun in pages that matchmatchesand need at least onejsorcssfile.permissionsholds API names only. Site access goes inhost_permissions.
Which permissions trigger install warnings?
Chrome turns some permissions into warnings in the install dialog, and a new warning in an update disables the extension until the user accepts it. These are the exact strings Chrome shows:
| Permission | Install warning |
|---|---|
storage, alarms, activeTab, scripting, sidePanel | None |
tabs | Read your browsing history |
history | Read and change your browsing history on all your signed-in devices |
bookmarks | Read and change your bookmarks |
notifications | Display notifications |
https://example.com/* | Read and change your data on example.com |
<all_urls> or https://*/* | Read and change all your data on all websites |
Warnings combine: <all_urls> swallows the tabs warning, and tabs with sessions becomes "Read your browsing history on all your signed-in devices". The generator applies Chrome's own combination rules, so the preview matches what users see. The full list is on Chrome's permissions reference.
permissions vs host_permissions vs optional permissions?
Manifest V3 splits access into four keys:
permissions: APIs granted at install, such asstorageortabs.host_permissions: match patterns for sites the extension can read and change, granted at install.optional_permissionsandoptional_host_permissions: asked for later withchrome.permissions.request(), from a click, when the user turns on the feature that needs them.
Optional permissions keep the install dialog short, and an update that adds them doesn't disable your extension. If you only touch a page after the user clicks your toolbar button, activeTab grants temporary access to that tab with no warning at all. A few permissions can't be optional, including debugger, declarativeNetRequest, geolocation and proxy; the catalogue marks them.
What icon sizes does a Chrome extension need?
Provide PNG icons at 16, 32, 48 and 128 pixels:
- 128×128 is shown during installation and by the Chrome Web Store. Always include it.
- 48×48 appears on chrome://extensions.
- 16×16 is the favicon of your extension's pages; 16 and 32 also serve the toolbar.
WebP and SVG icons aren't supported. The starter project includes all four sizes, drawn in your browser from the color you pick, so the extension loads with real icons on day one.
What do I need before publishing to the Chrome Web Store?
- Remove every permission you don't use. The Chrome Web Store policy asks for the narrowest permissions that make your features work.
- Ship all code in the package. Manifest V3 doesn't allow remotely hosted code or
eval(). - If the extension handles any user data, publish a privacy policy and link it in the developer dashboard. Our privacy policy generator for Chrome extensions writes one for you.
- Run the manifest through the Manifest V3 validator to catch mistakes and see your review risk.
Frequently asked questions
Last updated by the Playxoft engineering team.