Chrome extension tools

Chrome Extension Manifest Generator (Manifest V3)

Fill in a guided form and get a valid Manifest V3 manifest.json, the exact install warnings users will see, and a starter project you can load in Chrome right away.

  • Free foreverNo trial, no paywall, no usage limits.
  • No sign-upOpen the page and start. We never ask for an email to use a tool.
  • PrivateEverything runs in your browser. Your input is never uploaded or stored on our servers.
  • Works offlineOnce the page has loaded, the tool keeps working without a connection.
Start again from a blank popup extension.
Shown in the Chrome Web Store, the install dialog and chrome://extensions. Up to 75 characters.
12/75
One to four dot-separated integers (0–65535), no leading zeros. Chrome updates users when this goes up.
Older Chrome versions can't install the extension, and existing users on them stop getting updates. Leave empty unless you use a newer API.
Plain text, up to 132 characters. Shown on the store listing and chrome://extensions. The Chrome Web Store requires it.
0/132
Set it to translate your extension. The name and description become __MSG_extName__ and __MSG_extDescription__, and the starter project includes _locales/<locale>/messages.json.
The icon in Chrome's toolbar. Clicking it opens your popup, or fires chrome.action.onClicked when there's no popup.
default_title: shown when the user hovers the button. Defaults to the name.
A small page that opens under the button. Turn it off to handle clicks in the service worker instead.
The Chrome Web Store requires a 128 px icon. The starter project draws all four sizes from the color you pick.
Handles events (install, clicks, messages, alarms) in the background. It starts on demand and stops when idle.
One JavaScript file. Import the rest of your code from it.
Lets the service worker use import statements. Without it, load other files with importScripts(). Dynamic import() isn't supported either way.
Show only the permissions you've turned on.
  • storage

    Save and sync data with chrome.storage (local, sync, session and managed areas).

    No install warningDocs
    Not requested.Granted at install. Its warning (if any) is in the install dialog.Requested later with chrome.permissions.request(), from a click. Keeps the install dialog short.
  • activeTab

    Temporary access to the current tab after the user clicks your action, a context menu item, a shortcut or an omnibox suggestion. No install warning.

    No install warningDocs
    Not requested.Granted at install. Its warning (if any) is in the install dialog.Requested later with chrome.permissions.request(), from a click. Keeps the install dialog short.
  • scriptingChrome 88+, Manifest V3

    Inject scripts and CSS with chrome.scripting. Also needs host permissions or activeTab for the target page.

    No install warningDocs
    Not requested.Granted at install. Its warning (if any) is in the install dialog.Requested later with chrome.permissions.request(), from a click. Keeps the install dialog short.
  • alarms

    Schedule code to run later or periodically with chrome.alarms. The service-worker-safe replacement for setTimeout.

    No install warningDocs
    Not requested.Granted at install. Its warning (if any) is in the install dialog.Requested later with chrome.permissions.request(), from a click. Keeps the install dialog short.
  • contextMenus

    Add items to Chrome's right-click menu with chrome.contextMenus.

    No install warningDocs
    Not requested.Granted at install. Its warning (if any) is in the install dialog.Requested later with chrome.permissions.request(), from a click. Keeps the install dialog short.
  • notifications

    Show system notifications with chrome.notifications.

    Install warning: Display notificationsDocs
    Not requested.Granted at install. Its warning (if any) is in the install dialog.Requested later with chrome.permissions.request(), from a click. Keeps the install dialog short.
  • sidePanelChrome 114+, Manifest V3

    Show your extension's UI in Chrome's side panel with chrome.sidePanel.

    No install warningDocs
    Not requested.Granted at install. Its warning (if any) is in the install dialog.Requested later with chrome.permissions.request(), from a click. Keeps the install dialog short.
  • offscreenChrome 109+, Manifest V3

    Open a hidden document for DOM work (clipboard, audio, parsing) that a service worker cannot do.

    No install warningDocs
    Not requested.Granted at install. Its warning (if any) is in the install dialog.Requested later with chrome.permissions.request(), from a click. Keeps the install dialog short.
  • unlimitedStorage

    Lift the quota for chrome.storage.local, IndexedDB, Cache Storage and the Origin Private File System.

    No install warningDocs
    Not requested.Granted at install. Its warning (if any) is in the install dialog.Chrome doesn't allow this permission to be optional.
  • tabs

    Read the privileged fields of Tab objects (url, title, favIconUrl) in chrome.tabs and chrome.windows. You usually don't need it just to use those APIs.

    Install warning: Read your browsing historyDocs
    Not requested.Granted at install. Its warning (if any) is in the install dialog.Requested later with chrome.permissions.request(), from a click. Keeps the install dialog short.

Warnings shown per permissionChrome merges some warnings: <all_urls> hides the tabs warning, tabs + sessions becomes one history warning. The preview applies those rules. are what Chrome displays when it's requested alone. The install preview shows the combined list.

Sites the extension can read and change, granted at install. Each one appears in the install warning. Keep it as narrow as you can.
Sites you ask for at runtime with chrome.permissions.request(). Use "https://*/*" here when users pick the sites.

manifest.json

Updates as you edit the form. It's checked against Chrome's Manifest V3 rules below.
CopyDownload manifest.json

Download starter project

A ready-to-load folder: manifest.json, service-worker.js, popup.html, popup.css, popup.js, README.md, icons/icon16.png, icons/icon32.png, icons/icon48.png, icons/icon128.png.

