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 scan

Turn 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.
Scan the production ZIP

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.
Review how the scanner works

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.
Scan ZIP packaging and manifest references

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.
Run a repeatable pre-submission scan

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.
Review host permissions and privacy notes

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.

Related guides

Chrome Extension Rejection Checker is an independent local preflight scanner. It is not affiliated with Google or Chrome Web Store and does not guarantee approval.