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
+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.
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.
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.
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.
akta.pro
@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.
Been sitting on a Chrome extension idea for probably a year now and never touched it because I don't really code. The Twitter ICP scoring one you mentioned is basically the exact vibe of the thing I've wanted to build. Gonna actually try this today instead of letting it rot in my notes app lol.
PlugThis
@mshen316 This is the exact person we built it for, Michael 😄 A year in the notes app is long enough, today's the day.
And good news, the Twitter ICP scoring idea is right in the sweet spot: read the profile or timeline, score it against your criteria, show the result inline. You describe it in plain English and it figures out the structure, the permissions, and the scaffolding for you, so not really coding is not the blocker it used to be. You can refine it just by telling it what you want changed.
One tip: start with the simplest version of the idea, get that working and seeing it live, then add the fancy scoring logic. Momentum is everything, and this time you won't lose it to setup.
Go build it, and please come back and tell me how it went. Genuinely rooting for you on this one.
I like the focused approach but how do you handle Chrome permission requests Maybe adding permission explanations could improve user trust.
PlugThis
@jason_scott8 Appreciate that, Jason
Permissions are kept minimal by default. PlugThis only requests what the described feature actually needs, so nothing broad gets pulled in silently.
And you're spot on about explanations building trust. That's already baked in: before submission, it auto-drafts a plain-language justification for each permission (why it's needed, what it touches) for the Chrome Web Store form, plus flags when a privacy policy is required. So the reasoning is spelled out instead of users just seeing a scary permission prompt with no context.
Would love to hear if you'd want those explanations surfaced to end users too, not just the store form. That's a really interesting direction.