On the morning of 2 November 2026 I submitted a small Chrome extension. By the evening it was live. The review finished the same day. Here is what I learned along the way, written for anyone shipping their first one.
The extension is Compress Image to KB by editpdf.tools. You pick a JPG, PNG or WebP, type a target size in KB, and download a JPG that fits. It exists because online forms in India and elsewhere ask for photos under a fixed size, and people end up uploading ID photos to random sites to shrink them. I built it as a small companion to editpdf.tools, a set of free PDF and image tools that run in the browser.
1. You may not need a service worker
Most Manifest V3 tutorials start with a background service worker. My extension doesn't have one.
Everything happens in the popup: a file input, a number field, a button, a canvas. The user clicks the icon, the popup opens, the work happens there, and the popup closes. No events to listen for when the popup is closed, no messages between scripts, nothing to keep alive.
If your extension only does something when the user clicks it, try a popup only design first. Less code, fewer moving parts, fewer things to explain to the reviewer.
2. Zero permissions is a feature
My manifest declares no permissions and no host permissions. The file comes from a normal file input, the canvas does the compression, and the result is saved with a normal download link. No downloads permission needed, no activeTab, no storage.
There is no network code either. I tested it and saw zero external requests.
This paid off three ways. Users see no permission warning at install. The privacy section of the listing was short and easy to fill in honestly. And there was nothing for a reviewer to question.
Before adding a permission, ask whether a plain web API inside the popup can do the job.
3. Write the single purpose like you mean it
The Chrome Web Store asks for a single purpose description. This isn't a formality. Your extension should do one clear thing, and the description should say what that is in plain words.
Mine was easy because the extension really does one thing: compress a photo to a target size in KB. If you find yourself writing "and also" in that field, consider splitting the extension or cutting the extra feature.
4. The privacy tab needs real answers
The privacy tab asks you to justify each permission you request and to declare what user data you collect. For me, the answers were none and none. The data usage section was a row of "no".
The point is that every answer must match what the code actually does. If you use analytics, an API or remote code, declare it. If you don't, you can say so with confidence, which is a nice position to be in.
5. Trader verification for the EU
The dashboard asks you to declare whether you are a trader under EU rules. Read it carefully before answering, because it decides what contact details may be shown on your listing to EU users. Don't leave it for the last minute.
6. Screenshots: 1280x800
Store screenshots need to be 1280x800 (640x400 also works). I made mine show the actual flow: the popup, the size presets, the result. Plan them early, since a small popup has to read clearly inside a large frame.
7. New publishers start with a 2 extension limit
As a new publisher my limit was 2 extensions. You can request a higher limit from the dashboard, but it still changes how you plan. If you have a list of ideas, pick the one you'd stand behind most and spend your first slot on it.
8. Watch the review status, don't refresh it all day
After you submit, the item moves through review statuses in the dashboard. Mine was submitted in the morning and published the same evening. I can't promise yours will be that fast, but a small, single purpose, zero permission extension gives a reviewer very little to dig into.
What the extension does under the hood (short version)
It keeps full dimensions and searches for the highest JPG quality that fits, using canvas.toBlob with a quality value. If that isn't enough, it shrinks dimensions step by step until the file fits. A JPG already under the target is returned untouched. PNG transparency becomes white. In my test a 4.6 MB photo came out at 49.8 KB for a 50 KB target.
Honest limits: JPG output only, and no HEIC inside the extension. iPhone users can use the web version, Compress Image to KB on editpdf.tools, which also opens HEIC photos.
Try it, break it, tell me
You can install it from the Chrome Web Store. If you try it, an honest review there helps a lot.
If you've shipped an extension recently, what surprised you? I'd like to compare notes in the comments.
Top comments (0)