Whole Antidetect Catalog Donut Browser

Catalogue · Section 06

Fingerprinting libraries

8 entries · 2ND ED., 1ST PRINTING

Corrected to 2026-08-14

5 ACTIVE · 1 SEMI · 1 WITHDRAWN · 1 DEAD

The collectors themselves: the libraries that read a browser and turn it into an identifier. Read these to know what is actually being asked of you, because a collector is the clearest possible statement of what the other side considers worth collecting — and unlike a vendor's documentation, it is code you can run line by line.

The collectors themselves — the code that reads a browser. Read these to know what is being asked of you.


06 · Fingerprinting libraries

8 entries
LicenceMIT
Pushed2026-08-09
Releasev5.2.0 · 2026-04-07
Stars28.3k
StateACTIVE
Silent5 d

FingerprintJS

ACTIVE

The open-source collector, from the company that sells the commercial identifier built on top of it.

Source

Evidence

Why ACTIVE: pushed_at = 2026-08-09 — 5 days, within the 90-day ACTIVE threshold.

FieldValue at this printing
pushed_at2026-08-09
archivedfalse
latest_releasev5.2.0 · 2026-04-07
license.spdx_idMIT
stargazers_count28300
http_status200
fetched_at2026-08-14T09:12:00Z
rubric_edition2nd, in force

Endpoint: GET https://api.github.com/repos/fingerprintjs/fingerprintjs

unauthenticated · 60 req/hr

A live read does not change what is printed above it. The site records that you ran it; what GitHub returned is not kept. The printed state moves only when the register is swept and a new printing is issued. raw JSON

See also · superseded by · alternatives

LicenceMIT
Pushed—
Release—
Stars—
StateWITHDRAWN
Silent—

fingerprintjs2 (Valve)

WITHDRAWN[WITHDRAWN]

The v2-era repository. The URL now redirects to the current project, which is the maintainer's own statement about where the work went.

Source

Evidence

Why WITHDRAWN: The URL answered 301 to https://github.com/fingerprintjs/fingerprintjs. The source moved the entry itself.

FieldValue at this printing
pushed_at—
archivedfalse
latest_release—
license.spdx_idMIT
stargazers_count—
http_status301
fetched_at2026-08-14T09:12:00Z
rubric_edition2nd, in force

Endpoint: GET https://api.github.com/repos/Valve/fingerprintjs2

Permanent redirect to fingerprintjs/fingerprintjs.

unauthenticated · 60 req/hr

A live read does not change what is printed above it. The site records that you ran it; what GitHub returned is not kept. The printed state moves only when the register is swept and a new printing is issued. raw JSON

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.

See also · superseded by · alternatives

LicenceMIT
Pushed2026-08-11
Release—
Stars1.4k
StateACTIVE
Silent3 d

BotD

ACTIVE

Browser-side bot detection library — the same team's answer to the question this whole catalogue circles.

Source

Evidence

Why ACTIVE: pushed_at = 2026-08-11 — 3 days, within the 90-day ACTIVE threshold.

FieldValue at this printing
pushed_at2026-08-11
archivedfalse
latest_release—
license.spdx_idMIT
stargazers_count1400
http_status200
fetched_at2026-08-14T09:12:00Z
rubric_edition2nd, in force

Endpoint: GET https://api.github.com/repos/fingerprintjs/BotD

unauthenticated · 60 req/hr

A live read does not change what is printed above it. The site records that you ran it; what GitHub returned is not kept. The printed state moves only when the register is swept and a new printing is issued. raw JSON

LicenceMIT
Pushed2026-07-17
Releasev1.10.1 · 2026-07-17
Stars1.1k
StateACTIVE
Silent28 d

ThumbmarkJS

ACTIVE

Independent open-source fingerprinting library with a published component breakdown.

Source

Evidence

Why ACTIVE: pushed_at = 2026-07-17 — 28 days, within the 90-day ACTIVE threshold.

FieldValue at this printing
pushed_at2026-07-17
archivedfalse
latest_releasev1.10.1 · 2026-07-17
license.spdx_idMIT
stargazers_count1100
http_status200
fetched_at2026-08-14T09:12:00Z
rubric_edition2nd, in force

Endpoint: GET https://api.github.com/repos/thumbmarkjs/thumbmarkjs

unauthenticated · 60 req/hr

A live read does not change what is printed above it. The site records that you ran it; what GitHub returned is not kept. The printed state moves only when the register is swept and a new printing is issued. raw JSON

See also · superseded by · alternatives

LicenceApache-2.0
Pushed2023-01-08
Release—
Stars2.2k
StateDEAD
Silent1314 d

ClientJS

DEAD[DEAD]

An early general-purpose fingerprinting library, still linked from tutorials written after it stopped.

Source

Evidence

Why DEAD: pushed_at = 2023-01-08 — 1314 days, past the 1095-day outer threshold.

FieldValue at this printing
pushed_at2023-01-08
archivedfalse
latest_release—
license.spdx_idApache-2.0
stargazers_count2200
http_status200
fetched_at2026-08-14T09:12:00Z
rubric_edition2nd, in force

Endpoint: GET https://api.github.com/repos/jackspirou/clientjs

unauthenticated · 60 req/hr

A live read does not change what is printed above it. The site records that you ran it; what GitHub returned is not kept. The printed state moves only when the register is swept and a new printing is issued. raw JSON

