{
  "catalogue": "WHOLE ANTIDETECT CATALOG",
  "edition": 2,
  "edition_ordinal": "2ND ED.",
  "printing": 1,
  "printing_ordinal": "1ST PRINTING",
  "corrected_to": "2026-08-14",
  "field_check": "2026-08-14T09:12:00Z",
  "license": "CC0-1.0",
  "license_url": "https://creativecommons.org/publicdomain/zero/1.0/",
  "published_at": "https://awesomeantidetect.com/data/",
  "entry_count": 153,
  "section_count": 10,
  "rubric": "Second edition, in force since 2026-08-14",
  "rubric_url": "https://awesomeantidetect.com/method/",
  "states_are": "derived from the measured columns, never asserted and never supplied by a submitter",
  "no_score": "This file contains no score, no percentile, no rarity figure and no population comparison, because this register has measured no population of tools.",
  "schema": [
    {
      "field": "slug",
      "type": "string",
      "provenance": "editorial",
      "source": "Curator, signed",
      "carries_fetch_date": false,
      "note": "The key this entry is filed under. Stable across printings; a slug is never reused for a different project."
    },
    {
      "field": "name",
      "type": "string",
      "provenance": "transcribed",
      "source": "The project, at its own URL",
      "carries_fetch_date": false,
      "note": "Spelled as the project spells it, including capitalisation the register would otherwise normalise."
    },
    {
      "field": "url",
      "type": "string",
      "provenance": "transcribed",
      "source": "The project, at its own URL",
      "carries_fetch_date": false,
      "note": "The exact URL the link check was made against. Where a vendor host refuses automated clients, this is the docs host and the substitution is carried in flags."
    },
    {
      "field": "section",
      "type": "string (01–10)",
      "provenance": "editorial",
      "source": "Curator, signed",
      "carries_fetch_date": false,
      "note": "One of ten sections. An entry sits in exactly one; cross-topic entries are placed where a reader would look first, not where they fit best."
    },
    {
      "field": "section_slug",
      "type": "string",
      "provenance": "editorial",
      "source": "Curator, signed",
      "carries_fetch_date": false,
      "note": "The section's URL segment, so a row can be joined back to its printed section without a lookup table."
    },
    {
      "field": "kind",
      "type": "repo | page | docs | paper | dataset | community | product",
      "provenance": "editorial",
      "source": "Curator, signed",
      "carries_fetch_date": false,
      "note": "What sort of thing this is, which decides which fields can exist at all: only a repo carries pushed_at, only a non-repo is stated by the link check alone."
    },
    {
      "field": "description",
      "type": "string",
      "provenance": "transcribed",
      "source": "The project's README, docs or abstract",
      "carries_fetch_date": false,
      "note": "One sentence, condensed from what the source says about itself. It is never a finding, an endorsement or a test result."
    },
    {
      "field": "language",
      "type": "string | null",
      "provenance": "transcribed",
      "source": "The project, at its own URL",
      "carries_fetch_date": false,
      "note": "Implementation language as the project states it, not as GitHub's linguist guesses it."
    },
    {
      "field": "repo_path",
      "type": "string | null",
      "provenance": "measured",
      "source": "GET https://api.github.com/repos/{owner}/{repo}",
      "carries_fetch_date": false,
      "note": "owner/name as it appears in the API path. Null for every entry with no repository, which is what makes the rest of the repository columns null too."
    },
    {
      "field": "pushed_at",
      "type": "date | null",
      "provenance": "measured",
      "source": "GET https://api.github.com/repos/{owner}/{repo} → pushed_at",
      "carries_fetch_date": true,
      "note": "The liveness field. Null where the sweep did not capture it, in which case the rubric's fallback clause reads release_published_at instead and says so in derivation."
    },
    {
      "field": "created_at",
      "type": "date | null",
      "provenance": "measured",
      "source": "GET https://api.github.com/repos/{owner}/{repo} → created_at",
      "carries_fetch_date": true,
      "note": "Used only as the denominator of stars_per_day. It sets no state."
    },
    {
      "field": "stars",
      "type": "integer | null",
      "provenance": "measured",
      "source": "GET https://api.github.com/repos/{owner}/{repo} → stargazers_count",
      "carries_fetch_date": true,
      "note": "A reading taken at one instant, not a live figure, and it sets no state. It is the least important number in the row."
    },
    {
      "field": "forks",
      "type": "integer | null",
      "provenance": "measured",
      "source": "GET https://api.github.com/repos/{owner}/{repo} → forks_count",
      "carries_fetch_date": true,
      "note": "Captured where the sweep recorded it. Sets no state."
    },
    {
      "field": "archived",
      "type": "boolean | null",
      "provenance": "measured",
      "source": "GET https://api.github.com/repos/{owner}/{repo} → archived",
      "carries_fetch_date": true,
      "note": "A maintainer's own statement, and the one measured field that outranks every date rule."
    },
    {
      "field": "archived_at",
      "type": "date | null",
      "provenance": "measured",
      "source": "GET https://api.github.com/repos/{owner}/{repo} → archived_at",
      "carries_fetch_date": true,
      "note": "Captured where GitHub returned it. Its absence never implies the archive flag is false — read archived for that."
    },
    {
      "field": "release_tag",
      "type": "string | null",
      "provenance": "measured",
      "source": "GET https://api.github.com/repos/{owner}/{repo}/releases/latest → tag_name",
      "carries_fetch_date": true,
      "note": "The latest tagged release as the project tagged it. Null is ambiguous on its own, which is why no_releases exists."
    },
    {
      "field": "release_published_at",
      "type": "date | null",
      "provenance": "measured",
      "source": "GET https://api.github.com/repos/{owner}/{repo}/releases/latest → published_at",
      "carries_fetch_date": true,
      "note": "Stands in for pushed_at under the fallback clause. Where it does, derivation names the substitution."
    },
    {
      "field": "no_releases",
      "type": "boolean",
      "provenance": "measured",
      "source": "GET https://api.github.com/repos/{owner}/{repo}/releases/latest → 404",
      "carries_fetch_date": true,
      "note": "True means the repository has published no tagged release at all. False with a null release_tag means the sweep did not capture one — a different thing, kept a different field."
    },
    {
      "field": "http_status",
      "type": "integer | null",
      "provenance": "measured",
      "source": "HEAD, then GET on failure, against url — redirects not followed",
      "carries_fetch_date": true,
      "note": "0 means the request did not complete at all. Any status of 400 or worse is tested first and produces DEAD, because an unreachable URL cannot be rescued by another field."
    },
    {
      "field": "http_checked_at",
      "type": "timestamp | null",
      "provenance": "measured",
      "source": "HEAD, then GET on failure, against url — redirects not followed",
      "carries_fetch_date": true,
      "note": "The instant the link check was made. Equal to checked_at in this printing, and carried per row so a later partial re-sweep cannot lie about it."
    },
    {
      "field": "http_note",
      "type": "string | null",
      "provenance": "measured",
      "source": "HEAD, then GET on failure, against url — redirects not followed",
      "carries_fetch_date": true,
      "note": "What the non-200 was: the response, the redirect target, or the failure mode. Printed verbatim on the field log."
    },
    {
      "field": "http_redirect_to",
      "type": "string | null",
      "provenance": "measured",
      "source": "HEAD, then GET on failure, against url — redirects not followed → Location",
      "carries_fetch_date": true,
      "note": "Where a 301 pointed. This is the whole evidence for WITHDRAWN: the maintainer said where the work went, and the register did not infer it."
    },
    {
      "field": "license_spdx",
      "type": "string | null",
      "provenance": "measured",
      "source": "GET https://api.github.com/repos/{owner}/{repo} → license.spdx_id",
      "carries_fetch_date": true,
      "note": "Null means no licence is declared, which is a finding rather than a gap — see license_bucket. NOASSERTION means a licence file exists that SPDX could not identify."
    },
    {
      "field": "license_bucket",
      "type": "permissive | copyleft | custom | none | na",
      "provenance": "derived",
      "source": "licenseBucket(), from license_spdx",
      "carries_fetch_date": false,
      "note": "none is the one that matters: an entry you cannot legally reuse. na is for entries with no source to license, such as a test page."
    },
    {
      "field": "state",
      "type": "ACTIVE | SEMI | NRND | WITHDRAWN | ARCHIVED | DEAD",
      "provenance": "derived",
      "source": "Rubric, second edition, thresholds in force",
      "carries_fetch_date": false,
      "note": "Never stored, never asserted, never supplied by a submitter. Recompute it from the measured columns and this file must agree with the printed page."
    },
    {
      "field": "state_first_edition",
      "type": "string",
      "provenance": "derived",
      "source": "Rubric, first edition (superseded)",
      "carries_fetch_date": false,
      "note": "The same field data put through the superseded rules. Where it differs from state, the difference is a property of the rules and not of the world."
    },
    {
      "field": "state_moved",
      "type": "boolean",
      "provenance": "derived",
      "source": "state ≠ state_first_edition",
      "carries_fetch_date": false,
      "note": "True for every row printed on the errata leaf for this printing."
    },
    {
      "field": "derivation",
      "type": "string",
      "provenance": "derived",
      "source": "Rubric, second edition, the clause that fired",
      "carries_fetch_date": false,
      "note": "The rule that set the state, in the rubric's own words, with the values it read quoted inside it. This column is the audit trail."
    },
    {
      "field": "age_days",
      "type": "integer | null",
      "provenance": "derived",
      "source": "checked_at − the liveness field",
      "carries_fetch_date": false,
      "note": "Whole days between the liveness field and the field check. Measured against the printing's instant, never against the reader's clock, so a page reprints identically in a year."
    },
    {
      "field": "release_bucket",
      "type": "r30 | r180 | r365 | rold | rnone | runknown",
      "provenance": "derived",
      "source": "release_published_at, bucketed",
      "carries_fetch_date": false,
      "note": "The recency facet the filter rail counts against. runknown is not rnone: one means unread, the other means none exists."
    },
    {
      "field": "stars_per_day",
      "type": "number | null",
      "provenance": "derived",
      "source": "stars ÷ age of created_at",
      "carries_fetch_date": false,
      "note": "Two measured numbers divided. Not a rank, not a score, not a comparison against any population of tools — this register has measured none."
    },
    {
      "field": "verify_independently",
      "type": "boolean",
      "provenance": "derived",
      "source": "stars_per_day > 25",
      "carries_fetch_date": false,
      "note": "The unverified flag, and the only place this register raises an eyebrow in a column. It changes no state and accuses nothing; it says check the contributor graph yourself."
    },
    {
      "field": "flags",
      "type": "string[]",
      "provenance": "editorial",
      "source": "Curator, signed",
      "carries_fetch_date": false,
      "note": "Conditions the reader should know before trusting the row: young-repo, vendor-operated, freemium, historical, listed-elsewhere, docs-host-substituted, no-license."
    },
    {
      "field": "supersedes",
      "type": "string[] (slugs)",
      "provenance": "editorial",
      "source": "Curator, signed",
      "carries_fetch_date": false,
      "note": "Declared, not inferred. Both directions are stored once and reversed at build, so the graph cannot contradict itself."
    },
    {
      "field": "superseded_by",
      "type": "string[] (slugs)",
      "provenance": "editorial",
      "source": "Curator, signed",
      "carries_fetch_date": false,
      "note": "Feeds one rubric clause: a quiet entry whose declared successor reads ACTIVE is marked NRND rather than left looking healthy."
    },
    {
      "field": "alternative_to",
      "type": "string[] (slugs)",
      "provenance": "editorial",
      "source": "Curator, signed",
      "carries_fetch_date": false,
      "note": "Symmetric. Substitutes for the same job, with no claim that either is better."
    },
    {
      "field": "annotation",
      "type": "string | null",
      "provenance": "editorial",
      "source": "Curator, signed",
      "carries_fetch_date": false,
      "note": "The signed verdict, printed in italic typewriter face and kept separate from every other column precisely so it can be ignored."
    },
    {
      "field": "checked_at",
      "type": "timestamp",
      "provenance": "measured",
      "source": "The sweep's own clock",
      "carries_fetch_date": true,
      "note": "The instant every dated field in this row was read. It is the same value on every row of this printing, and it is the only claim this file makes about how current it is."
    }
  ],
  "sections": [
    {
      "id": "01",
      "slug": "open-source-browsers",
      "title": "Open-source anti-detect browsers & forks",
      "scope": "Browsers whose source you can read: anti-detect Firefox and Chromium forks, hardened builds, and the profile managers built on top of them.",
      "entries": 14
    },
    {
      "id": "02",
      "slug": "stealth-automation",
      "title": "Automation stealth plugins, patches & CDP-leak fixes",
      "scope": "Patches and plugins for Puppeteer, Playwright and Selenium, plus the proxies and cursor libraries that sit beside them.",
      "entries": 21
    },
    {
      "id": "03",
      "slug": "detection-test-pages",
      "title": "Detection test pages & fingerprint scanners",
      "scope": "Pages you point a browser at to see what it gives away. This section is where a link register earns its keep: test pages rot faster than repositories.",
      "entries": 24
    },
    {
      "id": "04",
      "slug": "anti-bot-vendors",
      "title": "Anti-bot vendors & public documentation",
      "scope": "The detection side, listed by its own public documentation. Where a vendor's marketing host refuses automated clients, the docs host is listed instead and the refusal is recorded.",
      "entries": 13
    },
    {
      "id": "05",
      "slug": "papers",
      "title": "Academic papers & technical writeups",
      "scope": "The peer-reviewed and specification-grade literature this field is built on, preferring open mirrors over publishers that block automated clients.",
      "entries": 22
    },
    {
      "id": "06",
      "slug": "fingerprinting-libraries",
      "title": "Fingerprinting libraries",
      "scope": "The collectors themselves — the code that reads a browser. Read these to know what is being asked of you.",
      "entries": 8
    },
    {
      "id": "07",
      "slug": "tls-network",
      "title": "Network, TLS & HTTP fingerprint tooling",
      "scope": "The layer below JavaScript: TLS ClientHello and HTTP/2 fingerprinting, impersonating clients, and the passive tooling that reads them.",
      "entries": 17
    },
    {
      "id": "08",
      "slug": "datasets",
      "title": "Datasets, leaderboards & public statistics",
      "scope": "Published distributions and population data. The only place in this catalogue where a percentage means anything, because someone else measured it and says how.",
      "entries": 8
    },
    {
      "id": "09",
      "slug": "commercial-browsers",
      "title": "Commercial anti-detect browsers",
      "scope": "Listed for completeness and for comparison. Closed source, so the only fields that can be checked are the ones a HTTP request returns.",
      "entries": 12
    },
    {
      "id": "10",
      "slug": "communities-and-lists",
      "title": "Communities & competing registries",
      "scope": "Where the work is discussed, and the other lists covering this ground — listed with their own liveness fields, on the same rule as everything else.",
      "entries": 14
    }
  ],
  "entries": [
    {
      "slug": "camoufox",
      "name": "Camoufox",
      "url": "https://github.com/daijro/camoufox",
      "section": "01",
      "section_slug": "open-source-browsers",
      "kind": "repo",
      "description": "Anti-detect Firefox fork that patches fingerprint surfaces at the C++ level rather than injecting JavaScript.",
      "language": "C++ / Python",
      "repo_path": "daijro/camoufox",
      "pushed_at": "2026-08-12",
      "created_at": null,
      "stars": 11100,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": "v152.0.4-beta.28",
      "release_published_at": "2026-07-19",
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MPL-2.0",
      "license_bucket": "copyleft",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-08-12 — 2 days, within the 90-day ACTIVE threshold.",
      "age_days": 2,
      "release_bucket": "r30",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "botbrowser",
        "dolphin-anty",
        "donut-browser",
        "gologin",
        "kameleo",
        "mullvad-browser",
        "multilogin",
        "undetectable-fingerprint-browser"
      ],
      "annotation": "Engine-level patching is the reason this one keeps working when JS-patch stacks stop. The beta tag has been the shipping tag for months; read that as a release policy, not as instability. — ED.",
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "botbrowser",
      "name": "BotBrowser",
      "url": "https://github.com/botswin/BotBrowser",
      "section": "01",
      "section_slug": "open-source-browsers",
      "kind": "repo",
      "description": "Chromium core with a unified fingerprint defence aimed at Cloudflare, Akamai, Kasada, DataDome and PerimeterX.",
      "language": "C++",
      "repo_path": "botswin/BotBrowser",
      "pushed_at": "2026-08-08",
      "created_at": null,
      "stars": 2600,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": "151.0.7922.47",
      "release_published_at": "2026-08-06",
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MIT",
      "license_bucket": "permissive",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-08-08 — 6 days, within the 90-day ACTIVE threshold.",
      "age_days": 6,
      "release_bucket": "r30",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "adspower",
        "camoufox",
        "donut-browser",
        "multilogin",
        "undetectable-fingerprint-browser"
      ],
      "annotation": "The vendor list in its README is a claim about vendors, not a measurement of them. This catalogue records that the claim is made; it does not repeat it as a result. — ED.",
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "donut-browser",
      "name": "Donut Browser",
      "url": "https://github.com/zhom/donutbrowser",
      "section": "01",
      "section_slug": "open-source-browsers",
      "kind": "repo",
      "description": "Anti-detect browser and profile manager. Ships the Wayfern Chromium fork, which spoofs at the engine level over CDP rather than by patching JavaScript, plus a local REST API and MCP server on the user's own machine.",
      "language": "Rust / TypeScript",
      "repo_path": "zhom/donutbrowser",
      "pushed_at": "2026-08-12",
      "created_at": null,
      "stars": 3600,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": "v0.29.3",
      "release_published_at": "2026-08-12",
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "AGPL-3.0",
      "license_bucket": "copyleft",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-08-12 — 2 days, within the 90-day ACTIVE threshold.",
      "age_days": 2,
      "release_bucket": "r30",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "adspower",
        "botbrowser",
        "camoufox",
        "dolphin-anty",
        "gologin",
        "hidemyacc",
        "incogniton",
        "ixbrowser",
        "kameleo",
        "multilogin",
        "nstbrowser",
        "octo-browser",
        "undetectable-fingerprint-browser",
        "undetectable-io"
      ],
      "annotation": "Both halves are in the repo — the desktop app and the sync server — under AGPL-3.0, and a grep of src/, src-tauri/src and the manifests finds no analytics SDK. Twelve releases between 2026-03-24 and 2026-08-12. Its README's claim about not being detected by named vendors is unsupported by anything in that repo; ignore it and judge the fields. — ED.",
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "undetectable-fingerprint-browser",
      "name": "Undetectable Fingerprint Browser",
      "url": "https://github.com/itbrowser-net/undetectable-fingerprint-browser",
      "section": "01",
      "section_slug": "open-source-browsers",
      "kind": "repo",
      "description": "Chromium build spoofing Canvas, WebGL and user agent, published as a Multilogin alternative.",
      "language": "C++",
      "repo_path": "itbrowser-net/undetectable-fingerprint-browser",
      "pushed_at": "2025-04-25",
      "created_at": null,
      "stars": 850,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "none",
      "state": "NRND",
      "state_first_edition": "SEMI",
      "state_moved": true,
      "derivation": "pushed_at = 2025-04-25 — 476 days, inside the 365–1095 day NRND band.",
      "age_days": 476,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [
        "no-license"
      ],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "botbrowser",
        "camoufox",
        "donut-browser"
      ],
      "annotation": "No licence file means no grant of rights, whatever the README implies. Read the state mark and the licence field together before you build on it. — ED.",
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "ungoogled-chromium",
      "name": "ungoogled-chromium",
      "url": "https://github.com/ungoogled-software/ungoogled-chromium",
      "section": "01",
      "section_slug": "open-source-browsers",
      "kind": "repo",
      "description": "Chromium with Google integration and telemetry removed. Not an anti-detect build — a clean base to start from.",
      "language": "Python / C++",
      "repo_path": "ungoogled-software/ungoogled-chromium",
      "pushed_at": "2026-08-12",
      "created_at": null,
      "stars": 27400,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "BSD-3-Clause",
      "license_bucket": "permissive",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-08-12 — 2 days, within the 90-day ACTIVE threshold.",
      "age_days": 2,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "brave-browser",
      "name": "Brave Browser",
      "url": "https://github.com/brave/brave-browser",
      "section": "01",
      "section_slug": "open-source-browsers",
      "kind": "repo",
      "description": "Ships farbling: randomised per-session noise on canvas, audio and WebGL readouts, as a shipped consumer default.",
      "language": "C++ / TypeScript",
      "repo_path": "brave/brave-browser",
      "pushed_at": "2026-08-14",
      "created_at": null,
      "stars": 23300,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MPL-2.0",
      "license_bucket": "copyleft",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-08-14 — 0 days, within the 90-day ACTIVE threshold.",
      "age_days": 0,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "librewolf",
        "mullvad-browser"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "mullvad-browser",
      "name": "Mullvad Browser",
      "url": "https://github.com/mullvad/mullvad-browser",
      "section": "01",
      "section_slug": "open-source-browsers",
      "kind": "repo",
      "description": "Tor-Browser-derived hardened Firefox pursuing one fingerprint for all users rather than a unique one per user.",
      "language": "C++ / JavaScript",
      "repo_path": "mullvad/mullvad-browser",
      "pushed_at": "2026-07-23",
      "created_at": null,
      "stars": 2500,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "none",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-07-23 — 22 days, within the 90-day ACTIVE threshold.",
      "age_days": 22,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [
        "no-license"
      ],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "brave-browser",
        "camoufox",
        "librewolf",
        "tor-browser"
      ],
      "annotation": "No SPDX identifier is declared on the repository; the upstream it derives from is MPL. That is inference, not a field, so the licence column stays empty. — ED.",
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "tor-browser",
      "name": "Tor Browser",
      "url": "https://www.torproject.org/download/",
      "section": "01",
      "section_slug": "open-source-browsers",
      "kind": "product",
      "description": "The reference implementation of fingerprint uniformity: every user is meant to present the same values.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "FLOSS",
      "license_bucket": "custom",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "mullvad-browser"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "tor-fingerprinting-protections",
      "name": "Tor Browser fingerprinting protections",
      "url": "https://support.torproject.org/tor-browser/features/fingerprinting-protections/",
      "section": "01",
      "section_slug": "open-source-browsers",
      "kind": "docs",
      "description": "The canonical explainer for the uniform-fingerprint defence model, from the project that invented it.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "librewolf",
      "name": "LibreWolf",
      "url": "https://librewolf.net/",
      "section": "01",
      "section_slug": "open-source-browsers",
      "kind": "product",
      "description": "Firefox fork shipping resistFingerprinting on by default, with the build recipes on Codeberg.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MPL-2.0",
      "license_bucket": "copyleft",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "arkenfox-user-js",
        "brave-browser",
        "mullvad-browser"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "arkenfox-user-js",
      "name": "arkenfox/user.js",
      "url": "https://github.com/arkenfox/user.js",
      "section": "01",
      "section_slug": "open-source-browsers",
      "kind": "repo",
      "description": "The reference hardened Firefox user.js, and the most careful public writing on what resistFingerprinting actually does.",
      "language": "JavaScript",
      "repo_path": "arkenfox/user.js",
      "pushed_at": "2026-08-10",
      "created_at": null,
      "stars": 12800,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MIT",
      "license_bucket": "permissive",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-08-10 — 4 days, within the 90-day ACTIVE threshold.",
      "age_days": 4,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "librewolf"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "cloakbrowser",
      "name": "CloakBrowser",
      "url": "https://github.com/CloakHQ/CloakBrowser",
      "section": "01",
      "section_slug": "open-source-browsers",
      "kind": "repo",
      "description": "Chromium-based anti-detect browser with a free build and a licence-gated -pro build.",
      "language": "C++",
      "repo_path": "CloakHQ/CloakBrowser",
      "pushed_at": null,
      "created_at": "2026-02-22",
      "stars": 30000,
      "forks": 2500,
      "archived": false,
      "archived_at": null,
      "release_tag": "chromium-v150…-pro",
      "release_published_at": "2026-08-11",
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MIT",
      "license_bucket": "permissive",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "latest_release.published_at = 2026-08-11 (pushed_at not captured; release date stands in) — 3 days, within the 90-day ACTIVE threshold.",
      "age_days": 3,
      "release_bucket": "r30",
      "stars_per_day": 173.41,
      "verify_independently": true,
      "flags": [
        "young-repo",
        "vendor-operated",
        "freemium"
      ],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": "Thirty thousand stars on a repository created 2026-02-22 is 173 stars a day sustained across six months. The release history is genuine and the contributor count is real; the star curve is the part this catalogue will not vouch for. Verify independently before you build a pipeline on it. — ED.",
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "shardbrowser",
      "name": "ShardBrowser",
      "url": "https://github.com/ProxyShard/ShardBrowser",
      "section": "01",
      "section_slug": "open-source-browsers",
      "kind": "repo",
      "description": "Anti-detect browser published by the ProxyShard proxy vendor.",
      "language": null,
      "repo_path": "ProxyShard/ShardBrowser",
      "pushed_at": null,
      "created_at": "2026-05-30",
      "stars": 638,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": "v0.1.10",
      "release_published_at": "2026-06-21",
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MIT",
      "license_bucket": "permissive",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "latest_release.published_at = 2026-06-21 (pushed_at not captured; release date stands in) — 54 days, within the 90-day ACTIVE threshold.",
      "age_days": 54,
      "release_bucket": "r180",
      "stars_per_day": 8.39,
      "verify_independently": false,
      "flags": [
        "young-repo",
        "vendor-operated"
      ],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "clearcote-browser",
      "name": "clearcote-browser",
      "url": "https://github.com/clearcotelabs/clearcote-browser",
      "section": "01",
      "section_slug": "open-source-browsers",
      "kind": "repo",
      "description": "Young Chromium-based anti-detect build; commit history references licence-key gating.",
      "language": null,
      "repo_path": "clearcotelabs/clearcote-browser",
      "pushed_at": "2026-08-13",
      "created_at": "2026-06-15",
      "stars": 75,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "BSD-3-Clause",
      "license_bucket": "permissive",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-08-13 — 1 days, within the 90-day ACTIVE threshold.",
      "age_days": 1,
      "release_bucket": "runknown",
      "stars_per_day": 1.25,
      "verify_independently": false,
      "flags": [
        "young-repo",
        "vendor-operated",
        "freemium"
      ],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "puppeteer-extra",
      "name": "puppeteer-extra",
      "url": "https://github.com/berstend/puppeteer-extra",
      "section": "02",
      "section_slug": "stealth-automation",
      "kind": "repo",
      "description": "The classic plugin framework; puppeteer-extra-plugin-stealth lives in this monorepo and is what most tutorials still reach for.",
      "language": "TypeScript",
      "repo_path": "berstend/puppeteer-extra",
      "pushed_at": "2024-07-18",
      "created_at": null,
      "stars": 7400,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MIT",
      "license_bucket": "permissive",
      "state": "NRND",
      "state_first_edition": "SEMI",
      "state_moved": true,
      "derivation": "pushed_at = 2024-07-18 — 757 days, inside the 365–1095 day NRND band.",
      "age_days": 757,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "fingerprint-suite",
        "patchright"
      ],
      "annotation": "Still the most-copied answer on the internet and two years without a push. That gap is the single best argument for this catalogue existing. — ED.",
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "patchright",
      "name": "Patchright (Node)",
      "url": "https://github.com/Kaliiiiiiiiii-Vinyzu/patchright",
      "section": "02",
      "section_slug": "stealth-automation",
      "kind": "repo",
      "description": "Undetected Playwright: patches Runtime.enable and the other CDP leaks that give a driven browser away.",
      "language": "TypeScript",
      "repo_path": "Kaliiiiiiiiii-Vinyzu/patchright",
      "pushed_at": "2026-08-05",
      "created_at": null,
      "stars": 4100,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": "v1.61.1",
      "release_published_at": "2026-06-23",
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "Apache-2.0",
      "license_bucket": "permissive",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-08-05 — 9 days, within the 90-day ACTIVE threshold.",
      "age_days": 9,
      "release_bucket": "r180",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [
        "rebrowser-patches"
      ],
      "superseded_by": [],
      "alternative_to": [
        "patchright-python",
        "puppeteer-extra"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "patchright-python",
      "name": "Patchright (Python)",
      "url": "https://github.com/Kaliiiiiiiiii-Vinyzu/patchright-python",
      "section": "02",
      "section_slug": "stealth-automation",
      "kind": "repo",
      "description": "Python build of Patchright, tracking the Node package's patch set.",
      "language": "Python",
      "repo_path": "Kaliiiiiiiiii-Vinyzu/patchright-python",
      "pushed_at": "2026-08-09",
      "created_at": null,
      "stars": 1500,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "Apache-2.0",
      "license_bucket": "permissive",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-08-09 — 5 days, within the 90-day ACTIVE threshold.",
      "age_days": 5,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "nodriver",
        "patchright",
        "playwright-stealth"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "rebrowser-patches",
      "name": "rebrowser-patches",
      "url": "https://github.com/rebrowser/rebrowser-patches",
      "section": "02",
      "section_slug": "stealth-automation",
      "kind": "repo",
      "description": "Patches Puppeteer and Playwright for the Runtime.enable CDP leak; the writeup that came with it is still worth reading.",
      "language": "JavaScript",
      "repo_path": "rebrowser/rebrowser-patches",
      "pushed_at": "2025-05-09",
      "created_at": null,
      "stars": 1400,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "none",
      "state": "NRND",
      "state_first_edition": "SEMI",
      "state_moved": true,
      "derivation": "pushed_at = 2025-05-09 — 462 days, inside the 365–1095 day NRND band.",
      "age_days": 462,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [
        "no-license"
      ],
      "supersedes": [],
      "superseded_by": [
        "patchright"
      ],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "cdp-patches",
      "name": "CDP-Patches",
      "url": "https://github.com/Kaliiiiiiiiii-Vinyzu/CDP-Patches",
      "section": "02",
      "section_slug": "stealth-automation",
      "kind": "repo",
      "description": "OS-level input patching to defeat CDP-based automation detection: moves the mouse through the window system instead of the protocol.",
      "language": "Python",
      "repo_path": "Kaliiiiiiiiii-Vinyzu/CDP-Patches",
      "pushed_at": null,
      "created_at": null,
      "stars": 163,
      "forks": null,
      "archived": true,
      "archived_at": "2025-09-28",
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "none",
      "state": "ARCHIVED",
      "state_first_edition": "ARCHIVED",
      "state_moved": false,
      "derivation": "archived = true, set 2025-09-28. A maintainer's own statement outranks every date rule.",
      "age_days": 320,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [
        "no-license",
        "historical"
      ],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": "Archived by its own author, which is a maintainer's statement and outranks any inference from a push date. Listed as historical because the technique still explains what the protocol gives away. — ED.",
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "undetected-chromedriver",
      "name": "undetected-chromedriver",
      "url": "https://github.com/ultrafunkamsterdam/undetected-chromedriver",
      "section": "02",
      "section_slug": "stealth-automation",
      "kind": "repo",
      "description": "Patched Selenium ChromeDriver. Twelve thousand stars of momentum behind a project whose author has moved to a successor.",
      "language": "Python",
      "repo_path": "ultrafunkamsterdam/undetected-chromedriver",
      "pushed_at": "2025-07-05",
      "created_at": null,
      "stars": 12800,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "GPL-3.0",
      "license_bucket": "copyleft",
      "state": "NRND",
      "state_first_edition": "SEMI",
      "state_moved": true,
      "derivation": "pushed_at = 2025-07-05 — 405 days, inside the 365–1095 day NRND band.",
      "age_days": 405,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [
        "nodriver"
      ],
      "alternative_to": [
        "seleniumbase"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "nodriver",
      "name": "nodriver",
      "url": "https://github.com/ultrafunkamsterdam/nodriver",
      "section": "02",
      "section_slug": "stealth-automation",
      "kind": "repo",
      "description": "The same author's successor to undetected-chromedriver: no webdriver at all, direct CDP control.",
      "language": "Python",
      "repo_path": "ultrafunkamsterdam/nodriver",
      "pushed_at": "2026-05-13",
      "created_at": null,
      "stars": 4700,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": true,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "AGPL-3.0",
      "license_bucket": "copyleft",
      "state": "SEMI",
      "state_first_edition": "ACTIVE",
      "state_moved": true,
      "derivation": "pushed_at = 2026-05-13 — 93 days, inside the 90–365 day SEMI band.",
      "age_days": 93,
      "release_bucket": "rnone",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [
        "undetected-chromedriver"
      ],
      "superseded_by": [],
      "alternative_to": [
        "patchright-python",
        "selenium-driverless",
        "seleniumbase"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "seleniumbase",
      "name": "SeleniumBase (UC Mode)",
      "url": "https://github.com/seleniumbase/SeleniumBase",
      "section": "02",
      "section_slug": "stealth-automation",
      "kind": "repo",
      "description": "A test framework whose undetected mode is maintained on the same cadence as the rest of it — which is the unusual part.",
      "language": "Python",
      "repo_path": "seleniumbase/SeleniumBase",
      "pushed_at": "2026-08-14",
      "created_at": null,
      "stars": 12900,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": "v4.51.12",
      "release_published_at": "2026-08-10",
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MIT",
      "license_bucket": "permissive",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-08-14 — 0 days, within the 90-day ACTIVE threshold.",
      "age_days": 0,
      "release_bucket": "r30",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "nodriver",
        "undetected-chromedriver"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "playwright-stealth",
      "name": "playwright_stealth (maintained fork)",
      "url": "https://github.com/Mattwmaster58/playwright_stealth",
      "section": "02",
      "section_slug": "stealth-automation",
      "kind": "repo",
      "description": "The actively-updated 2.x Python playwright-stealth. The one pip installs is often not this one.",
      "language": "Python",
      "repo_path": "Mattwmaster58/playwright_stealth",
      "pushed_at": "2026-04-04",
      "created_at": null,
      "stars": 263,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MIT",
      "license_bucket": "permissive",
      "state": "SEMI",
      "state_first_edition": "ACTIVE",
      "state_moved": true,
      "derivation": "pushed_at = 2026-04-04 — 132 days, inside the 90–365 day SEMI band.",
      "age_days": 132,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [
        "playwright-stealth-original"
      ],
      "superseded_by": [],
      "alternative_to": [
        "patchright-python"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "playwright-stealth-original",
      "name": "playwright_stealth (original)",
      "url": "https://github.com/AtuboDad/playwright_stealth",
      "section": "02",
      "section_slug": "stealth-automation",
      "kind": "repo",
      "description": "The original Python port. Four times the stars of the maintained fork and two years without a push.",
      "language": "Python",
      "repo_path": "AtuboDad/playwright_stealth",
      "pushed_at": "2024-07-29",
      "created_at": null,
      "stars": 981,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MIT",
      "license_bucket": "permissive",
      "state": "NRND",
      "state_first_edition": "SEMI",
      "state_moved": true,
      "derivation": "pushed_at = 2024-07-29 — 746 days, inside the 365–1095 day NRND band.",
      "age_days": 746,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [
        "playwright-stealth"
      ],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "botright",
      "name": "Botright",
      "url": "https://github.com/Vinyzu/Botright",
      "section": "02",
      "section_slug": "stealth-automation",
      "kind": "repo",
      "description": "Playwright-based stealth framework bundling captcha solving.",
      "language": "Python",
      "repo_path": "Vinyzu/Botright",
      "pushed_at": "2026-07-15",
      "created_at": null,
      "stars": 1000,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "GPL-3.0",
      "license_bucket": "copyleft",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-07-15 — 30 days, within the 90-day ACTIVE threshold.",
      "age_days": 30,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "selenium-driverless",
      "name": "Selenium-Driverless",
      "url": "https://github.com/ttlns/Selenium-Driverless",
      "section": "02",
      "section_slug": "stealth-automation",
      "kind": "repo",
      "description": "Selenium-shaped automation without chromedriver, driving CDP directly.",
      "language": "Python",
      "repo_path": "ttlns/Selenium-Driverless",
      "pushed_at": "2025-04-25",
      "created_at": null,
      "stars": 861,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "NOASSERTION",
      "license_bucket": "custom",
      "state": "NRND",
      "state_first_edition": "SEMI",
      "state_moved": true,
      "derivation": "pushed_at = 2025-04-25 — 476 days, inside the 365–1095 day NRND band.",
      "age_days": 476,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "nodriver"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "drissionpage",
      "name": "DrissionPage",
      "url": "https://github.com/g1879/DrissionPage",
      "section": "02",
      "section_slug": "stealth-automation",
      "kind": "repo",
      "description": "Python automation that merges an HTTP client and CDP control behind one API.",
      "language": "Python",
      "repo_path": "g1879/DrissionPage",
      "pushed_at": "2026-07-22",
      "created_at": null,
      "stars": 12300,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "NOASSERTION",
      "license_bucket": "custom",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-07-22 — 23 days, within the 90-day ACTIVE threshold.",
      "age_days": 23,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "flaresolverr",
      "name": "FlareSolverr",
      "url": "https://github.com/FlareSolverr/FlareSolverr",
      "section": "02",
      "section_slug": "stealth-automation",
      "kind": "repo",
      "description": "Proxy server that solves Cloudflare's interstitial challenges and hands back the cookies.",
      "language": "Python",
      "repo_path": "FlareSolverr/FlareSolverr",
      "pushed_at": "2026-07-16",
      "created_at": null,
      "stars": 15200,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MIT",
      "license_bucket": "permissive",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-07-16 — 29 days, within the 90-day ACTIVE threshold.",
      "age_days": 29,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "cloudflarebypassforscraping"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "cloudflarebypassforscraping",
      "name": "CloudflareBypassForScraping",
      "url": "https://github.com/sarperavci/CloudflareBypassForScraping",
      "section": "02",
      "section_slug": "stealth-automation",
      "kind": "repo",
      "description": "DrissionPage-based Turnstile bypass, maintained against Cloudflare's changes rather than published once.",
      "language": "Python",
      "repo_path": "sarperavci/CloudflareBypassForScraping",
      "pushed_at": "2026-08-13",
      "created_at": null,
      "stars": 2500,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MIT",
      "license_bucket": "permissive",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-08-13 — 1 days, within the 90-day ACTIVE threshold.",
      "age_days": 1,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "flaresolverr"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "hazetunnel",
      "name": "hazetunnel",
      "url": "https://github.com/daijro/hazetunnel",
      "section": "02",
      "section_slug": "stealth-automation",
      "kind": "repo",
      "description": "MITM proxy that injects payloads into passing traffic to mask its non-organic origin.",
      "language": "Go",
      "repo_path": "daijro/hazetunnel",
      "pushed_at": "2024-07-15",
      "created_at": null,
      "stars": 92,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MIT",
      "license_bucket": "permissive",
      "state": "NRND",
      "state_first_edition": "SEMI",
      "state_moved": true,
      "derivation": "pushed_at = 2024-07-15 — 760 days, inside the 365–1095 day NRND band.",
      "age_days": 760,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "ghost-cursor",
      "name": "ghost-cursor",
      "url": "https://github.com/Xetera/ghost-cursor",
      "section": "02",
      "section_slug": "stealth-automation",
      "kind": "repo",
      "description": "Human-like Bézier mouse movement for Puppeteer, still maintained.",
      "language": "TypeScript",
      "repo_path": "Xetera/ghost-cursor",
      "pushed_at": "2026-08-11",
      "created_at": null,
      "stars": 1600,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MIT",
      "license_bucket": "permissive",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-08-11 — 3 days, within the 90-day ACTIVE threshold.",
      "age_days": 3,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "humancursor"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "humancursor",
      "name": "HumanCursor",
      "url": "https://github.com/riflosnake/HumanCursor",
      "section": "02",
      "section_slug": "stealth-automation",
      "kind": "repo",
      "description": "Human cursor simulation for Selenium and Playwright.",
      "language": "Python",
      "repo_path": "riflosnake/HumanCursor",
      "pushed_at": "2024-11-28",
      "created_at": null,
      "stars": 503,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MIT",
      "license_bucket": "permissive",
      "state": "NRND",
      "state_first_edition": "SEMI",
      "state_moved": true,
      "derivation": "pushed_at = 2024-11-28 — 624 days, inside the 365–1095 day NRND band.",
      "age_days": 624,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "ghost-cursor"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "browserforge",
      "name": "BrowserForge",
      "url": "https://github.com/daijro/browserforge",
      "section": "02",
      "section_slug": "stealth-automation",
      "kind": "repo",
      "description": "Header and fingerprint generator that produces internally consistent combinations rather than random ones.",
      "language": "Python",
      "repo_path": "daijro/browserforge",
      "pushed_at": "2026-02-26",
      "created_at": null,
      "stars": 1200,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "Apache-2.0",
      "license_bucket": "permissive",
      "state": "SEMI",
      "state_first_edition": "ACTIVE",
      "state_moved": true,
      "derivation": "pushed_at = 2026-02-26 — 169 days, inside the 90–365 day SEMI band.",
      "age_days": 169,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "fingerprint-suite"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "fingerprint-suite",
      "name": "fingerprint-suite (Apify)",
      "url": "https://github.com/apify/fingerprint-suite",
      "section": "02",
      "section_slug": "stealth-automation",
      "kind": "repo",
      "description": "Fingerprint generator plus injector, maintained by a scraping platform that has to keep it working.",
      "language": "TypeScript",
      "repo_path": "apify/fingerprint-suite",
      "pushed_at": "2026-08-06",
      "created_at": null,
      "stars": 2600,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": "v2.1.88",
      "release_published_at": "2026-08-05",
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "Apache-2.0",
      "license_bucket": "permissive",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-08-06 — 8 days, within the 90-day ACTIVE threshold.",
      "age_days": 8,
      "release_bucket": "r30",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "browserforge",
        "puppeteer-extra"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "hcaptcha-challenger",
      "name": "hcaptcha-challenger",
      "url": "https://github.com/QIN2DIM/hcaptcha-challenger",
      "section": "02",
      "section_slug": "stealth-automation",
      "kind": "repo",
      "description": "Multimodal-LLM hCaptcha solver; the clearest public example of the model-based turn in captcha solving.",
      "language": "Python",
      "repo_path": "QIN2DIM/hcaptcha-challenger",
      "pushed_at": "2026-01-28",
      "created_at": null,
      "stars": 2500,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "GPL-3.0",
      "license_bucket": "copyleft",
      "state": "SEMI",
      "state_first_edition": "SEMI",
      "state_moved": false,
      "derivation": "pushed_at = 2026-01-28 — 198 days, inside the 90–365 day SEMI band.",
      "age_days": 198,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "creepjs",
      "name": "CreepJS (live)",
      "url": "https://abrahamjuliot.github.io/creepjs/",
      "section": "03",
      "section_slug": "detection-test-pages",
      "kind": "page",
      "description": "The most thorough public fingerprint and lie-detection suite. Not a score — a list of the places your browser contradicts itself.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "browserleaks",
        "pixelscan"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "creepjs-workers",
      "name": "CreepJS worker tests",
      "url": "https://abrahamjuliot.github.io/creepjs/tests/workers.html",
      "section": "03",
      "section_slug": "detection-test-pages",
      "kind": "page",
      "description": "Worker-scope consistency checks: the same questions asked from a context most spoofing stacks forget to patch.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "browserleaks",
      "name": "BrowserLeaks",
      "url": "https://browserleaks.com/",
      "section": "03",
      "section_slug": "detection-test-pages",
      "kind": "page",
      "description": "One page per surface — canvas, WebGL, fonts, WebRTC — with the raw values rather than a verdict.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "creepjs",
        "deviceinfo-me"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "browserleaks-tls",
      "name": "BrowserLeaks TLS",
      "url": "https://tls.browserleaks.com/",
      "section": "03",
      "section_slug": "detection-test-pages",
      "kind": "page",
      "description": "JA3 and JA4 plus the full handshake, which is the half of your fingerprint JavaScript cannot change.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "check-ja3-zone",
        "tls-peet-ws"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "amiunique",
      "name": "AmIUnique",
      "url": "https://amiunique.org/fingerprint",
      "section": "03",
      "section_slug": "detection-test-pages",
      "kind": "page",
      "description": "Research-backed uniqueness checker from INRIA, and the rare case where the population behind the number is documented.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "bot-sannysoft",
      "name": "bot.sannysoft",
      "url": "https://bot.sannysoft.com/",
      "section": "03",
      "section_slug": "detection-test-pages",
      "kind": "page",
      "description": "The canonical red-green grid for headless and automation tells. Old, small, and still the first thing everyone runs.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "are-you-headless",
        "rebrowser-bot-detector"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "pixelscan",
      "name": "Pixelscan",
      "url": "https://pixelscan.net/",
      "section": "03",
      "section_slug": "detection-test-pages",
      "kind": "page",
      "description": "Consistency scanner: checks whether IP, timezone and fingerprint tell the same story.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "creepjs"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "iphey",
      "name": "IPHey",
      "url": "https://iphey.com/",
      "section": "03",
      "section_slug": "detection-test-pages",
      "kind": "page",
      "description": "Trustworthiness scan across browser, hardware, software and IP.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "browserscan",
      "name": "BrowserScan",
      "url": "https://www.browserscan.net/",
      "section": "03",
      "section_slug": "detection-test-pages",
      "kind": "page",
      "description": "Fingerprint plus bot-detection scoring, with the formula undisclosed.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "fingerprint-playground",
      "name": "Fingerprint Playground",
      "url": "https://demo.fingerprint.com/playground",
      "section": "03",
      "section_slug": "detection-test-pages",
      "kind": "page",
      "description": "Live demo of the commercial Fingerprint Pro identifier — useful as the detection side's own reference output.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "cover-your-tracks",
      "name": "EFF Cover Your Tracks",
      "url": "https://coveryourtracks.eff.org/",
      "section": "03",
      "section_slug": "detection-test-pages",
      "kind": "page",
      "description": "Successor to Panopticlick. Measures entropy against a corpus it publishes the methodology for.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "device-and-browser-info",
      "name": "Device and Browser Info",
      "url": "https://deviceandbrowserinfo.com/",
      "section": "03",
      "section_slug": "detection-test-pages",
      "kind": "page",
      "description": "Large public attribute dump with machine-readable APIs beside it.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "deviceinfo-me"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "tls-peet-ws",
      "name": "TrackMe / peet.ws",
      "url": "https://tls.peet.ws/api/all",
      "section": "03",
      "section_slug": "detection-test-pages",
      "kind": "page",
      "description": "One JSON document containing your TLS, JA3, JA4, HTTP/2 and header fingerprints. The fastest way to see what you look like below the browser.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "browserleaks-tls",
        "check-ja3-zone",
        "scrapfly-fp-api"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "rebrowser-bot-detector",
      "name": "Rebrowser bot detector",
      "url": "https://bot-detector.rebrowser.net/",
      "section": "03",
      "section_slug": "detection-test-pages",
      "kind": "page",
      "description": "CDP-leak-focused tests — Runtime.enable and friends — rather than the usual navigator property grid.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "are-you-headless",
        "bot-sannysoft"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "nowsecure-nl",
      "name": "nowsecure.nl",
      "url": "https://nowsecure.nl/",
      "section": "03",
      "section_slug": "detection-test-pages",
      "kind": "page",
      "description": "A long-standing live Cloudflare challenge target, kept up specifically to be challenged.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "webbrowsertools",
      "name": "WebBrowserTools",
      "url": "https://webbrowsertools.com/",
      "section": "03",
      "section_slug": "detection-test-pages",
      "kind": "page",
      "description": "Grab-bag of individual surface tests, useful when you need exactly one of them isolated.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "scrapfly-browser-fingerprint",
      "name": "Scrapfly Browser Fingerprint",
      "url": "https://scrapfly.io/web-scraping-tools/browser-fingerprint",
      "section": "03",
      "section_slug": "detection-test-pages",
      "kind": "page",
      "description": "Vendor-run browser fingerprint inspector.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "scrapfly-ja3",
      "name": "Scrapfly JA3",
      "url": "https://scrapfly.io/web-scraping-tools/ja3-fingerprint",
      "section": "03",
      "section_slug": "detection-test-pages",
      "kind": "page",
      "description": "JA3 checker with the handshake broken out.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "scrapfly-fp-api",
      "name": "Scrapfly fingerprint API",
      "url": "https://tools.scrapfly.io/api/fp/anything",
      "section": "03",
      "section_slug": "detection-test-pages",
      "kind": "page",
      "description": "Machine-readable request-fingerprint echo endpoint — scriptable, which most of this section is not.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "tls-peet-ws"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "check-ja3-zone",
      "name": "check.ja3.zone",
      "url": "https://check.ja3.zone/",
      "section": "03",
      "section_slug": "detection-test-pages",
      "kind": "page",
      "description": "Lightweight JA3 echo service with no page around it.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "browserleaks-tls",
        "tls-peet-ws"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "fpmon",
      "name": "FP-Monitor (fpmon)",
      "url": "https://fpmon.github.io/fingerprinting-monitor/",
      "section": "03",
      "section_slug": "detection-test-pages",
      "kind": "page",
      "description": "Academic tool that measures how much fingerprinting a site is actually doing to you.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "brotector",
      "name": "Brotector",
      "url": "https://github.com/ttlns/brotector",
      "section": "03",
      "section_slug": "detection-test-pages",
      "kind": "repo",
      "description": "Open-source anti-bot for webdrivers. Self-host it to test your own evasions against something you can read.",
      "language": "JavaScript",
      "repo_path": "ttlns/brotector",
      "pushed_at": "2024-12-03",
      "created_at": null,
      "stars": 288,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MIT",
      "license_bucket": "permissive",
      "state": "NRND",
      "state_first_edition": "SEMI",
      "state_moved": true,
      "derivation": "pushed_at = 2024-12-03 — 619 days, inside the 365–1095 day NRND band.",
      "age_days": 619,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "are-you-headless",
      "name": "Are You Headless",
      "url": "https://arh.antoinevastel.com/bots/areyouheadless",
      "section": "03",
      "section_slug": "detection-test-pages",
      "kind": "page",
      "description": "Antoine Vastel's headless-detection page — cited in dozens of tutorials and, at this field check, returning 502.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 502,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": "Bad Gateway. No earlier observation in this register, so no down-since date is printed.",
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "DEAD",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "The link check returned 502 at 2026-08-14T09:12:00Z. DEAD is tested first.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [
        "listed-elsewhere"
      ],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "bot-sannysoft",
        "rebrowser-bot-detector"
      ],
      "annotation": "Listed precisely because other registries still list it without checking. A dead entry that is marked dead is more useful than a live entry nobody verified. — ED.",
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "deviceinfo-me",
      "name": "deviceinfo.me",
      "url": "https://www.deviceinfo.me/",
      "section": "03",
      "section_slug": "detection-test-pages",
      "kind": "page",
      "description": "Formerly a broad attribute dump; the host did not complete a connection at this field check.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 0,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": "Connection failure — no HTTP response at all, from two attempts.",
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "DEAD",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "The link check returned no response at all at 2026-08-14T09:12:00Z. DEAD is tested first.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [
        "listed-elsewhere"
      ],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "browserleaks",
        "device-and-browser-info"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "cloudflare-turnstile-docs",
      "name": "Cloudflare Turnstile docs",
      "url": "https://developers.cloudflare.com/turnstile/",
      "section": "04",
      "section_slug": "anti-bot-vendors",
      "kind": "docs",
      "description": "Full public developer documentation for the challenge you meet most often.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "cloudflare-bot-management-docs",
      "name": "Cloudflare Bot Management docs",
      "url": "https://developers.cloudflare.com/bots/",
      "section": "04",
      "section_slug": "anti-bot-vendors",
      "kind": "docs",
      "description": "Includes the bot-score concept pages, which are the closest thing to a published detection rubric any vendor offers.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "cloudflare-turnstile-ga",
      "name": "Cloudflare Turnstile GA writeup",
      "url": "https://blog.cloudflare.com/turnstile-ga/",
      "section": "04",
      "section_slug": "anti-bot-vendors",
      "kind": "docs",
      "description": "The design rationale, in the vendor's own words.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "datadome-docs",
      "name": "DataDome documentation",
      "url": "https://docs.datadome.co/docs/welcome-to-datadome-platform",
      "section": "04",
      "section_slug": "anti-bot-vendors",
      "kind": "docs",
      "description": "Platform documentation. The docs host is listed because datadome.co itself refuses automated clients.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [
        "docs-host-substituted"
      ],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "human-security-docs",
      "name": "HUMAN Security documentation",
      "url": "https://docs.humansecurity.com/home",
      "section": "04",
      "section_slug": "anti-bot-vendors",
      "kind": "docs",
      "description": "Formerly PerimeterX. Product pages refuse automated clients; the docs host is open.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [
        "docs-host-substituted"
      ],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "akamai-bot-manager",
      "name": "Akamai Bot Manager",
      "url": "https://www.akamai.com/products/bot-manager",
      "section": "04",
      "section_slug": "anti-bot-vendors",
      "kind": "docs",
      "description": "Public product page. The techdocs portal behind it redirects to SSO, so it is not listed.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [
        "docs-host-substituted"
      ],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "kasada",
      "name": "Kasada",
      "url": "https://www.kasada.io/",
      "section": "04",
      "section_slug": "anti-bot-vendors",
      "kind": "docs",
      "description": "Root site. Documentation sits behind a portal login and is not listed here.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [
        "docs-host-substituted"
      ],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "arkose-labs-docs",
      "name": "Arkose Labs developer docs",
      "url": "https://developer.arkoselabs.com/docs/what-is-titan",
      "section": "04",
      "section_slug": "anti-bot-vendors",
      "kind": "docs",
      "description": "Open developer documentation for the Titan challenge platform.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "imperva-advanced-bot-protection",
      "name": "Imperva Advanced Bot Protection",
      "url": "https://www.imperva.com/products/advanced-bot-protection-management/",
      "section": "04",
      "section_slug": "anti-bot-vendors",
      "kind": "docs",
      "description": "Product page; the technical documentation moved to the Thales cybersecurity docs host.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "google-recaptcha",
      "name": "Google reCAPTCHA",
      "url": "https://developers.google.com/recaptcha",
      "section": "04",
      "section_slug": "anti-bot-vendors",
      "kind": "docs",
      "description": "Developer documentation for v2, v3 and Enterprise.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "hcaptcha-docs",
      "name": "hCaptcha documentation",
      "url": "https://docs.hcaptcha.com/",
      "section": "04",
      "section_slug": "anti-bot-vendors",
      "kind": "docs",
      "description": "Open documentation, including the enterprise risk-scoring surfaces.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "aws-waf-bot-control",
      "name": "AWS WAF Bot Control",
      "url": "https://docs.aws.amazon.com/waf/latest/developerguide/waf-bot-control.html",
      "section": "04",
      "section_slug": "anti-bot-vendors",
      "kind": "docs",
      "description": "The managed rule groups documented rule by rule — unusually specific for a vendor.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "f5-bot-defense",
      "name": "F5 Distributed Cloud Bot Defense",
      "url": "https://www.f5.com/products/distributed-cloud-services/bot-defense",
      "section": "04",
      "section_slug": "anti-bot-vendors",
      "kind": "docs",
      "description": "Formerly Shape Security. Product page; technical detail is gated.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "eckersley-2010",
      "name": "Eckersley — How Unique Is Your Web Browser?",
      "url": "https://coveryourtracks.eff.org/static/browser-uniqueness.pdf",
      "section": "05",
      "section_slug": "papers",
      "kind": "paper",
      "description": "PETS 2010. The paper that started this field, and the origin of measuring a browser in bits of entropy.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "laperdrix-survey-2020",
      "name": "Laperdrix et al. — Browser Fingerprinting: A Survey",
      "url": "https://arxiv.org/abs/1905.01051",
      "section": "05",
      "section_slug": "papers",
      "kind": "paper",
      "description": "ACM TWEB 2020. The single best orientation document if you are new to the area.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "beauty-and-the-beast-2016",
      "name": "Laperdrix et al. — Beauty and the Beast",
      "url": "https://www.ieee-security.org/TC/SP2016/papers/0824a878.pdf",
      "section": "05",
      "section_slug": "papers",
      "kind": "paper",
      "description": "IEEE S&P 2016. Large-scale measurement of fingerprint diversity, including the mobile turn.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "fingerprinting-the-fingerprinters-2021",
      "name": "Iqbal et al. — Fingerprinting the Fingerprinters",
      "url": "https://arxiv.org/abs/2008.04480",
      "section": "05",
      "section_slug": "papers",
      "kind": "paper",
      "description": "IEEE S&P 2021. Automated detection of fingerprinting scripts in the wild.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "fp-stalker-2018",
      "name": "Vastel et al. — FP-Stalker",
      "url": "https://hal.inria.fr/hal-01652021/document",
      "section": "05",
      "section_slug": "papers",
      "kind": "paper",
      "description": "IEEE S&P 2018. How fingerprints evolve, and how long linkability survives that evolution.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "fp-scanner-2018",
      "name": "Vastel et al. — FP-Scanner",
      "url": "https://www.usenix.org/system/files/conference/usenixsecurity18/sec18-vastel.pdf",
      "section": "05",
      "section_slug": "papers",
      "kind": "paper",
      "description": "USENIX Security 2018. The inconsistency-detection paper every anti-detect claim should be read against.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "hiding-in-the-crowd-2018",
      "name": "Gómez-Boix et al. — Hiding in the Crowd",
      "url": "https://hal.inria.fr/hal-01718234/document",
      "section": "05",
      "section_slug": "papers",
      "kind": "paper",
      "description": "WWW 2018. The counterweight: at real population scale, uniqueness is lower than the early papers implied.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "pixel-perfect-2012",
      "name": "Mowery & Shacham — Pixel Perfect",
      "url": "https://hovav.net/ucsd/dist/canvas.pdf",
      "section": "05",
      "section_slug": "papers",
      "kind": "paper",
      "description": "W2SP 2012. Canvas fingerprinting, first described.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "cross-browser-fingerprinting-2017",
      "name": "Cao et al. — (Cross-)Browser Fingerprinting",
      "url": "https://www.ndss-symposium.org/ndss2017/ndss-2017-programme/cross-browser-fingerprinting-os-and-hardware-level-features/",
      "section": "05",
      "section_slug": "papers",
      "kind": "paper",
      "description": "NDSS 2017. Identifying a machine across two different browsers via OS and hardware features.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "cookieless-monster-2013",
      "name": "Nikiforakis et al. — Cookieless Monster",
      "url": "https://www.securitee.org/files/cookieless_sp2013.pdf",
      "section": "05",
      "section_slug": "papers",
      "kind": "paper",
      "description": "IEEE S&P 2013. The first systematic look at commercial fingerprinting providers.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "online-tracking-2016",
      "name": "Englehardt & Narayanan — 1-Million-Site Measurement",
      "url": "https://webtransparency.cs.princeton.edu/webcensus/",
      "section": "05",
      "section_slug": "papers",
      "kind": "paper",
      "description": "CCS 2016. The measurement infrastructure that became OpenWPM.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "openwpm"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "senol-2022",
      "name": "Senol et al. — USENIX Security 2022",
      "url": "https://www.usenix.org/conference/usenixsecurity22/presentation/senol",
      "section": "05",
      "section_slug": "papers",
      "kind": "paper",
      "description": "Leakage of form data before submission, measured at scale.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "laperdrix-popets-2020",
      "name": "Laperdrix et al. — Fingerprinting defenses (PoPETs 2020)",
      "url": "https://petsymposium.org/popets/2020/popets-2020-0009.pdf",
      "section": "05",
      "section_slug": "papers",
      "kind": "paper",
      "description": "An evaluation of the defences, including where randomisation makes you more identifiable rather than less.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "w3c-fingerprinting-guidance",
      "name": "W3C — Mitigating Browser Fingerprinting",
      "url": "https://www.w3.org/TR/fingerprinting-guidance/",
      "section": "05",
      "section_slug": "papers",
      "kind": "docs",
      "description": "The specification-authoring guidance. Read it to understand why new web APIs look the way they do.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "mozilla-fingerprinting-wiki",
      "name": "Mozilla Security/Fingerprinting wiki",
      "url": "https://wiki.mozilla.org/Security/Fingerprinting",
      "section": "05",
      "section_slug": "papers",
      "kind": "docs",
      "description": "A browser vendor's own working notes on which surfaces leak and what it intends to do about them.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "akamai-http2-fingerprinting",
      "name": "Akamai — Passive Fingerprinting of HTTP/2 Clients",
      "url": "https://blackhat.com/docs/eu-17/materials/eu-17-Shuster-Passive-Fingerprinting-Of-HTTP2-Clients-wp.pdf",
      "section": "05",
      "section_slug": "papers",
      "kind": "paper",
      "description": "Black Hat EU 2017. The origin of HTTP/2 frame-order fingerprinting, from the detection side.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "tum-http2-fingerprinting",
      "name": "TUM/LRZ — Fingerprinting HTTP/2",
      "url": "https://privacycheck.sec.lrz.de/passive/fp_h2/fp_http2.html",
      "section": "05",
      "section_slug": "papers",
      "kind": "page",
      "description": "A live HTTP/2 fingerprint readout attached to the research behind it.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "openwpm",
      "name": "OpenWPM",
      "url": "https://github.com/openwpm/OpenWPM",
      "section": "05",
      "section_slug": "papers",
      "kind": "repo",
      "description": "The web-measurement platform most of the papers in this section were produced with.",
      "language": "Python",
      "repo_path": "openwpm/OpenWPM",
      "pushed_at": "2026-08-06",
      "created_at": null,
      "stars": 1400,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "NOASSERTION",
      "license_bucket": "custom",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-08-06 — 8 days, within the 90-day ACTIVE threshold.",
      "age_days": 8,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "online-tracking-2016"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "antoine-vastel-blog",
      "name": "Antoine Vastel's blog",
      "url": "https://antoinevastel.com/",
      "section": "05",
      "section_slug": "papers",
      "kind": "page",
      "description": "Practical detection writeups from an author who also publishes the peer-reviewed version.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "castle-blog",
      "name": "Castle blog",
      "url": "https://blog.castle.io/",
      "section": "05",
      "section_slug": "papers",
      "kind": "page",
      "description": "Detection-side engineering posts with unusual technical specificity.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "incolumitas",
      "name": "Incolumitas (Nikolai Tschacher)",
      "url": "https://incolumitas.com/",
      "section": "05",
      "section_slug": "papers",
      "kind": "page",
      "description": "Long-running bot-detection experiments, including a self-hosted detection test.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "fingerprint-blog",
      "name": "Fingerprint blog",
      "url": "https://fingerprint.com/blog/",
      "section": "05",
      "section_slug": "papers",
      "kind": "page",
      "description": "The commercial identifier vendor's engineering blog. Vendor-authored; read as a primary source about their own product.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "fingerprintjs",
      "name": "FingerprintJS",
      "url": "https://github.com/fingerprintjs/fingerprintjs",
      "section": "06",
      "section_slug": "fingerprinting-libraries",
      "kind": "repo",
      "description": "The open-source collector, from the company that sells the commercial identifier built on top of it.",
      "language": "TypeScript",
      "repo_path": "fingerprintjs/fingerprintjs",
      "pushed_at": "2026-08-09",
      "created_at": null,
      "stars": 28300,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": "v5.2.0",
      "release_published_at": "2026-04-07",
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MIT",
      "license_bucket": "permissive",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-08-09 — 5 days, within the 90-day ACTIVE threshold.",
      "age_days": 5,
      "release_bucket": "r180",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [
        "fingerprintjs2"
      ],
      "superseded_by": [],
      "alternative_to": [
        "clientjs",
        "thumbmarkjs"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "fingerprintjs2",
      "name": "fingerprintjs2 (Valve)",
      "url": "https://github.com/Valve/fingerprintjs2",
      "section": "06",
      "section_slug": "fingerprinting-libraries",
      "kind": "repo",
      "description": "The v2-era repository. The URL now redirects to the current project, which is the maintainer's own statement about where the work went.",
      "language": null,
      "repo_path": "Valve/fingerprintjs2",
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 301,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": "Permanent redirect to fingerprintjs/fingerprintjs.",
      "http_redirect_to": "https://github.com/fingerprintjs/fingerprintjs",
      "license_spdx": "MIT",
      "license_bucket": "permissive",
      "state": "WITHDRAWN",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "The URL answered 301 to https://github.com/fingerprintjs/fingerprintjs. The source moved the entry itself.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [
        "fingerprintjs"
      ],
      "alternative_to": [],
      "annotation": "A 301 from the source itself is the strongest liveness field there is: it is the maintainer telling you the entry moved. Nothing here is inferred. — ED.",
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "botd",
      "name": "BotD",
      "url": "https://github.com/fingerprintjs/BotD",
      "section": "06",
      "section_slug": "fingerprinting-libraries",
      "kind": "repo",
      "description": "Browser-side bot detection library — the same team's answer to the question this whole catalogue circles.",
      "language": "TypeScript",
      "repo_path": "fingerprintjs/BotD",
      "pushed_at": "2026-08-11",
      "created_at": null,
      "stars": 1400,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MIT",
      "license_bucket": "permissive",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-08-11 — 3 days, within the 90-day ACTIVE threshold.",
      "age_days": 3,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "thumbmarkjs",
      "name": "ThumbmarkJS",
      "url": "https://github.com/thumbmarkjs/thumbmarkjs",
      "section": "06",
      "section_slug": "fingerprinting-libraries",
      "kind": "repo",
      "description": "Independent open-source fingerprinting library with a published component breakdown.",
      "language": "TypeScript",
      "repo_path": "thumbmarkjs/thumbmarkjs",
      "pushed_at": "2026-07-17",
      "created_at": null,
      "stars": 1100,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": "v1.10.1",
      "release_published_at": "2026-07-17",
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MIT",
      "license_bucket": "permissive",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-07-17 — 28 days, within the 90-day ACTIVE threshold.",
      "age_days": 28,
      "release_bucket": "r30",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "clientjs",
        "fingerprintjs"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "clientjs",
      "name": "ClientJS",
      "url": "https://github.com/jackspirou/clientjs",
      "section": "06",
      "section_slug": "fingerprinting-libraries",
      "kind": "repo",
      "description": "An early general-purpose fingerprinting library, still linked from tutorials written after it stopped.",
      "language": "JavaScript",
      "repo_path": "jackspirou/clientjs",
      "pushed_at": "2023-01-08",
      "created_at": null,
      "stars": 2200,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "Apache-2.0",
      "license_bucket": "permissive",
      "state": "DEAD",
      "state_first_edition": "DEAD",
      "state_moved": false,
      "derivation": "pushed_at = 2023-01-08 — 1314 days, past the 1095-day outer threshold.",
      "age_days": 1314,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "fingerprintjs",
        "thumbmarkjs"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "creepjs-repo",
      "name": "CreepJS (source)",
      "url": "https://github.com/abrahamjuliot/creepjs",
      "section": "06",
      "section_slug": "fingerprinting-libraries",
      "kind": "repo",
      "description": "The source behind the test page. Worth reading as a catalogue of lie-detection techniques in itself.",
      "language": "TypeScript",
      "repo_path": "abrahamjuliot/creepjs",
      "pushed_at": "2026-06-11",
      "created_at": null,
      "stars": 2500,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MIT",
      "license_bucket": "permissive",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-06-11 — 64 days, within the 90-day ACTIVE threshold.",
      "age_days": 64,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "detectincognito",
      "name": "detectIncognito",
      "url": "https://github.com/Joe12387/detectIncognito",
      "section": "06",
      "section_slug": "fingerprinting-libraries",
      "kind": "repo",
      "description": "Private-browsing detection across engines; a narrow surface maintained properly.",
      "language": "TypeScript",
      "repo_path": "Joe12387/detectIncognito",
      "pushed_at": "2026-08-09",
      "created_at": null,
      "stars": 554,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MIT",
      "license_bucket": "permissive",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-08-09 — 5 days, within the 90-day ACTIVE threshold.",
      "age_days": 5,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "broprint-js",
      "name": "Broprint.js",
      "url": "https://github.com/Rajesh-Royal/Broprint.js",
      "section": "06",
      "section_slug": "fingerprinting-libraries",
      "kind": "repo",
      "description": "Small canvas- and audio-based visitor identifier.",
      "language": "TypeScript",
      "repo_path": "Rajesh-Royal/Broprint.js",
      "pushed_at": "2026-04-25",
      "created_at": null,
      "stars": 602,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MIT",
      "license_bucket": "permissive",
      "state": "SEMI",
      "state_first_edition": "ACTIVE",
      "state_moved": true,
      "derivation": "pushed_at = 2026-04-25 — 111 days, inside the 90–365 day SEMI band.",
      "age_days": 111,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "utls",
      "name": "uTLS",
      "url": "https://github.com/refraction-networking/utls",
      "section": "07",
      "section_slug": "tls-network",
      "kind": "repo",
      "description": "Go TLS library that lets you choose your ClientHello. The foundation almost everything in this section stands on.",
      "language": "Go",
      "repo_path": "refraction-networking/utls",
      "pushed_at": "2026-08-02",
      "created_at": null,
      "stars": 2500,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": "v1.8.2",
      "release_published_at": "2026-08-02",
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "BSD-3-Clause",
      "license_bucket": "permissive",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-08-02 — 12 days, within the 90-day ACTIVE threshold.",
      "age_days": 12,
      "release_bucket": "r30",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "uquic",
      "name": "uQUIC",
      "url": "https://github.com/refraction-networking/uquic",
      "section": "07",
      "section_slug": "tls-network",
      "kind": "repo",
      "description": "The same idea for QUIC, which is where this problem is moving.",
      "language": "Go",
      "repo_path": "refraction-networking/uquic",
      "pushed_at": "2026-08-04",
      "created_at": null,
      "stars": 74,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MIT",
      "license_bucket": "permissive",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-08-04 — 10 days, within the 90-day ACTIVE threshold.",
      "age_days": 10,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "curl-impersonate",
      "name": "curl-impersonate (lexiforest)",
      "url": "https://github.com/lexiforest/curl-impersonate",
      "section": "07",
      "section_slug": "tls-network",
      "kind": "repo",
      "description": "The maintained fork: curl builds whose TLS and HTTP/2 handshakes match real browsers.",
      "language": "C",
      "repo_path": "lexiforest/curl-impersonate",
      "pushed_at": "2026-08-08",
      "created_at": null,
      "stars": 2700,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": "v2.1.0",
      "release_published_at": "2026-08-08",
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MIT",
      "license_bucket": "permissive",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-08-08 — 6 days, within the 90-day ACTIVE threshold.",
      "age_days": 6,
      "release_bucket": "r30",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [
        "curl-impersonate-original"
      ],
      "superseded_by": [],
      "alternative_to": [
        "curl-cffi"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "curl-impersonate-original",
      "name": "curl-impersonate (lwthiker)",
      "url": "https://github.com/lwthiker/curl-impersonate",
      "section": "07",
      "section_slug": "tls-network",
      "kind": "repo",
      "description": "The original. Two and a half times the stars of the maintained fork, and two years without a push.",
      "language": "C",
      "repo_path": "lwthiker/curl-impersonate",
      "pushed_at": "2024-07-18",
      "created_at": null,
      "stars": 6800,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MIT",
      "license_bucket": "permissive",
      "state": "NRND",
      "state_first_edition": "SEMI",
      "state_moved": true,
      "derivation": "pushed_at = 2024-07-18 — 757 days, inside the 365–1095 day NRND band.",
      "age_days": 757,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [
        "curl-impersonate"
      ],
      "alternative_to": [],
      "annotation": "The most common single mistake in this whole field: installing the repository with the most stars. Check the push date first — that is all this catalogue is for. — ED.",
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "curl-cffi",
      "name": "curl_cffi",
      "url": "https://github.com/lexiforest/curl_cffi",
      "section": "07",
      "section_slug": "tls-network",
      "kind": "repo",
      "description": "Python bindings over curl-impersonate; the usual practical entry point.",
      "language": "Python",
      "repo_path": "lexiforest/curl_cffi",
      "pushed_at": "2026-08-08",
      "created_at": null,
      "stars": 6300,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MIT",
      "license_bucket": "permissive",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-08-08 — 6 days, within the 90-day ACTIVE threshold.",
      "age_days": 6,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "curl-impersonate",
        "tls-client-go"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "tls-client-go",
      "name": "tls-client (Go)",
      "url": "https://github.com/bogdanfinn/tls-client",
      "section": "07",
      "section_slug": "tls-network",
      "kind": "repo",
      "description": "HTTP client with selectable TLS profiles, plus a shared-library build for other languages.",
      "language": "Go",
      "repo_path": "bogdanfinn/tls-client",
      "pushed_at": "2026-07-02",
      "created_at": null,
      "stars": 1800,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": "v1.15.1",
      "release_published_at": "2026-07-02",
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "BSD-4-Clause",
      "license_bucket": "permissive",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-07-02 — 43 days, within the 90-day ACTIVE threshold.",
      "age_days": 43,
      "release_bucket": "r180",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "azuretls-client",
        "curl-cffi",
        "cycletls"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "cycletls",
      "name": "CycleTLS",
      "url": "https://github.com/Danny-Dasilva/CycleTLS",
      "section": "07",
      "section_slug": "tls-network",
      "kind": "repo",
      "description": "JA3-controllable HTTP client with Go and JavaScript interfaces.",
      "language": "Go / TypeScript",
      "repo_path": "Danny-Dasilva/CycleTLS",
      "pushed_at": "2026-07-07",
      "created_at": null,
      "stars": 1500,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "GPL-3.0",
      "license_bucket": "copyleft",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-07-07 — 38 days, within the 90-day ACTIVE threshold.",
      "age_days": 38,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "tls-client-go"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "azuretls-client",
      "name": "azuretls-client",
      "url": "https://github.com/Noooste/azuretls-client",
      "section": "07",
      "section_slug": "tls-network",
      "kind": "repo",
      "description": "Go HTTP client with fine-grained control over the handshake and HTTP/2 settings frame.",
      "language": "Go",
      "repo_path": "Noooste/azuretls-client",
      "pushed_at": "2026-04-17",
      "created_at": null,
      "stars": 469,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MIT",
      "license_bucket": "permissive",
      "state": "SEMI",
      "state_first_edition": "ACTIVE",
      "state_moved": true,
      "derivation": "pushed_at = 2026-04-17 — 119 days, inside the 90–365 day SEMI band.",
      "age_days": 119,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "tls-client-go"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "ja4",
      "name": "JA4+",
      "url": "https://github.com/FoxIO-LLC/ja4",
      "section": "07",
      "section_slug": "tls-network",
      "kind": "repo",
      "description": "The current generation of network fingerprints: TLS, HTTP, TCP and more, each with its own suffix.",
      "language": "Rust / Python",
      "repo_path": "FoxIO-LLC/ja4",
      "pushed_at": "2026-07-21",
      "created_at": null,
      "stars": 2000,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "NOASSERTION",
      "license_bucket": "custom",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-07-21 — 24 days, within the 90-day ACTIVE threshold.",
      "age_days": 24,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [
        "ja3"
      ],
      "superseded_by": [],
      "alternative_to": [
        "p0f"
      ],
      "annotation": "Licence is FoxIO's own, not an OSI identifier. GitHub reports NOASSERTION and so does this register — read the file before you vendor it. — ED.",
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "ja4-explainer",
      "name": "JA4+ explainer",
      "url": "https://blog.foxio.io/ja4%2B-network-fingerprinting",
      "section": "07",
      "section_slug": "tls-network",
      "kind": "docs",
      "description": "The authors' own explanation of what each JA4 component encodes.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "ja3",
      "name": "JA3 (Salesforce)",
      "url": "https://github.com/salesforce/ja3",
      "section": "07",
      "section_slug": "tls-network",
      "kind": "repo",
      "description": "The original TLS fingerprint. Archived by Salesforce; the format is still everywhere.",
      "language": "Python",
      "repo_path": "salesforce/ja3",
      "pushed_at": null,
      "created_at": null,
      "stars": 3100,
      "forks": null,
      "archived": true,
      "archived_at": "2025-05-01",
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "BSD-3-Clause",
      "license_bucket": "permissive",
      "state": "ARCHIVED",
      "state_first_edition": "ARCHIVED",
      "state_moved": false,
      "derivation": "archived = true, set 2025-05-01. A maintainer's own statement outranks every date rule.",
      "age_days": 470,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [
        "historical"
      ],
      "supersedes": [],
      "superseded_by": [
        "ja4"
      ],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "ja3-origin-writeup",
      "name": "JA3 origin writeup",
      "url": "https://engineering.salesforce.com/tls-fingerprinting-with-ja3-and-ja3s-247362855967/",
      "section": "07",
      "section_slug": "tls-network",
      "kind": "docs",
      "description": "The post that introduced JA3 and JA3S, kept for the reasoning rather than the code.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "trackme",
      "name": "TrackMe (tls.peet.ws)",
      "url": "https://github.com/pagpeter/TrackMe",
      "section": "07",
      "section_slug": "tls-network",
      "kind": "repo",
      "description": "The server behind tls.peet.ws — self-host it and you have your own handshake mirror.",
      "language": "Go",
      "repo_path": "pagpeter/TrackMe",
      "pushed_at": "2026-07-27",
      "created_at": null,
      "stars": 445,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "GPL-3.0",
      "license_bucket": "copyleft",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-07-27 — 18 days, within the 90-day ACTIVE threshold.",
      "age_days": 18,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "rama",
      "name": "rama",
      "url": "https://github.com/plabayo/rama",
      "section": "07",
      "section_slug": "tls-network",
      "kind": "repo",
      "description": "Rust framework for building proxies with explicit control over the emitted fingerprint.",
      "language": "Rust",
      "repo_path": "plabayo/rama",
      "pushed_at": "2026-08-13",
      "created_at": null,
      "stars": 1100,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "Apache-2.0",
      "license_bucket": "permissive",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-08-13 — 1 days, within the 90-day ACTIVE threshold.",
      "age_days": 1,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "mitmproxy"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "nginx-http2-fingerprint",
      "name": "nginx-http2-fingerprint",
      "url": "https://github.com/Xetera/nginx-http2-fingerprint",
      "section": "07",
      "section_slug": "tls-network",
      "kind": "repo",
      "description": "Reference implementation of HTTP/2 fingerprinting inside nginx. Read it; do not deploy it.",
      "language": "C",
      "repo_path": "Xetera/nginx-http2-fingerprint",
      "pushed_at": "2021-08-14",
      "created_at": null,
      "stars": 40,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "none",
      "state": "DEAD",
      "state_first_edition": "DEAD",
      "state_moved": false,
      "derivation": "pushed_at = 2021-08-14 — 1826 days, past the 1095-day outer threshold.",
      "age_days": 1826,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [
        "no-license",
        "historical"
      ],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "mitmproxy",
      "name": "mitmproxy",
      "url": "https://github.com/mitmproxy/mitmproxy",
      "section": "07",
      "section_slug": "tls-network",
      "kind": "repo",
      "description": "The general-purpose interception proxy. Not anti-detect tooling, and the fastest way to see what your stack actually sends.",
      "language": "Python",
      "repo_path": "mitmproxy/mitmproxy",
      "pushed_at": "2026-08-13",
      "created_at": null,
      "stars": 44700,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "MIT",
      "license_bucket": "permissive",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-08-13 — 1 days, within the 90-day ACTIVE threshold.",
      "age_days": 1,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "rama"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "p0f",
      "name": "p0f",
      "url": "https://github.com/p0f/p0f",
      "section": "07",
      "section_slug": "tls-network",
      "kind": "repo",
      "description": "Classic passive OS fingerprinting from TCP/IP behaviour. The technique predates all of this and still works.",
      "language": "C",
      "repo_path": "p0f/p0f",
      "pushed_at": "2019-07-09",
      "created_at": null,
      "stars": 521,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "none",
      "state": "DEAD",
      "state_first_edition": "DEAD",
      "state_moved": false,
      "derivation": "pushed_at = 2019-07-09 — 2593 days, past the 1095-day outer threshold.",
      "age_days": 2593,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [
        "no-license",
        "historical"
      ],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "ja4"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "amiunique-global-statistics",
      "name": "AmIUnique global statistics",
      "url": "https://amiunique.org/fingerprints-global-statistics",
      "section": "08",
      "section_slug": "datasets",
      "kind": "dataset",
      "description": "Live per-attribute distributions from the AmIUnique corpus. Note the path: /stats returns 404.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "cover-your-tracks-learn",
      "name": "EFF Cover Your Tracks — Learn",
      "url": "https://coveryourtracks.eff.org/learn",
      "section": "08",
      "section_slug": "datasets",
      "kind": "dataset",
      "description": "The entropy methodology and aggregate results behind the test, written to be checked.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "tlsfingerprint-io",
      "name": "tlsfingerprint.io",
      "url": "https://tlsfingerprint.io/",
      "section": "08",
      "section_slug": "datasets",
      "kind": "dataset",
      "description": "University of Michigan live population statistics for TLS ClientHellos seen on a real network.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "ja4-database",
      "name": "JA4 Database",
      "url": "https://ja4db.foxio.io/",
      "section": "08",
      "section_slug": "datasets",
      "kind": "dataset",
      "description": "Public JA4-to-application mapping, contributed to and queryable.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "device-and-browser-info-datasets",
      "name": "Device and Browser Info datasets",
      "url": "https://deviceandbrowserinfo.com/info_device",
      "section": "08",
      "section_slug": "datasets",
      "kind": "dataset",
      "description": "Public device and browser attribute datasets with an API in front of them.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "httparchive-reports",
      "name": "HTTP Archive reports",
      "url": "https://httparchive.org/reports",
      "section": "08",
      "section_slug": "datasets",
      "kind": "dataset",
      "description": "Longitudinal platform and API-usage data across millions of sites. The denominator for a lot of claims.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "web-almanac",
      "name": "Web Almanac",
      "url": "https://almanac.httparchive.org/",
      "section": "08",
      "section_slug": "datasets",
      "kind": "dataset",
      "description": "Annual chapters, including privacy and tracking, written against that data.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "chromium-privacy-sandbox",
      "name": "Chromium Privacy Sandbox",
      "url": "https://www.chromium.org/Home/chromium-privacy/privacy-sandbox/",
      "section": "08",
      "section_slug": "datasets",
      "kind": "docs",
      "description": "Platform direction on fingerprinting surfaces, from the engine with the largest share.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "multilogin",
      "name": "Multilogin",
      "url": "https://multilogin.com/",
      "section": "09",
      "section_slug": "commercial-browsers",
      "kind": "product",
      "description": "The long-running commercial incumbent; the product most open-source entries are positioned against.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "botbrowser",
        "camoufox",
        "donut-browser"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "gologin",
      "name": "GoLogin",
      "url": "https://gologin.com/",
      "section": "09",
      "section_slug": "commercial-browsers",
      "kind": "product",
      "description": "Commercial anti-detect browser with public API documentation.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "camoufox",
        "donut-browser"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "dolphin-anty",
      "name": "Dolphin Anty",
      "url": "https://dolphin-anty.com/",
      "section": "09",
      "section_slug": "commercial-browsers",
      "kind": "product",
      "description": "Commercial anti-detect browser aimed at affiliate and multi-account teams.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "camoufox",
        "donut-browser"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "adspower",
      "name": "AdsPower",
      "url": "https://www.adspower.com/",
      "section": "09",
      "section_slug": "commercial-browsers",
      "kind": "product",
      "description": "Commercial anti-detect browser with local API and team seats.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "botbrowser",
        "donut-browser"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "incogniton",
      "name": "Incogniton",
      "url": "https://incogniton.com/",
      "section": "09",
      "section_slug": "commercial-browsers",
      "kind": "product",
      "description": "Commercial anti-detect browser with a documented automation API.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "donut-browser"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "kameleo",
      "name": "Kameleo",
      "url": "https://kameleo.io/",
      "section": "09",
      "section_slug": "commercial-browsers",
      "kind": "product",
      "description": "Commercial anti-detect browser; documentation lives on help.kameleo.io, not /docs.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "camoufox",
        "donut-browser"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "octo-browser",
      "name": "Octo Browser",
      "url": "https://octobrowser.net/",
      "section": "09",
      "section_slug": "commercial-browsers",
      "kind": "product",
      "description": "Commercial anti-detect browser with public docs.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "donut-browser"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "undetectable-io",
      "name": "Undetectable",
      "url": "https://undetectable.io/",
      "section": "09",
      "section_slug": "commercial-browsers",
      "kind": "product",
      "description": "Commercial anti-detect browser. Note the name collision with the open-source entry in section 01.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "donut-browser"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "ghost-browser",
      "name": "Ghost Browser",
      "url": "https://ghostbrowser.com/",
      "section": "09",
      "section_slug": "commercial-browsers",
      "kind": "product",
      "description": "Multi-session browser aimed at agencies rather than at detection evasion.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "ixbrowser",
      "name": "ixBrowser",
      "url": "https://ixbrowser.com/en",
      "section": "09",
      "section_slug": "commercial-browsers",
      "kind": "product",
      "description": "Commercial anti-detect browser with a free tier.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "donut-browser"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "nstbrowser",
      "name": "Nstbrowser",
      "url": "https://www.nstbrowser.io/en",
      "section": "09",
      "section_slug": "commercial-browsers",
      "kind": "product",
      "description": "Commercial anti-detect browser bundled with a cloud scraping service.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "donut-browser"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "hidemyacc",
      "name": "Hidemyacc",
      "url": "https://hidemyacc.com/",
      "section": "09",
      "section_slug": "commercial-browsers",
      "kind": "product",
      "description": "Commercial anti-detect browser aimed at e-commerce multi-accounting.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [
        "donut-browser"
      ],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "scraping-enthusiasts",
      "name": "Scraping Enthusiasts",
      "url": "https://discord.gg/VvGZwtwzSr",
      "section": "10",
      "section_slug": "communities-and-lists",
      "kind": "community",
      "description": "The strongest anti-bot-focused server, including puppeteer-extra maintainers.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "extract-data-community",
      "name": "Extract Data Community (Zyte)",
      "url": "https://discord.com/invite/extract-data-community-993441606642446397",
      "section": "10",
      "section_slug": "communities-and-lists",
      "kind": "community",
      "description": "The largest of the scraping servers by membership, vendor-hosted.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "oxylabs-community",
      "name": "Oxylabs Community",
      "url": "https://discord.com/invite/6jkDvaC9dS",
      "section": "10",
      "section_slug": "communities-and-lists",
      "kind": "community",
      "description": "Proxy-vendor-hosted community; useful for network-layer questions.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "web-scraping-data-extraction",
      "name": "Web Scraping & Data Extraction",
      "url": "https://discord.com/invite/fHbbHTq4CQ",
      "section": "10",
      "section_slug": "communities-and-lists",
      "kind": "community",
      "description": "General scraping server, independent of any vendor.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "scrapy-discord",
      "name": "Scrapy",
      "url": "https://discord.gg/eKJEjrxtGb",
      "section": "10",
      "section_slug": "communities-and-lists",
      "kind": "community",
      "description": "The Scrapy project's own server. Framework-first rather than evasion-first.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "proxyway-community",
      "name": "Proxyway",
      "url": "https://discord.gg/9v9WXdeDNZ",
      "section": "10",
      "section_slug": "communities-and-lists",
      "kind": "community",
      "description": "Small proxy-review community.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "scrapeops-discord-directory",
      "name": "ScrapeOps Discord directory",
      "url": "https://scrapeops.io/web-scraping-playbook/best-web-scraping-discord-servers/",
      "section": "10",
      "section_slug": "communities-and-lists",
      "kind": "page",
      "description": "A meta-source: someone else's index of scraping communities, useful for finding servers this one has not checked.",
      "language": null,
      "repo_path": null,
      "pushed_at": null,
      "created_at": null,
      "stars": null,
      "forks": null,
      "archived": null,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "na",
      "state": "ACTIVE",
      "state_first_edition": "UNSTATED",
      "state_moved": true,
      "derivation": "No repository. The link check returned 200 at 2026-08-14T09:12:00Z, and 200–399 is ACTIVE for a non-repository entry.",
      "age_days": null,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "niespodd-browser-fingerprinting",
      "name": "niespodd/browser-fingerprinting",
      "url": "https://github.com/niespodd/browser-fingerprinting",
      "section": "10",
      "section_slug": "communities-and-lists",
      "kind": "repo",
      "description": "The heavyweight incumbent: deep prose analysis of bot-protection systems rather than a broad index. No licence file, so the text carries no reuse grant.",
      "language": null,
      "repo_path": "niespodd/browser-fingerprinting",
      "pushed_at": "2026-07-27",
      "created_at": null,
      "stars": 5122,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "none",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-07-27 — 18 days, within the 90-day ACTIVE threshold.",
      "age_days": 18,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [
        "no-license"
      ],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": "The best writing in this space, and it publishes no licence, no check date and no per-entry status. Those are the three fields this catalogue exists to add — not a criticism of the prose, which remains better than ours. — ED.",
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "thegp-untidetect-tools",
      "name": "TheGP/untidetect-tools",
      "url": "https://github.com/TheGP/untidetect-tools",
      "section": "10",
      "section_slug": "communities-and-lists",
      "kind": "repo",
      "description": "The closest direct competitor for anti-detect tooling; heavy on captcha solvers and SMS activation, thin on TLS and papers.",
      "language": null,
      "repo_path": "TheGP/untidetect-tools",
      "pushed_at": "2026-07-26",
      "created_at": null,
      "stars": 1884,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "none",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-07-26 — 19 days, within the 90-day ACTIVE threshold.",
      "age_days": 19,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [
        "no-license"
      ],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "lorien-awesome-web-scraping",
      "name": "lorien/awesome-web-scraping",
      "url": "https://github.com/lorien/awesome-web-scraping",
      "section": "10",
      "section_slug": "communities-and-lists",
      "kind": "repo",
      "description": "Language-organised scraping libraries. Adjacent rather than competing — almost no fingerprinting coverage.",
      "language": null,
      "repo_path": "lorien/awesome-web-scraping",
      "pushed_at": "2026-07-28",
      "created_at": null,
      "stars": 8061,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": "NOASSERTION",
      "license_bucket": "custom",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-07-28 — 17 days, within the 90-day ACTIVE threshold.",
      "age_days": 17,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "embeddinglayer-awesome-fingerprinting",
      "name": "embeddinglayer/awesome-fingerprinting",
      "url": "https://github.com/embeddinglayer/awesome-fingerprinting",
      "section": "10",
      "section_slug": "communities-and-lists",
      "kind": "repo",
      "description": "Research-aggregation angle; best overlap on papers, nearly nothing on evasion tooling.",
      "language": null,
      "repo_path": "embeddinglayer/awesome-fingerprinting",
      "pushed_at": "2026-07-24",
      "created_at": null,
      "stars": 81,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "none",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-07-24 — 21 days, within the 90-day ACTIVE threshold.",
      "age_days": 21,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [
        "no-license"
      ],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "nika-proxy-awesome-tls-fingerprinting",
      "name": "Nika-Proxy/awesome-tls-fingerprinting",
      "url": "https://github.com/Nika-Proxy/awesome-tls-fingerprinting",
      "section": "10",
      "section_slug": "communities-and-lists",
      "kind": "repo",
      "description": "Narrow TLS-only list, vendor-operated, with no stars at the field check.",
      "language": null,
      "repo_path": "Nika-Proxy/awesome-tls-fingerprinting",
      "pushed_at": "2026-05-19",
      "created_at": null,
      "stars": 0,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "none",
      "state": "ACTIVE",
      "state_first_edition": "ACTIVE",
      "state_moved": false,
      "derivation": "pushed_at = 2026-05-19 — 87 days, within the 90-day ACTIVE threshold.",
      "age_days": 87,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [
        "no-license",
        "vendor-operated"
      ],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "zeeshanahmad4-antidetect-list",
      "name": "Zeeshanahmad4/awesome_list_of_anti_detect_browsers_apps",
      "url": "https://github.com/Zeeshanahmad4/awesome_list_of_anti_detect_browsers_apps",
      "section": "10",
      "section_slug": "communities-and-lists",
      "kind": "repo",
      "description": "Commercial-browser listicle, unmaintained since 2024.",
      "language": null,
      "repo_path": "Zeeshanahmad4/awesome_list_of_anti_detect_browsers_apps",
      "pushed_at": "2024-08-25",
      "created_at": null,
      "stars": 53,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "none",
      "state": "NRND",
      "state_first_edition": "SEMI",
      "state_moved": true,
      "derivation": "pushed_at = 2024-08-25 — 719 days, inside the 365–1095 day NRND band.",
      "age_days": 719,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [
        "no-license"
      ],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    },
    {
      "slug": "antidetect-list",
      "name": "antidetect/list",
      "url": "https://github.com/antidetect/list",
      "section": "10",
      "section_slug": "communities-and-lists",
      "kind": "repo",
      "description": "The obvious org name, claimed and abandoned. Zero stars, no push since February 2024.",
      "language": null,
      "repo_path": "antidetect/list",
      "pushed_at": "2024-02-10",
      "created_at": null,
      "stars": 0,
      "forks": null,
      "archived": false,
      "archived_at": null,
      "release_tag": null,
      "release_published_at": null,
      "no_releases": false,
      "http_status": 200,
      "http_checked_at": "2026-08-14T09:12:00Z",
      "http_note": null,
      "http_redirect_to": null,
      "license_spdx": null,
      "license_bucket": "none",
      "state": "NRND",
      "state_first_edition": "SEMI",
      "state_moved": true,
      "derivation": "pushed_at = 2024-02-10 — 916 days, inside the 365–1095 day NRND band.",
      "age_days": 916,
      "release_bucket": "runknown",
      "stars_per_day": null,
      "verify_independently": false,
      "flags": [
        "no-license"
      ],
      "supersedes": [],
      "superseded_by": [],
      "alternative_to": [],
      "annotation": null,
      "checked_at": "2026-08-14T09:12:00Z"
    }
  ]
}
