Browser StudioBrowser Studio

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.

  1. 01

    Fill in the basics

    Name, version, description, and your background service worker file.

  2. 02

    Pick permissions

    Toggle the permissions you need — flagged ones trigger a strong install warning.

  3. 03

    Copy or download

    Drop the generated manifest.json straight 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.

manifest.json is the required configuration file at the root of every Chrome extension. It declares the name, version, permissions, background service worker, and entry points. Chrome reads it to know what your extension is and what it's allowed to do.

Manifest V3 replaces background pages with a service worker (background.service_worker), splits permissions into permissions and host_permissions, uses the action key instead of browser_action/page_action, and requires declarativeNetRequest instead of blocking webRequest. This generator outputs MV3 by default.

Request the minimum you need. Permissions like tabs, history, management, and broad host permissions (<all_urls>) trigger a strong install warning — this tool flags those inline. Fewer scary warnings means more installs and fewer uninstalls.

Only if your extension reads or changes page content or network requests on specific sites. Use the narrowest pattern that works (for example https://*.example.com/* instead of <all_urls>) to reduce the install warning.

Fill in the form above: name, version, description, the service worker file and the permissions you need. The generator writes a valid Manifest V3 manifest.json as you type. Copy it, or download the file and save it in the root folder of your extension, next to your scripts.

Yes. Download saves a ready-to-use manifest.json. Put it in your extension's root folder, then load the folder in chrome://extensions with Developer mode on and Load unpacked.

No. A web app manifest (manifest.webmanifest or manifest.json linked from a web page) describes an installable website or PWA: its name, icons and theme colour. A Chrome extension manifest describes an extension: its permissions, service worker, content scripts and toolbar action. This tool makes the extension kind.

Paste it into the free Manifest Validator to catch errors, deprecated keys and the exact permission warnings users will see. If it is still Manifest V2, the MV2 to MV3 Checker lists what to change.

A scary permission prompt is one of the most common reasons users abandon an install or uninstall shortly after. Keeping your manifest lean builds trust — and when users do leave, UserFeed's uninstall feedback tells you whether permissions were the reason.

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