PlugThis - Create your own Chrome Extensions by chatting with AI
by•
You wanted a Chrome extension that would save you 15 minutes a day. You searched the Chrome Web Store, and it's not there.
Now you can just describe it in plain English, and PlugThis builds it for you. The code is yours. Want changes? Chat. Need login or a database? Connect Supabase. Ready to publish? We generate the icons, screenshots, and listing copy the store asks for.
Everyone else builds web apps. We build Chrome extensions.


Replies
YourSitee
I like that you picked a narrow but painful category. Chrome extensions look small from the outside, but manifests, content scripts, service workers, permissions, store rules, icons, screenshots, and listing copy make them very different from a normal web app. as a builder, I can immediately think of a few annoying browser workflows that would be perfect as tiny personal extensions.
Curious how PlugThis handles permissions and Chrome Web Store review risk. if someone asks for an extension that reads pages, injects UI, or works across many websites, does it guide them toward safer/minimal permissions automatically?
PlugThis
@andrasczeizel Thanks Andras, this is exactly the part most people underestimate.
Yeah, permissions are handled deliberately. When you describe an extension, PlugThis only grants what the feature actually needs. <all_urls> content scripts only get added if the extension truly injects into pages, and things like tabs, storage, sidePanel are added on demand, not by default. So a "read this one page" tool doesn't quietly end up with broad host access.
On review risk: there's a built-in step that runs over the generated code like a Web Store reviewer would. It flags sensitive permissions (cookies, identity, history, scripting, etc.), tells you when a privacy policy is required, and auto-drafts the host-permission and remote-code justifications for the CWS submission form. The goal is that when you hit "submit," you're not guessing what Google wants.
Would genuinely love to hear which annoying browser workflows you had in mind. Those tiny personal extensions are the sweet spot.
the manifest/content-script/service-worker mismatch is exactly why lovable and bolt hit a wall on extensions. the abstraction they picked works for pages not for browser plumbing.
real q: how does plugthis handle the distribution side? chrome web store trust is the second wall after the code works. asking because building the extension is now the easier half of shipping one.
PlugThis
@thenameisarian You nailed the framing. Once codegen is solved, building is the easy half and the Web Store is the second wall. That's the part we spent the most on, because "here's your zip, good luck" is where most tools stop.
Concretely, PlugThis treats distribution as a first-class step:
- It generates the listing from your actual code: long description, the 25 to 132 char short description, and the single-purpose statement Google now requires.
- It auto-drafts the compliance surface that usually triggers rejections: per-permission and host justifications, remote-code justification, and privacy disclosures mapped to Chrome's data categories.
- It packages the zip and writes the metadata into the manifest at publish time.
- Then it connects to your Chrome Web Store account over OAuth (refresh token encrypted at rest) and uploads and publishes directly. It remembers your Store item ID, so after the first listing, updates are basically one-click.
The honest boundary: we can remove the mechanical friction and the "did I fill the disclosures right" guesswork, but we can't make Google approve you. Review, trust, and the one-time developer registration are still theirs. What we kill is the part where the code works but you stall for a week because the listing and disclosures are a maze.
Curious if that matches where you have seen bolt and lovable users get stuck, at the store submission rather than the build.
+1 to @thenameisarian on the browser-plumbing wall — that manifest/service-worker gap is exactly where the web-app builders stall. @nefer_ai your distribution answer already covers the Web Store side, so I'll ask the two things next to it:
Extensions can't be previewed in an iframe the way a web app can — you load them unpacked and click through real pages. How does PlugThis close the build→see-it-actually-working loop while you're iterating?
And on review: does the generator scope host/API permissions down to just what the feature needs, or is trimming an over-broad manifest still on the human before submitting? Least-privilege is usually what makes or breaks that first review 👌
PlugThis
@akbar_b Both are the right questions, so here's the honest answer with the edges included.
On the build to see-it-working loop: an extension can't live in an iframe like a web app, so we don't fake that. What PlugThis does is render a live preview of your extension's real UI surfaces, popup, side panel, new tab, and options page, right in the browser as it generates, with the chrome APIs mocked so things like opening the options page actually behave. So while you iterate you're clicking a real rendering of the interface, not reading code and picturing it. For the parts a preview genuinely can't reproduce, content scripts firing on real third-party pages and the service worker's live behavior, we make the last mile trivial instead: you get a ready-to-load unpacked build, so "load unpacked and click through real pages" is one drop into chrome://extensions rather than a setup chore. I would rather be upfront that the true runtime still runs in Chrome than pretend a sandbox reproduces service-worker behavior it doesn't.
On least-privilege: scoping happens at generation, so the generator only pulls in host and API permissions when the feature actually needs them, rather than the usual "ask for everything to be safe" manifest. On top of that, PlugThis scans the actual code and detects permissions the manifest declares but nothing ever calls. Instead of writing a justification for a dead permission, which is exactly what gets extensions rejected, it flags it as "no code usage found, consider removing." It's deliberately conservative, so anything it can't attribute with confidence it leaves alone rather than risk telling you to drop something you need. Add the pre-flight checklist and privacy analyzer on top, and the manifest that reaches submission is scoped to what the feature actually uses.
@saurabh_dey1 love that you're upfront the real runtime stays in Chrome instead of faking service-worker behavior — that's the honest version I was hoping for. One edge on the dead-permission scan: does it reason about permissions requested dynamically — chrome.permissions.request() for optional perms, or an API reached via a computed path — or would those trip a false "no code usage found, remove"? Feels like the exact case for your "can't attribute → leave alone" rule.
PlugThis
@akbar_b You put your finger on exactly the right edge, so let me take the two cases separately.
Optional perms via chrome.permissions.request: handled two ways. optional_permissions aren't evaluated for removal at all, since they're requested on demand and won't show in a static call graph, and if a required permission is acquired through chrome.permissions.request, anything named inside that call is treated as live even without a direct chrome.api reference.
The computed path is the sharper one, and it splits in two. chrome['cookies'].getAll(...) with a bracket string is now detected as usage directly, the name is matched, not just the dot form. But chrome[api] where api is a variable is genuinely undecidable statically, so that's exactly where the "can't attribute, leave alone" rule fires: the moment there's a dynamic chrome[...] it can't resolve, it stops recommending removal for anything uncertain and drops it into leave-alone rather than remove. A false "keep" is harmless, a false "remove" that breaks a working extension is not, so it errs hard that way.
Net: bracket literals resolve to used, dynamic access disables the suggestion instead of guessing, and a genuinely dead permission with no dynamic access still gets flagged. You called the exact case the rule exists for. Good eye
@saurabh_dey1 genuinely one of the most thorough answers I've gotten on here — you split it three ways instead of hand-waving, and keeping a truly-dead perm flagged while a dynamic access disables the suggestion is exactly the right design. The "false keep is harmless, false remove breaks a working extension" asymmetry is the correct bias.
The one thing I'd watch: since a genuinely-dead permission hidden behind a dynamic chrome[var] now lands in leave-alone permanently, does that bucket surface to the user as "couldn't attribute — review manually"? Otherwise the safe default quietly becomes the thing that lets real dead perms survive the exact review it's meant to catch.
always wanted to experiement with Chorme extension but the setup process kept pushing me toward others projects. this makes the whole process feel much more approcahable.
PlugThis
@anthonywrinqsb That setup wall is exactly the thing that killed the idea for so many people. Manifests, service workers, build config, store rules, all before you write a single fun line of your actual idea. We wanted the barrier to be "what do you want it to do," not "spend a weekend configuring tooling first."
You should finally build that extension you kept putting off. If you do, tell me what it is, I'd genuinely love to see the first thing you ship with it.
What happens when Chrome changes a manifest requirement?
PlugThis
@levi_mitchell1
@levi_mitchell1 The manifest isn't hardcoded into some template you download and own forever. Generation, validation, and sanitizing all happen on our side against the current Chrome rules. So when Google changes a manifest requirement, we update that logic in one place and every new extension people generate follows the new rule immediately.
You don't have to track the spec, learn what changed, or patch boilerplate yourself.
Being honest about the edge: an extension you already published stays as it was shipped, so if a change affects it, you would regenerate and re-publish.
But the "keep up with Chrome's moving target" burden sits with us, not you, which is exactly the part that usually makes people abandon extensions.
What made you ask? Have you been bitten by a manifest change breaking something before?
Good idea. It would be even better if your service somehow helped with the promotion and marketing of extensions, because this is much more difficult than development, especially in our time
PlugThis
@maxim100000 You bring up a really good point, our current focus is building the best chrome extension builder in the world. Helping our users move from idea to working extension, as soon as possible.
On the marketing front, we do assist with asset creation and deployment of updates to the chrome store.
We also help getting the extension ready for a chrome store listing.
On the distribution front, we havent made any plans yet, if you have any ideas please share.
Congrats on the great launch! QQ - what about permissions requested at runtime through chrome.permissions.request or optional_permissions? Those probably almost never show up in a static call graph, so does the analyser read them as dead and nudge you to drop something you only ask for on demand?
PlugThis
@artstavenka1 Great question, and it's exactly the trap a naive static pass falls into, so we handle it two ways.
First, scope: only the required permissions array is ever evaluated for removal. optional_permissions are out of scope by design, precisely because they're requested on demand and would never show up in a static call graph. So nothing you ask for on demand can be read as dead or nudged for removal.
Second, runtime acquisition: if the code actually manages permissions at runtime, chrome.permissions.request, contains, add, or remove, the analyzer picks that up and treats any permission named inside those calls as live, even if there's no direct chrome. call for it. So a permission you declare as required but only activate through chrome.permissions.request won't be flagged either.
And the whole thing is deliberately biased toward silence. A false "this is used" is harmless, a false "drop this" could break your extension, so anything it can't attribute with confidence it leaves alone rather than nudge you. The nudge only fires when a permission has no static usage and no runtime request naming it.
So the short answer: no, it won't tell you to drop something you only ask for on demand. That's the exact case it's built to not get wrong. Really good catch to probe it though.
This is a great idea. Does the app publish to chrome store directly post building ?
PlugThis
@neosrix Thanks Srix. Yes, it does.
Once your extension is built, you connect your Chrome Web Store account once, and PlugThis uploads and publishes directly from inside the app. It also generates the listing description, permission justifications, and privacy disclosures the store asks for, so you are not filling that out by hand. After the first publish it remembers your Store item ID, so pushing an update later is basically one click.
The only parts that stay on Google's side are the one-time developer account registration and the review itself, since approval is always their call. Everything up to hitting submit, we handle for you.
PlugThis
@tan_z_tan
Love that you asked it that directly, so here's the honest version.
For focused, well-scoped extensions, the kind that do one job well, it's genuinely ship-ready. It generates real Manifest V3 with TypeScript and React, actually compiles and bundles, passes a structural validation and lint pass, and goes through a Chrome Web Store pre-flight before you publish. So it's not throwaway scaffolding you have to rewrite. It builds, it runs, and you can push it to the store from inside the tool.
For bigger or more ambitious ideas, it's better thought of as a strong first draft that gets you 80 to 90 percent there fast, then you refine the last bit either by chatting with it or hand-editing the code directly, and both stay in sync. The value is that you skip the part everyone hates, the manifest, service worker, build config, permissions, and store setup, and land straight on "now I'm tuning behavior" instead of "now I'm configuring tooling."
So: ship-ready for the simple stuff, a serious head start for the complex stuff, and never a blank page. Would genuinely love for you to try it and tell me where the output holds up and where it doesn't. That feedback is exactly what sharpens it.
@nefer_ai Tested it today and it's genuinely fun to use. I expected to spend time fixing boilerplate, but it got me to a usable extension much faster than I thought. If you keep improving the generation quality, this could become a go-to tool for anyone building Chrome extensions. Congrats! 👏
PlugThis
@neerajkanoi Thank you, glad you found it to be useful. If there is any feature you wan to see in the app, please let us know.