v0.0.168
Released Nov 5, 2026
Release Notes
Technology detection reads real loaders again where #1550 had hidden them: scripts held back by a delay or consent plugin (WP Rocket, Perfmatters, NitroPack, SiteGround, Rocket Loader and others), and a preconnect to a Supabase project origin.
Fixed
- Technology detection reads a loader a delay or consent plugin parks in a wrapper script type again (#1550). v0.0.165 treated every script type that is not JavaScript as data, so a Clarity, Tag Manager, Facebook Pixel or Google Analytics loader that WP Rocket (
rocketlazyloadscript), Perfmatters (pmdelayedscript), NitroPack (nitropack/inlinescript), SiteGround Optimizer (text/sg-delayed-inline), a cookie-consent blocker (javascript/blocked) or Cloudflare Rocket Loader (<hash>-module) swaps to JavaScript later was no longer detected (about 100 pairs on 76 of 37,248 corpus sites, Clarity the hardest hit).text/babelis read too, and a bundler's__bundler/ext_resourceslist is read like an import map: only theuriandurlfields of its entries count as script URLs (bounded like an import map), and every other text in the list, a description with a vendor URL for example, stays inert. The rule stays narrow and explicit: a type reads as code only when it is one of the known wrapper names, matched whole (23 exact names, WP Rocketrocketlazyloadscriptandtext/rocketlazyloadscript, Perfmatterspmdelayedscript, NitroPacknitropack/inlinescriptandnitropack/javascript, SiteGroundtext/sg-delayed-inline, LiteSpeedlitespeed/javascript,bv_inline_delayed_js,pslazyscript,airfleetlazyloadscript,lazyjs,text/prosyo-later,o/js-lzl, the consent blockers'javascript/blocked,text/javascript-blocked,text/javascript_blocked,application/ecmascript-blockedandtext/blocked,easyoptscript,application/x-imovisor-consent,text/plain,text/partytown,text/babel, and Rocket Loader's hex-hash<hash>-text/javascript,<hash>-application/javascriptand<hash>-module). No word in a type counts, so JSON, JSON-LD, import maps, templates, comments and every other type, a custom one that sayslazyorjavascriptincluded (text/x-lazy-cache,application/javascript-example), are still cut, as is one with a MIME parameter; an unknown wrapper type is cut until corpus evidence adds it. A script type of more than 2,048 spaces followed byapplication/jsonwas read as an empty (running) type: it is trimmed before it is bounded now. A framework'sscriptLoaderJSON that namesgtag/jsis still data. - Technology detection reads a Supabase project origin in a
preconnectordns-prefetchlink again (#1539). Counting only loading<link>rels stopped a<link rel="alternate">with a/functions/v1/path from detecting Supabase, but it also left a site whose only signal was<link rel="preconnect" href="https://<ref>.supabase.co/">and adns-prefetchto the same origin with no detection, because the detector asked for a/rest/v1-style path. A bare project origin (20 lowercase letters or digits, optional trailing slash, no path, not ayour...placeholder or one repeated character) that is the wholehrefof a link that loads or connects now detects it (a comma or space separated list that merely contains it does not); the same origin in analternateorcanonicallink, or in an<a href>, still does not.
Update to this version
squirrelscan will auto-update, or run this command to update now:
$