Catalogue · Submissions
Submit an entry
8 criteria · 10 sections open
Published under CC0-1.0
153 entries in print · 20 stamped
Judged against the second edition
Anything you send is measured before it is discussed. Paste a repository below and the page reads the same two endpoints the sweep reads, puts them through the same rule the printed pages use, and shows you the entry as it would appear — licence, last push, latest release, and the state those fields produce. If the answer is a stamp you did not expect, that is the register working, and it is better to see it here than to argue about it later.
Print it before you send it
What this register lists: the ten sections
| § | Section | In print | Scope |
|---|---|---|---|
| 01 | Open-source anti-detect browsers & forks | 14 | Browsers whose source you can read: anti-detect Firefox and Chromium forks, hardened builds, and the profile managers built on top of them. |
| 02 | Automation stealth plugins, patches & CDP-leak fixes | 21 | Patches and plugins for Puppeteer, Playwright and Selenium, plus the proxies and cursor libraries that sit beside them. |
| 03 | Detection test pages & fingerprint scanners | 24 | 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. |
| 04 | Anti-bot vendors & public documentation | 13 | 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. |
| 05 | Academic papers & technical writeups | 22 | The peer-reviewed and specification-grade literature this field is built on, preferring open mirrors over publishers that block automated clients. |
| 06 | Fingerprinting libraries | 8 | The collectors themselves — the code that reads a browser. Read these to know what is being asked of you. |
| 07 | Network, TLS & HTTP fingerprint tooling | 17 | The layer below JavaScript: TLS ClientHello and HTTP/2 fingerprinting, impersonating clients, and the passive tooling that reads them. |
| 08 | Datasets, leaderboards & public statistics | 8 | Published distributions and population data. The only place in this catalogue where a percentage means anything, because someone else measured it and says how. |
| 09 | Commercial anti-detect browsers | 12 | Listed for completeness and for comparison. Closed source, so the only fields that can be checked are the ones a HTTP request returns. |
| 10 | Communities & competing registries | 14 | 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. |
The criteria, in the order they are applied
- Criterion 01 One canonical URL that answers a request The sweep has to be able to read it from where it runs. A target that refuses automated clients cannot be checked, and this register does not list what it has not checked — that is the whole difference between it and a link dump. Refusals are printed in the field log rather than hidden, so a rejection on this ground is a public one.
- Criterion 02 In scope for one of the ten sections An entry sits in exactly one section, and where it fits two it is filed where a reader would look first. The section is a curatorial decision and is not accepted from the submitter; propose one and say why.
- Criterion 03 A repository at least 30 days old The awesome.re manifesto sets 30 days as the minimum age before a list itself may be submitted; this register applies the same floor to its entries. A repository younger than that has no push history worth deriving a state from, and it is exactly the age at which a star count means least. Non-repository entries — test pages, papers, vendor documentation — are exempt, because their liveness is an HTTP status and not a history.
- Criterion 04 A licence, or the honest absence of one A missing licence is not a disqualification and it is not hidden either: license_spdx is null, the licence bucket reads "none declared", and the entry prints NO LICENCE DECLARED in plain ink. 12 entries in this printing are in that state. What is disqualifying is a licence claimed in a README that the repository's own metadata does not carry.
- Criterion 05 No state, no score, no ranking in the submission The state is derived at the sweep and cannot be supplied. Nor can a position, a rating or a comparison: this register publishes none of those about any entry, because it has tested no tool.
- Criterion 06 No detection claims presented as results A project may claim in its own README that it is undetected by some vendor. The register records that the claim was made and does not repeat it as a finding, because it has run no such test. A submission whose case rests on a detection claim will be listed on its measurable fields or not at all — and that applies to the entry the keepers of this register maintain themselves.
- Criterion 07 A fork declares what it supersedes Forks are listed, and a well-maintained fork of a quiet original is one of the most useful rows this register carries. It must declare the edge: supersedes, superseded_by or alternative_to, by slug. Those edges are what let the rubric stamp a quiet original NRND when its declared successor is shipping.
- Criterion 08 One sentence, in your own words, about what it does Not what it beats, not who it is better than. Write the sentence yourself: broken English is welcome here, generated English is not, and a sentence that reads like a product page will be rewritten to say what the thing is.
What happens to it afterwards: the clauses that stamp an entry
Listing is not an endorsement and it is not permanent good standing. Once an entry is in print, the rubric re-reads its fields at every sweep, and four of the six states carry a rubber stamp rather than plain ink. These are the clauses that produce them — the same ones printed on the rubric, restated here because a contributor should know the terms before submitting rather than after being stamped.
| Stamp | Set when | Why that threshold |
|---|---|---|
|
DEAD
Unreachable, or untouched past the outer threshold. |
the last HTTP check returned 400 or worse, or did not complete — or the repository has no push within 1095 days | Tested first, because an unreachable URL cannot be rescued by any other field. |
|
WITHDRAWN
The source itself says this moved. |
the URL answers with a permanent redirect to another entry | A 301 is the maintainer telling you where the work went. Nothing is inferred; the status code is the evidence. |
|
ARCHIVED
The maintainer closed it. Historical reference only. |
GitHub archived flag is true | Unchanged from the first edition, and still outranks every date rule. |
|
NRND
Not Recommended for New Designs. Works; do not start here. |
pushed 365–1095 days before the field check — or pushed more than 180 days ago while an entry in this registry declares it superseded and that successor is ACTIVE | Not Recommended for New Designs, borrowed from the component catalogues. The second clause is the one that catches undetected-chromedriver and the original curl-impersonate: both work, and neither is where you should start. |
A stamp is never a deletion. 20 of the 153 entries in this printing carry one and every one of them is still listed, with its dates attached, because "this stopped shipping on a date I can show you" is more useful to a reader than a quietly shortened list. If a stamped entry starts shipping again the next sweep un-stamps it; no appeal is needed and none is possible, since no person sets the state.
How to send it, and the licence you are sending it under
CC0-1.0, and deliberately not MIT, BSD or GPL. The awesome.re manifesto requires a list to carry a CC0-style licence, on the reasoning that a curated index is a set of facts rather than a work to be licensed like software, and this register agrees with that reasoning: everything on the data page — the JSON, the CSV and the plain-text README — is waived into the public domain, with no attribution required. Sending a row means waiving your rights in that row's data on the same terms. It says nothing about the project the row points at, which stays under its own licence and is recorded in license_spdx exactly as its repository declares it.
The CC0 repository this register will be published from is not open yet, so there is no pull request to file and this page will not link to one that does not exist. Until it opens, send the generated row and stub by mail, with the section you think it belongs in and one sentence on why.
contact@donutbrowser.com · Corrections to an existing entry go to the same address and are printed on the errata leaf with the field that moved.
The tool runs in your browser and reads GitHub's public API unauthenticated. This site records the repository you checked, with the visit (see privacy); the only submission is the mail you choose to send. There is no account, no queue and no dashboard.
What gets refused, and why the refusal is printed
9 targets were attempted for this printing and could not be read — forums and communities that refuse automated clients, a publisher that blocks them, a documentation host behind SSO. None of them is listed, because listing them would mean asserting a liveness this register could not check. All of them are printed, with the outcome and the reason, in the field check log. If you can confirm one of those by hand and are willing to be named as the person who did, that is a contribution this register wants more than another repository.
The disclosure that applies to your entry and to ours
This register is kept by people who work on Donut Browser, which is listed in section 01 under the same rule as everything else and would be stamped by the same clauses printed above if it went quiet. Its fields were read at 2026-08-14T09:12:00Z like every other row. It is an open-source anti-detect browser under AGPL-3.0, with engine-level fingerprint spoofing through the Wayfern Chromium fork rather than JavaScript patching, a local REST API and MCP server, self-hostable sync, and a pre-launch gate that refuses to start a profile when the proxy's exit geography contradicts the profile's fingerprint.
curl -fsSL https://donutbrowser.com/install.sh | sh
macOS · Windows · Linux · Nix. Desktop only. Source, AGPL-3.0 · The full disclosure is in the colophon
Questions about contributing an entry
What a submission may and may not carry, answered against the rules printed above.
Can I submit the maintenance state for my own entry?
No. No submitter, maintainer or vendor sets a state on this register. The state is derived by the rubric from measured fields — days since the last push, the latest tagged release, the archived flag and an HTTP check — at the next sweep, and it moves again on its own whenever those fields move.
What licence does this registry require for contributions?
CC0-1.0. The awesome.re manifesto requires a list to be published under a CC0-style licence rather than MIT, BSD or GPL, and this one is. Contributing a row waives your rights in the row's data, not in the project it points at, which stays under its own licence.
Will a project be removed when it stops being maintained?
No. Nothing is deleted when it stops shipping; it is stamped. An entry that has not been pushed to in 365 days is stamped NRND, past 1095 days it is stamped DEAD, and an archived repository is stamped ARCHIVED on the maintainer's own statement. The entry stays in print with its dates attached, and you can read the ones currently stamped to see what that looks like.
What gets an entry rejected from this registry?
An address the sweep cannot read. Several widely-cited targets refused every request path available and are therefore not listed at all — the attempt and the outcome are recorded on the field log instead, because "we tried and failed" is a field too. Nothing is listed here that has not been checked.
Does a submission need a GitHub repository?
No, but the fields that exist depend on it. A repository entry carries a push date, a release tag, an archived flag and an SPDX licence; an entry with only an address carries an HTTP status and the instant it was read. Both are stated, and the rubric prints a separate clause for the second case.
The tool above will happily print a stamp on a repository whose author is about to email us about it. That is the point: a register that softens a verdict for the people who talk to it is worth nothing to the people who do not. — ED.