First public-release hardening pass.
assets.<same-site>)
counts as first-party; and the reputable-site list is now matched on the
registrable domain, which both adds the sites people actually use and stops a
lookalike like google.com.<attacker>.cfd being trusted for containing a
brand name.live.Optional deep cryptominer detection, off by default, for the case blocking
cannot see: a miner a site hosts on its own origin. It reads the source of the
workers a page starts and stops the ones running mining routines, including the
replacements a miner spawns when its workers are killed. Only the matching
worker is stopped, so a site that also runs a legitimate worker keeps it, and a
miner that overwrites terminate() cannot save itself. It is only registered
while switched on, so leaving it off costs nothing.
Nothing is stopped until the extension has told the page whether the site is allowlisted. A worker’s source resolves from memory faster than that answer arrives, so acting on arrival would have killed workers on allowlisted sites. On an allowlisted site the miner is reported and left running.
It deliberately does not judge by CPU load. Measured against a spinning worker on every core of a 12-core machine, a main-thread benchmark moved 1.03-1.21x, a probe worker 1.63x but only against a baseline taken before the miner starts, and a baseline-free worker-versus-main ratio 1.21x. Every variant either could not fire or fired on anything busy, and none could tell mining apart from a video export. So heavy CPU use is not reported as mining.
Optional SafeSearch enforcement, off by default. Locks Google, Bing, DuckDuckGo, Brave Search and Yahoo into SafeSearch and YouTube into Restricted Mode. The adult-site gate only fires on arrival at a site, so explicit images and video inside a results page were never something it could catch – you never leave the search engine. Off by default because it changes what search shows you.
Optional search-junk marker, off by default. Dims and labels results from sites that rank by republishing other people’s answers – Stack Exchange and GitHub scrapers – on the Google, Bing, DuckDuckGo, Brave Search and Yahoo results pages.
It marks and never removes, and that is the whole design. Ad blocking fails visibly: block a real image and you see a gap. Search filtering fails invisibly: hide the one result that answered the question and the user never learns it existed, they just think the web got worse. So every match keeps a one-click “Show anyway”, and an allowlisted search engine is skipped entirely.
It anchors on result links rather than result-block class names, because Google randomises those and reshuffles its DOM constantly; a link has to carry its destination host or the result would not work. Where the walk up to a result block fails, the result is left alone. A bundled seed works offline and on day one, and the existing daily list refresh extends it from quenhus’s uBlock-Origin-dev-filter, under the same caps and drift protection as the other supplemental lists. That project’s bare-domains output is used rather than its uBlock-syntax one, whose cosmetic half encodes Google’s DOM.
Optional “plain web results only” for Google, off by default. Switches Google into its own Web mode (udm=14) – ten blue links, no AI overview, no enriched panels. Removing the clutter at the source beats hiding it after paint: nothing can flash in first, and there is no selector to go stale when Google reshuffles its markup.
Google’s Images, Videos and News tabs are udm values too, so the parameter is only ever added when the URL has none, never replaced – otherwise clicking Images would bounce you straight back to Web and you could never leave. A DNR condition cannot express “this parameter is absent”, so that is handled with rule priority: when SafeSearch is also on, a higher-priority rule claims every URL that already carries a udm and adds only the SafeSearch parameter, leaving the lower rule to see nothing but URLs without one.