Manifest V3 checklist
Manifest V3 Pre-Submission Checklist for Chrome Web Store
Check ZIP root packaging, manifest fields, referenced files, permissions, CSP, and privacy review risks before submitting an MV3 extension.
Run local ZIP scanTurn the checklist into a scan
Run the checklist against your final MV3 ZIP
Use the checklist for manual review, then scan the packaged ZIP to catch root manifest mistakes, missing files, extension-page CSP risks, sandbox page references, permission reminders, and remote-code signals before upload.
Independent local static preflight only. This is not an official Chrome Web Store validation result.
Guide
What to check
Package the ZIP correctly
Chrome Web Store expects manifest.json at the ZIP root. Do not zip the parent project folder unless manifest.json is directly inside that root. Scan the exact release ZIP, not a development folder.
Validate manifest references
Background service workers, popup files, options pages, content scripts, icons, web accessible resources, and DNR rules should all point to files that exist in the submitted ZIP.
Review permissions and CSP
Broad host permissions, sensitive APIs, and unsafe CSP declarations should be minimized and justified before submission. Many valid extensions still need clear policy explanations.
Confirm the package, not just the source tree
Chrome Web Store reviews the uploaded ZIP. The checklist should be applied to the final production package, including generated files, service worker output, extension pages, sandbox pages, icons, and DNR resources.
Practical notes
How to apply this before resubmission
Check the artifact Chrome Web Store will actually receive
A source tree can look correct while the release ZIP is still wrong. Common mistakes include zipping the parent folder, shipping old build output, leaving a referenced page out of dist, or bundling a dependency that creates remote script loaders. The submission checklist should be run against the same ZIP you intend to upload, not against a development directory.
- •Confirm manifest.json is at ZIP root.
- •Confirm every manifest-declared page, icon, script, and ruleset exists in the package.
- •Confirm production build output does not reintroduce remote executable code.
Make the checklist repeatable for every release
Treat the scan report as a release gate. Before each Chrome Web Store upload, rebuild the extension, scan the ZIP, review scan-limit notes, then save the Markdown or JSON report with the release notes. This does not prove approval, but it makes packaging and policy-risk review consistent across versions.
- •Run the same checklist after dependency upgrades.
- •Review Medium permission reminders even when no High findings appear.
- •Keep manual Dashboard privacy checks outside the scanner report.
Package structure checks should happen before policy wording
A clean privacy explanation cannot compensate for a broken release ZIP. Before editing listing copy, confirm that the root manifest exists, referenced files are present, icons resolve, background service worker paths are local, and content script files exist where the manifest says they do. These checks are mechanical, but they prevent avoidable upload failures and confusing rejection loops.
- •Open the ZIP root and verify manifest.json is not inside a nested build folder.
- •Check every manifest-declared executable file against the packaged file list.
- •Confirm the version number is ready for a new upload when code or packaged assets changed.
Use the checklist as a release gate, not a one-time audit
The best use of a pre-submission checklist is repeatability. Run it whenever dependencies, bundler settings, analytics, authentication, permissions, or dashboard privacy answers change. A release that passed once can fail later if a package update introduces a remote loader, dynamic worker, broader host pattern, or new API permission.
- •Scan after production build output is finalized.
- •Keep a short record of High findings fixed and Medium findings reviewed.
- •Re-run the scan after removing files, because manifest references can become stale.
What still belongs in manual review
Some submission risks cannot be decided from ZIP text alone. Dashboard privacy fields, single-purpose fit, reviewer interpretation, user-facing disclosure, and whether a permission is justified by the product experience still need a human check. Keep those items in the checklist, but do not label them as automatic code violations unless the package itself contains a direct signal.
- •Map each permission to one visible feature.
- •Confirm privacy fields describe the same behavior as the extension UI.
- •Use official dashboard and policy pages as the final wording reference.
Checklist
Action checklist
- □ Set manifest_version to 3.
- □ Place manifest.json at the ZIP root.
- □ Verify background service worker paths exist in the ZIP.
- □ Verify action popup, options page, content scripts, icons, and web accessible resources exist.
- □ Remove unused permissions and narrow host permissions when possible.
- □ Check extension page CSP for unsafe-eval and remote script assumptions.
- □ Prepare privacy disclosure and single-purpose explanation before submission.
Examples
Common cases this page helps with
Missing popup file
manifest.json references popup.html, but the production build outputs popup/index.html. The scanner reports the missing reference so the manifest or build path can be corrected.
Missing icon path
The manifest references icons/icon128.png, but the ZIP contains assets/icon128.png. The scanner flags the path mismatch before upload.
Development-only files
A local build works because source files exist, but the submitted ZIP lacks generated content script files. Scan the release ZIP to catch this mismatch.
FAQ
Frequently asked questions
Why does ZIP root packaging matter?
Chrome Web Store evaluates the submitted package. If manifest.json is nested inside a folder instead of at the ZIP root, the package can fail before deeper review.
Can the scanner validate every Chrome policy?
No. It checks static package signals. You still need to review listing metadata, privacy practices, and actual extension behavior.
Should I rerun the scanner after each fix?
Yes. Rebuild the production ZIP after changes and scan the rebuilt package, because bundler output can change paths and generated files.
Official sources
Sources used for this page
These links are listed so scanner findings and page guidance can be checked against Chrome's source documentation. This site remains an independent preflight tool.
Chrome Web Store: Prepare your extension
States that the Chrome Web Store upload ZIP should contain manifest.json at the root, not nested inside a folder.
Chrome Extensions: Manifest content security policy
Documents extension_pages and sandbox CSP policies, default policies, and MV3 minimum CSP restrictions.
Chrome Extensions: Manifest sandbox
Documents sandbox.pages and the sandbox CSP requirements, including the sandbox directive and allow-same-origin restriction.
Chrome Web Store: Permissions policy
Describes using only the narrowest permissions required for the extension's current functionality.
Chrome Web Store: Fill out the privacy fields
Explains the Developer Dashboard privacy practices tab, single purpose, and permission justification fields.
Chrome Web Store: Update your item
Explains that changing code or package assets requires uploading a new ZIP and incrementing the extension version.
Related guides