We did everything they allowed us to.
Browser extension that removes AI features, sponsored content, shopping tools, telemetry, and annoyances from Chrome, Edge, and Firefox. One click, no admin rights.
| Category | Examples |
|---|---|
| AI Features | Google AI Overview, Gemini suggestions, Copilot sidebar, Help Me Write, Visual Search, AI History, window.ai |
| Sponsored Content | MSN/News feed on NTP, sponsored tiles, Discover cards, recommended stories |
| Shopping | Shopping Assistant, price comparison popups, coupons, express checkout |
| Telemetry | Google/Microsoft/Mozilla diagnostic endpoints, crash reporting, Firefox Studies |
| Annoyances | Rewards prompts, feature banners, "Set as default" nags, DALL-E themes, Bing redirect |
Three-layer blocking, all within the extension API sandbox:
- declarativeNetRequest — blocks HTTP requests at the network level (telemetry endpoints, shopping APIs, sponsored feeds)
- CSS injection — hides UI elements at
document_startbefore they render - DOM mutation observer — catches dynamically injected elements that CSS can't target
No admin rights. No system modifications. No enterprise policies. Just a browser extension.
| Browser | Store |
|---|---|
| Chrome | Chrome Web Store |
| Edge | Edge Add-ons |
| Firefox | Firefox Add-ons |
- Download the zip for your browser from Releases
- Unzip to a folder
- Chrome/Edge: go to
chrome://extensions, enable Developer mode, click "Load unpacked", select the folder - Firefox: go to
about:debugging#/runtime/this-firefox, click "Load Temporary Add-on", selectmanifest.json
git clone https://github.com/investblog/debloat.git
cd debloat
npm install
npm run build # Chrome
npm run build:firefox # Firefox
npm run build:edge # Edge
npm run build:all # All three
npm run check # Typecheck + lint + tests- WXT — next-gen web extension framework
- TypeScript 5.7+ (strict, no
any) - Vanilla DOM — no React/Vue/Svelte
- Biome — linter & formatter
- Vitest — unit tests with happy-dom
Search engines and browsers constantly ship new AI interface elements. Debloat includes an opt-in detection system called AI Scout that helps keep selectors up to date:
- The extension collects metadata about hidden elements (opt-in, anonymous)
- Reports are sent to a Cloudflare Worker that scores and deduplicates findings
- Novel detections become GitHub Issues for review
- Confirmed selectors get added to the next release
This creates a feedback loop: users help discover new AI clutter, maintainers ship fixes faster.
- Debloat AI Scout — detection pipeline backend. Heuristic scoring, baseline diffing, deduplication, GitHub Issue creation. Powered by Cloudflare Workers + KV + R2.
This extension stands on the shoulders of the browser debloating community:
- Just the Browser — script that strips AI/telemetry from Chrome, Edge, Firefox via enterprise policies
- MSEdgeRedirect — redirects Windows Edge-forced links to your default browser
- Arkenfox user.js — the gold standard for Firefox hardening and telemetry removal
- Bye Bye, Google AI — hides AI Overviews from Google Search
- uBlock Origin — the content filtering king, supports custom AI blocklists
- uBlacklist — blocks sites from search results, community AI content lists
- Consent-O-Matic — auto-rejects cookie consent popups
- Brave-Debloater — strips AI, Rewards, Wallet from Brave
- RemoveWindowsAI — removes Copilot and Recall from Windows 11
Debloat takes a different approach: instead of system scripts or enterprise policies, it works entirely as a browser extension — installable by anyone, no elevated permissions required.
MIT
Version lives only in wxt.config.ts (manifest.version); package.json is not
used by the build. To release: bump it, then git tag vX.Y.Z && git push origin vX.Y.Z.
A v* tag drives two workflows:
release.yml— typecheck/lint/test + a GitHub release with the built ZIPs.submit.yml— a thin caller of the shared reusable workflowinvestblog/geo-tier-builder/.github/workflows/store-submit.yml@main.
Chrome + Edge auto-submit on the tag; Firefox is manual (Actions → Submit to
stores → stores=firefox; AMO burns version numbers forever, so it never
auto-runs). The manual dispatch has a dry_run toggle that validates
credentials without publishing.
Store credentials are this repo's GitHub Actions secrets (CHROME_*,
FIREFOX_*, EDGE_*). API creds are account-level and shared across all
investblog extensions; only the per-extension IDs (CHROME_EXTENSION_ID,
FIREFOX_EXTENSION_ID, EDGE_PRODUCT_ID) differ.
Before changing the release/CI flow: confirm the reusable-workflow ref still
resolves and the secrets exist (gh secret list). Store publishing here depends
on the external investblog/geo-tier-builder workflow — it is a cross-repo
contract, not visible from this repo's code alone.