Service worker, popup, content scripts, icons and a README with your install warnings. Built in your browser.

What users see at install

Chrome's own warning strings, combined the way Chrome combines them.

Add “My Extension”?

No permission warnings. Users only confirm the install.

Checks

The same Manifest V3 rules as the validator.
Chrome refuses to load it, the store rejects it, or Chrome ignores the key so the feature never works.It loads, but something is wrong or risky.Worth knowing. Nothing to fix.
  • Warning: Missing "description".

    The Chrome Web Store requires one (up to 132 characters).

    Ln 1, Col 1descriptionChrome docs

Store review risk: Low

Based on what Google says slows review down. A guide, not a prediction.

Privacy policy: nothing here clearly handles user data, but if your code collects or sends any, the Chrome Web Store requires a policy.

Generate a privacy policy for your extension

Need an extension built properly? Talk to our team

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

  1. 1Enter the Name, Version and Description. The counters keep you inside Chrome's 75 and 132 character limits.
  2. 2Choose the parts your extension has: a Toolbar button with a popup, a Service worker, Content scripts, an options page or a side panel.
  3. 3Pick permissions from the searchable catalogue. Set each one to Required or Optional and watch the Install warnings preview change.
  4. 4Add host permissions only for the sites you need, as narrow as you can make them.
  5. 5Copy or download manifest.json, or click Download starter project for a zip with the service worker, popup, icons and a README.
  6. 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:

KeyNeeded byRule
manifest_versionChromeMust be the integer 3
nameChromeUp to 75 characters
versionChrome1 to 4 dot-separated integers, each 0 to 65535
descriptionChrome Web StoreUp to 132 characters
iconsChrome Web StoreAlways 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"]
}
  • action is the toolbar button. It replaced browser_action and page_action.
  • background.service_worker takes one file. Add "type": "module" to use import statements.
  • content_scripts run in pages that match matches and need at least one js or css file.
  • permissions holds API names only. Site access goes in host_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:

PermissionInstall warning
storage, alarms, activeTab, scripting, sidePanelNone
tabsRead your browsing history
historyRead and change your browsing history on all your signed-in devices
bookmarksRead and change your bookmarks
notificationsDisplay 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 as storage or tabs.
  • host_permissions: match patterns for sites the extension can read and change, granted at install.
  • optional_permissions and optional_host_permissions: asked for later with chrome.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?

  1. Remove every permission you don't use. The Chrome Web Store policy asks for the narrowest permissions that make your features work.
  2. Ship all code in the package. Manifest V3 doesn't allow remotely hosted code or eval().
  3. 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.
  4. Run the manifest through the Manifest V3 validator to catch mistakes and see your review risk.

Frequently asked questions

Create a file named manifest.json in the extension's root folder with at least manifest_version 3, a name and a version, then add a description and icons for the Chrome Web Store. A generator writes it from a form and checks it against Chrome's rules, so you don't have to remember every key.
Manifest V3 replaces background pages with a service worker, browser_action and page_action with action, and blocking webRequest with declarativeNetRequest. It moves host patterns into host_permissions, turns web_accessible_resources and the content security policy into objects, and bans remotely hosted code. Chrome no longer runs Manifest V2 extensions.
No. The matches list of a content script is enough to inject it into those pages. Chrome treats those matches as host access, so they produce the same install warning as host_permissions. You need host_permissions for fetch requests to those sites, for chrome.scripting injection without activeTab, and for APIs such as cookies.
It is the install warning Chrome shows when an extension can access every site: <all_urls>, *://*/* or https://*/* in host_permissions or content script matches, or a permission that implies it, such as debugger, pageCapture, tabCapture or proxy. Narrower patterns or activeTab avoid it.
Always include a 128 by 128 pixel PNG, which Chrome uses during installation and the Chrome Web Store requires. Add 48 by 48 for the extensions page and 16 by 16 for the favicon; 32 by 32 helps on high-density screens. WebP and SVG are not supported.
Yes, if it handles any user data. The Chrome Web Store requires an accurate privacy policy linked in the developer dashboard, covering what data you collect, how you use it and who you share it with. Extensions with host access or permissions such as tabs, history or cookies almost always handle user data.
No. The manifest, the warning preview, the icons and the zip file are all built in your browser. Nothing you enter is uploaded or stored.

Last updated by the Playxoft engineering team.

From developers who publish Chrome extensions

Want your extension approved the first time?

Chrome Web Store reviews reject extensions for broad permissions, missing privacy disclosures and remote code. We design, build and publish Manifest V3 extensions that pass review and stay fast. Tell us what yours should do and get a free consultation.

More free tools

See all tools

Manifest V3 Validator

New

Check a Chrome extension manifest.json: errors by line, MV3 rules, install warnings, review risk.

Open tool

MV2 to MV3 Converter

New

Convert a Manifest V2 manifest.json to Manifest V3, with a diff and a code checklist.

Open tool

Privacy Policy Generator

New

Draft a privacy policy for your app, website, extension or game, with GDPR and SDK clauses.

Open tool

Privacy Policy Generator for Apps

New

Write the privacy policy the App Store and Google Play require, with your SDKs disclosed.

Open tool

Privacy Policy Generator for Websites

New

Create a website privacy policy covering forms, cookies, analytics, ads and embedded content.

Open tool

Terms and Conditions Generator

New

Draft terms and conditions for your website, app or SaaS: accounts, payments, content and liability.

Open tool