Skip to content

Repository files navigation

DeSlop

A small Chrome extension that gets AI Overview and AI Mode out of Google search.

Manifest License Status

DeSlop is a Manifest V3 browser extension (Chrome + Firefox) that removes Google's AI surfaces — the AI Overview block on the results page, the AI Mode tab in the SERP nav, the AI Mode pill on the homepage search bar, and (opt-in) every other piece of non-link cruft via the udm=14 Web filter. Four independent toggles, no telemetry, no network requests, no remote config.


What it does

The AI Overview block at the top of Google search results is gone. It's caught by a CSS rule the moment Google streams it in, and a localized DOM scanner walks up to the result-block boundary so the entire module disappears cleanly — without ever touching adjacent organic results.

Before After
SERP with AI Overview block at top SERP with AI Overview removed

The AI Mode pill in the homepage search bar is gone too. Google puts a small AI-mód / AI Mode button right inside the search input. It's caught by Google's current jsname and a localized text-match fallback for when that rotates.

Before After
Google homepage with AI-mód pill in the search bar Google homepage with the AI-mód pill removed

The popup

DeSlop popup with four toggles

Four independent toggles. Each one does exactly one thing.

Toggle Default What it does
Hide AI Overview on Removes the AI summary block from the SERP. CSS + MutationObserver, catches the block as Google streams it in.
Hide AI Mode buttons on Removes the AI Mode tab from the SERP nav AND the AI Mode pill from the homepage search bar. Both surfaces become literally unclickable.
Skip AI Mode pages on If a URL has ?…&udm=50 (AI Mode), strip the param so you land on the regular All tab. Belt-and-braces with the previous toggle — covers cases where you're routed to AI Mode from outside Google.
Just the links off Adds ?…&udm=14 to every Google search, switching Google to its hidden Web filter view. No AI, no ads, no shopping, no knowledge panels. Opt-in.

Why four switches and not one

Hide AI Overview and Hide AI Mode buttons target different surfaces. AI Overview is the summary paragraph inside normal search results — you can scroll past it. AI Mode is a separate page where the entire UI becomes an AI chat. Some people are fine with one and want the other gone.

Hide AI Mode buttons and Skip AI Mode pages also do different things. The first hides the entry points (the SERP tab and the homepage pill) so you can't click into AI Mode. The second strips udm=50 from URLs so you don't land on AI Mode even if you arrive there from a direct link or from Google routing you there programmatically. Both default on is the safe combination.

Just the links is opt-in because Google's Web filter strips ads as a side effect. If you'd rather support sites with ad revenue, leave it off.


Install

Chrome Web Store

Listing pending review.

Firefox Add-ons (AMO)

Listing pending review.

Load unpacked (Chrome / Chromium / Edge / Brave)

  1. Download or clone this repo.
  2. Open chrome://extensions.
  3. Toggle Developer mode at the top-right.
  4. Click Load unpacked and pick the deslop/ folder.
  5. Pin the deslop icon from the toolbar puzzle-piece menu.

After any code change, hit the reload icon on the extension's card in chrome://extensions — Chrome doesn't auto-reload unpacked extensions on file change.

Load temporary (Firefox)

Firefox loads unpacked extensions slightly differently. They live until you restart the browser:

  1. Download or clone this repo.
  2. Run python scripts/build.py to produce deslop-firefox-v<version>.zip at the repo root.
  3. Open about:debugging#/runtime/this-firefox.
  4. Click Load Temporary Add-on… and pick the Firefox zip (or pick manifest.firefox.json directly).
  5. For a persistent install, you need an AMO-signed build — submit the same zip at https://addons.mozilla.org/developers/.

Building the release zips

python scripts/build.py

Produces both deslop-chrome-v<version>.zip (uses manifest.json, service_worker background) and deslop-firefox-v<version>.zip (uses manifest.firefox.json, scripts background, browser_specific_settings.gecko.id).


What gets touched

