Whole Antidetect Catalog Donut Browser

Catalogue · Section 02 · Entry

nodriver

SEMI

nodriver is a Python project catalogued in section 02 of this register. The same author's successor to undetected-chromedriver: no webdriver at all, direct CDP control. It reads SEMI: alive but slowing. The liveness field this register read is about 3 months old, which is past ACTIVE and well short of the band where the rubric stops recommending it.

https://github.com/ultrafunkamsterdam/nodriver


The fields this state was derived from

FieldValue at this printing
pushed_at 2026-05-13
archived false
latest_release none published
license.spdx_id AGPL-3.0
stargazers_count 4700
http_status 200
fetched_at 2026-08-14T09:12:00Z
endpoint GET https://api.github.com/repos/ultrafunkamsterdam/nodriver
rubric_edition 2nd, in force since 2026-08-14
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

Why it reads SEMI

pushed_at = 2026-05-13 — 93 days, inside the 90–365 day SEMI band.

Alive but slowing. Watch it.

Under the superseded first edition

ACTIVE SEMI
pushed_at = 2026-05-13 — 93 days, within the 180-day ACTIVE threshold.

The rubric in force · The superseded first edition · Errata leaf


What nodriver actually does

The same author's replacement approach: drop webdriver entirely and speak CDP directly, which removes the driver binary as a component that can be fingerprinted at all.

What nodriver's maintenance signals mean

pushed_at reads 2026-05-13, which is 93 days before the field check and therefore inside the 90-to-365-day band this rubric calls SEMI. SEMI is the first edition's ACTIVE bucket after it was split in two, and the split exists because a quarter of silence in this field is a fact worth printing rather than absorbing.

A SEMI entry is not a warning and not a recommendation. It is a request to look: open the commit history and see whether the gap is a maintainer between jobs, a project that has reached a stable shape and stopped needing changes, or an abandonment that has not yet crossed a threshold. All three produce the same field value, and this register cannot tell them apart — it can only make sure you know the gap is there.

There is no tagged release at all — not an uncaptured one, but none published. That is a real fact about how the project is consumed: without a tag, depending on it means depending on a branch, and a branch is a moving target. This register keeps no_releases as a field separate from a null release tag for exactly that reason, because "none exists" and "the sweep did not read one" are different claims.

Where nodriver sits in this catalogue

nodriver is filed in section 02, automation stealth plugins, patches & cdp-leak fixes, whose scope is this: Patches and plugins for Puppeteer, Playwright and Selenium, plus the proxies and cursor libraries that sit beside them. An entry sits in exactly one section here. Where a project could defensibly go in two, it is placed where a reader would look for it first rather than where it fits most tidily, and that is an editorial decision rather than a measured one.

Filed beside it in the same section: CDP-Patches (ARCHIVED), undetected-chromedriver (NRND), SeleniumBase (UC Mode) (ACTIVE). Comparing an entry against its own section-mates is more informative than comparing it against the catalogue as a whole, because everything in a section is answering roughly the same question and the differences left over are the ones that matter.

It is published under AGPL-3.0, alongside the rest of the AGPL-3.0 entries in this register, and it sits with everything else currently marked SEMI. Read those two facets together: a permissively licensed project that stopped shipping is not a safer dependency than a copyleft one that did not, and a filter on one axis alone will tell you the wrong thing.

nodriver is recorded as superseding undetected-chromedriver. Both directions of that edge are stored once and reversed at build time, so the graph cannot contradict itself — an entry cannot supersede something that does not record being superseded by it.

Substitutes for the same job, with no claim that either is better: Patchright (Python), Selenium-Driverless, SeleniumBase (UC Mode). The alternative relation is symmetric and carries no ranking, because this register publishes no ranking of any kind. The full nodriver comparison table sets all of them side by side on licence, push date, release cadence and state.

What to settle before you adopt nodriver

Dropping the driver also drops the Selenium API surface, so this is a migration rather than an upgrade. Budget for rewriting selectors and waits, not for swapping an import.


See also

Relation Entry State Last push
supersedes undetected-chromedriver NRND 2025-07-05
alternative to Patchright (Python) ACTIVE 2026-08-09
alternative to Selenium-Driverless NRND 2025-04-25
alternative to SeleniumBase (UC Mode) ACTIVE 2026-08-14

Full comparison of nodriver and its alternatives


Questions readers ask about nodriver

Answered from this entry's own fields, at the field check printed above and at no other instant.

Is nodriver still maintained?

At the 2026-08-14 field check this register read pushed_at as 2026-05-13 and the archive flag as false, and the rubric in force turned those into SEMI. Alive but slowing. Watch it. The clause that fired is printed on this page, so you can check the arithmetic rather than take the word.

What are the alternatives to nodriver?

Patchright (Python), Selenium-Driverless, SeleniumBase (UC Mode) are recorded as substitutes for the same job. The relation carries no ranking — this register publishes none — so read them side by side on the comparison table, which prints licence, last push, release cadence and state for each.

What licence is nodriver under?

AGPL-3.0, read from the repository's own licence metadata at the field check rather than from a README badge. Other AGPL-3.0 entries are grouped together, and the no-licence-declared group is worth a look before you assume any project here carries a grant.

Why did the state recorded for nodriver change?

Because the rules changed, not because the world did. The same field data reads ACTIVE under the superseded first edition and SEMI under the edition in force. Both derivations are printed on this page, and the entry appears on this printing's errata leaf with the superseded value struck rather than deleted.


Everything in section 02 is a patch applied to somebody else's automation stack, which means every one of them inherits that stack's release cadence and breaks on its own schedule. Donut Browser starts from the other end: the fingerprint handling is in the browser it ships rather than in a layer bolted onto a driver, and the local REST API and MCP server mean automation talks to it directly instead of through a patched client library.

Download Donut Browser

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

macOS (DMG, Homebrew cask donut), Windows (installer and portable), Linux (deb, rpm, AppImage, with APT and RPM repositories at repo.donutbrowser.com), and a Nix flake. Desktop only — there is no mobile build target. Ten shipped languages. Source, AGPL-3.0 · its own entry, judged by the same rubric · the keepers' disclosure.