See also · superseded by · alternatives

LicenceMIT
Pushed2026-06-11
Release—
Stars2.5k
StateACTIVE
Silent64 d

CreepJS (source)

ACTIVE

The source behind the test page. Worth reading as a catalogue of lie-detection techniques in itself.

Source

Evidence

Why ACTIVE: pushed_at = 2026-06-11 — 64 days, within the 90-day ACTIVE threshold.

FieldValue at this printing
pushed_at2026-06-11
archivedfalse
latest_release—
license.spdx_idMIT
stargazers_count2500
http_status200
fetched_at2026-08-14T09:12:00Z
rubric_edition2nd, in force

Endpoint: GET https://api.github.com/repos/abrahamjuliot/creepjs

unauthenticated · 60 req/hr

A live read does not change what is printed above it. The site records that you ran it; what GitHub returned is not kept. The printed state moves only when the register is swept and a new printing is issued. raw JSON

LicenceMIT
Pushed2026-08-09
Release—
Stars554
StateACTIVE
Silent5 d

detectIncognito

ACTIVE

Private-browsing detection across engines; a narrow surface maintained properly.

Source

Evidence

Why ACTIVE: pushed_at = 2026-08-09 — 5 days, within the 90-day ACTIVE threshold.

FieldValue at this printing
pushed_at2026-08-09
archivedfalse
latest_release—
license.spdx_idMIT
stargazers_count554
http_status200
fetched_at2026-08-14T09:12:00Z
rubric_edition2nd, in force

Endpoint: GET https://api.github.com/repos/Joe12387/detectIncognito

unauthenticated · 60 req/hr

A live read does not change what is printed above it. The site records that you ran it; what GitHub returned is not kept. The printed state moves only when the register is swept and a new printing is issued. raw JSON

LicenceMIT
Pushed2026-04-25
Release—
Stars602
StateSEMI
Silent111 d

Broprint.js

SEMI

Small canvas- and audio-based visitor identifier.

Source

Evidence

Why SEMI: pushed_at = 2026-04-25 — 111 days, inside the 90–365 day SEMI band.

FieldValue at this printing
pushed_at2026-04-25
archivedfalse
latest_release—
license.spdx_idMIT
stargazers_count602
http_status200
fetched_at2026-08-14T09:12:00Z
rubric_edition2nd, in force

Endpoint: GET https://api.github.com/repos/Rajesh-Royal/Broprint.js

unauthenticated · 60 req/hr

A live read does not change what is printed above it. The site records that you ran it; what GitHub returned is not kept. The printed state moves only when the register is swept and a new printing is issued. raw JSON


A collector is a specification of the attack surface

Every entry in this section is, in effect, a published list of the surfaces that currently carry signal: which canvas operations, which audio graph, which font enumeration, which storage quirk. The larger libraries maintain that list against browser changes, which makes their component inventories the closest thing this field has to a current specification of what is readable.

That is why this section is worth reading even if you never ship a collector. The defence you build is bounded by the surfaces you know about, and no defensive project publishes as complete an inventory as an offensive one has to.

Open collector, commercial identifier, and the gap between them

Several entries here are the open-source component of a commercial product, and the relationship is worth stating plainly: the free library is a subset of what the paid service reads, and the vendors document it as such. Reading the open version tells you a great deal about the technique and rather less about the product built on it, which typically adds server-side signals, network characteristics and a history the library has no access to.

The other pattern in this section is decay. A general-purpose fingerprinting library from the era when the technique was being popularised is measuring the browser of another decade, and it is still linked from tutorials written long after it stopped moving. Those entries are kept here with their dates attached rather than removed, because that is the whole point of a dated register.


State marks used in this section


Questions about fingerprinting libraries

Answered from the fields printed above, and from nothing this register has not checked.

What does a browser fingerprinting library actually collect?

Varies by library, and the ones worth reading publish a component breakdown. Common ground: canvas and WebGL rendering output, audio processing output, font enumeration, screen and hardware metrics, timezone and locale, and a set of behavioural quirks that differ between engines. The component lists in this section are the current answer.

Is the open-source version the same as the commercial product?

No. Where an entry here is the open component of a commercial identifier, the vendor documents the paid product as reading more — including signals no browser-side library can reach. This register records that relationship and does not treat the two as equivalent.

Can I use these libraries to test my own anti-detect setup?

Yes, and it is one of the more useful things in this catalogue to do. Running a collector you can read against your own build tells you which surfaces your defence actually covers, rather than which surfaces a hosted test page happened to check.


Donut Browser is filed in section 01 of this same catalogue, under the same rubric, with the same fields printed against it and no exemption: an open-source anti-detect browser under AGPL-3.0 whose Wayfern Chromium fork applies fingerprint overrides at engine level over CDP rather than by patching page JavaScript, with a local REST API and MCP server on your own machine, self-hostable sync, zero telemetry, and a pre-launch gate that refuses to start a profile when the proxy's exit geography contradicts the profile's fingerprint. It is judged here the same way everything in this section is judged.

Download Donut Browser

curl -fsSL https://donutbrowser.com/install.sh | sh

macOS · Windows · Linux · Nix. Desktop only. Source, AGPL-3.0 · Its entry · The rubric · The data, CC0 · The keepers' disclosure

Other sections