URL or element Default settings Just the links on
AI Overview block on regular SERP hidden (CSS + DOM scanner) gone (Google's Web filter excludes it)
AI Mode tab in SERP nav hidden (CSS) hidden (CSS) — and the URL would redirect anyway
AI Mode pill in homepage search bar hidden (CSS + text-match scanner) hidden (CSS + text-match scanner)
AI Mode URL (udm=50) stripped → All tab stripped → All tab → then rewritten to udm=14
Ads untouched gone
Shopping / knowledge panels untouched gone
Image / video / news grids untouched gone
udm=14 / udm=2 / tbm=isch (an explicit tab) untouched untouched
Google homepage search bar AI Mode pill hidden search bar AI Mode pill hidden
Google Images / Maps / News at their own URLs untouched untouched
Non-Google search engines untouched untouched

How it works

Three independent layers, each with strict guards against false positives.

1. URL redirection (declarativeNetRequest). Two rulesets are registered. ai_redirect_ruleset strips udm=50 from Google search URLs (escapes AI Mode). power_redirect_ruleset adds udm=14 to plain queries (forces the Web filter). The background service worker toggles each ruleset on or off based on the popup settings — the rules themselves are declarative, evaluated by Chrome's network stack, and never see the URL contents.

2. CSS hides (content.js). A <style> tag is injected at document_start. For AI Overview, the rule is #m-x-content, div[data-hveid]:has(#m-x-content) — Google's current ID plus the :has() parent-selector to nuke the result-block cleanly. For AI Mode entry points, the rule combines a[href*="udm=50"] (the SERP tab) with button[jsname="B6rgad"] (the homepage pill).

3. DOM scanner fallback (content.js). A MutationObserver watches for new nodes. For AI Overview, it scans for headings whose text matches localized "AI Overview" patterns across 11 locales (English, Hungarian, German, French, Spanish, Italian, Dutch, Polish, Japanese, plus regional variants), then walks up the DOM passing through 0-height pass-through wrappers until it hits either an explicit data-attrid marker, a data-hveid result-block boundary, or a hard guard like id="search" / role="main" / a height ceiling of max(1500px, viewport * 0.65). For AI Mode buttons, it scans for buttons whose full text matches localized "AI Mode" labels, gated by a 250×60 pixel size cap so it can never accidentally hit organic content.

Every guard is set up to err on the side of leaving an AI surface visible rather than ever blanking out the user's results region. The walker stops at the first hard guard. The scanner skips anything bigger than a button. The CSS uses exact attribute matches, not substring matches, on result-block attributes.


Supported domains

google.com, google.hu, google.de, google.co.uk, google.fr, google.es, google.it, google.nl, google.pl, google.com.au, google.ca, google.co.jp.

Localized AI Overview heading patterns ship for English, Hungarian, German, French (incl. Canada variant), Spanish (and Latin American alt), Italian, Dutch, Polish, and Japanese. Localized AI Mode button labels ship for the same set.


Files

deslop/
├── manifest.json           # Chrome MV3 manifest (service_worker background)
├── manifest.firefox.json   # Firefox MV3 manifest (scripts background, gecko id)
├── background.js           # Background — toggles each ruleset by storage key
├── content.js              # CSS + MutationObserver for AI hiding
├── rules-ai.json           # Strips udm=50 (Skip AI Mode ruleset)
├── rules.json              # Adds udm=14 (Just-the-links ruleset, opt-in)
├── popup.html/.css/.js     # Four-toggle popup
├── welcome.html/.css       # Shown once after install
├── icons/                  # 16/32/48/128 px trash-can icons
├── scripts/build.py        # Produces deslop-chrome-v*.zip + deslop-firefox-v*.zip
├── scripts/make_icons.py   # Regenerate icons (Python + Pillow)
├── docs/screenshots/       # 1280×900 README captures
└── docs/cws/               # 1280×800 Chrome Web Store assets + promo tiles

Storage keys

Key Type Default Read by
hideOverview bool true content.js
hideAIModeTab bool true content.js (covers both the SERP tab and the homepage pill)
skipAIMode bool true background.js — toggles ai_redirect_ruleset
powerMode bool false background.js — toggles power_redirect_ruleset

Synced across Chrome profiles via chrome.storage.sync.


Known limitations

Google rotates the DOM and URL conventions of AI Overview and AI Mode frequently. The current implementation uses three defensive strategies (attribute matchers, :has() containers, and a text-content MutationObserver) for AI Overview hiding, so it should survive most attribute changes. If Google ever decides that the bare URL ?q=foo returns AI Mode by default instead of returning the All tab, the Skip AI Mode pages toggle stops being useful — there's no udm=50 to strip when the URL has no udm at all. The fallback is Just the links (which forces udm=14), or a future DOM-level detection that recognizes the AI Mode page and force-navigates away.


Privacy

No network requests. No analytics. No page-content reads (the MutationObserver only scans the local DOM for AI Overview / AI Mode signatures, never the content of organic results). The only persisted data is the four toggle states in chrome.storage.sync.


License

MIT — see LICENSE.

Support

Buy me a coffee · github.com/paulgegenyi/deslop

About

A small Chrome extension that hides AI Overview, the AI Mode tab, and the homepage AI Mode pill from Google search. Manifest V3, no telemetry, four toggles.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages