WebScrubby is a Manifest V3 Chrome extension that removes common tracking query parameters from navigated links and adds a right-click menu item for copying a scrubbed version of any link.
The project website is served from site/ at https://webscrubby.com/.
Rules live in rules/query-params.json. Each rule can match an exact parameter,
prefix, suffix, or regular expression. Most rules are unconditional, while a rule
can also define removeWhen.referrerHostnames and removeWhen.noReferrer.
For example, ref is removed when the referrer hostname is producthunt.com or
when the navigation has no referrer, such as a pasted URL or a URL opened from
another app.
The same rules file can also define redirect wrappers. For example,
https://l.facebook.com/l.php?u=<encoded target> is unwrapped by reading the
u parameter as its own URL, then scrubbing that decoded target URL.
src/scrubber.jsis the shared URL scrubbing engine.content.jsscrubs links before click, middle-click, or context-menu actions.background.jsinstalls a dynamic Declarative Net Request rule for unrestricted exact-match parameters, handles direct/no-referrer navigations, observes main-frame requests withoutRefererheaders, and owns theCopy scrubbed linkcontext menu.offscreen.htmlandoffscreen.jsprovide the clipboard helper needed by the Manifest V3 background service worker.
- Open
chrome://extensions. - Enable Developer Mode.
- Choose
Load unpacked. - Select this directory.
npm testCreate the Chrome extension upload ZIP with:
bash scripts/package-extension.shThe ZIP contains only the extension files needed by Chrome.
The static GitHub Pages site is in site/ with:
site/index.htmlsite/privacy.htmlsite/terms.htmlsite/styles.csssite/CNAME(webscrubby.com)
GitHub Pages is deployed by .github/workflows/pages.yml.
Tag Extension Release creates an annotated tag named extension-v<manifest version>.
That tag triggers:
Release Extension Package, which validates the extension, builds a ZIP, and attaches it to a GitHub release.Publish Chrome Web Store, which uploads and submits the package after the first Chrome Web Store item exists and the required repository secrets are set.
Required Chrome Web Store repository secrets:
CWS_EXTENSION_IDCWS_PUBLISHER_IDCWS_SERVICE_ACCOUNT_JSONCWS_CRX_PRIVATE_KEYonly if Verified CRX uploads are enabled
The first Chrome Web Store item still needs to be created manually in the
Developer Dashboard. Use store-assets/listing.md and
store-assets/submission-checklist.md for that first submission.