Catalogue · Section 02 · Entry
undetected-chromedriver
NRND
undetected-chromedriver is a Python project catalogued in section 02 of this register. Patched Selenium ChromeDriver. Twelve thousand stars of momentum behind a project whose author has moved to a successor. It reads NRND — not recommended for new designs. It very probably still works; the register's position is that it is not where you should start, and the clause that produced that is printed further down this page.
https://github.com/ultrafunkamsterdam/undetected-chromedriver
The fields this state was derived from
| Field | Value at this printing |
|---|---|
| pushed_at | 2025-07-05 |
| archived | false |
| latest_release | — |
| license.spdx_id | GPL-3.0 |
| stargazers_count | 12800 |
| http_status | 200 |
| fetched_at | 2026-08-14T09:12:00Z |
| endpoint | GET https://api.github.com/repos/ultrafunkamsterdam/undetected-chromedriver |
| rubric_edition | 2nd, in force since 2026-08-14 |
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 NRND
pushed_at = 2025-07-05 — 405 days, inside the 365–1095 day NRND band.
Not Recommended for New Designs. Works; do not start here.
Under the superseded first edition
SEMI
NRND
pushed_at = 2025-07-05 — 405 days, inside the 180–1095 day SEMI band.
The rubric in force · The superseded first edition · Errata leaf
What undetected-chromedriver actually does
A patched Selenium ChromeDriver that rewrites the driver binary's identifying strings and adjusts the launch so the usual webdriver tells are absent. It is the entry point most tutorials in this field still name.
What undetected-chromedriver's maintenance signals mean
pushed_at reads 2025-07-05 — 405 days, or just over a year, before the field check, which places it inside the 365-to-1095-day band the rubric calls NRND.
NRND is borrowed intact from the electronic component catalogues, where it means Not Recommended for New Designs, and it is the most useful state in this register precisely because it is not a synonym for broken. The part is still in the catalogue. You can still buy it. If you are designing something new, do not design it in. Applied here: what this project does, it very likely still does. Starting a new build on it means inheriting a maintenance gap you did not create and cannot close.
No release was captured for this entry, which this register records as unknown rather than as none. The distinction matters more than it looks: a project with no tags and a project whose tags the sweep failed to read produce the same blank cell, and printing them as the same fact would be the register asserting something it has not measured.
Where undetected-chromedriver sits in this catalogue
undetected-chromedriver 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: rebrowser-patches (NRND), CDP-Patches (ARCHIVED), nodriver (SEMI). 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 GPL-3.0, alongside the rest of the GPL-3.0 entries in this register, and it sits with everything else currently marked NRND. 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.
This register records that nodriver supersedes undetected-chromedriver. Supersession here is declared, never inferred: it is printed only where a project or its author says so, because "newer" and "replaces" are not the same relation and treating them as one is how a list starts recommending rewrites nobody asked for.
Substitutes for the same job, with no claim that either is better: SeleniumBase (UC Mode). The alternative relation is symmetric and carries no ranking, because this register publishes no ranking of any kind. The full undetected-chromedriver comparison table sets all of them side by side on licence, push date, release cadence and state.
What to settle before you adopt undetected-chromedriver
Its author has moved to a successor listed in this same section, which is precisely the situation the NRND state exists to print. Working and current are different properties, and this register marks the difference rather than leaving you to infer it.
See also
| Relation | Entry | State | Last push |
|---|---|---|---|
| superseded by | nodriver | SEMI | 2026-05-13 |
| alternative to | SeleniumBase (UC Mode) | ACTIVE | 2026-08-14 |
Full comparison of undetected-chromedriver and its alternatives
Questions readers ask about undetected-chromedriver
Answered from this entry's own fields, at the field check printed above and at no other instant.
Is undetected-chromedriver still maintained?
At the 2026-08-14 field check this register read pushed_at as 2025-07-05 and the archive flag as false, and the rubric in force turned those into NRND. Not Recommended for New Designs. Works; do not start here. The clause that fired is printed on this page, so you can check the arithmetic rather than take the word.
What replaced undetected-chromedriver?
nodriver, and only because that succession is declared rather than guessed. This register never infers that one project replaces another from dates alone. The comparison table prints both on the same fields.
What licence is undetected-chromedriver under?
GPL-3.0, read from the repository's own licence metadata at the field check rather than from a README badge. Other GPL-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 undetected-chromedriver change?
Because the rules changed, not because the world did. The same field data reads SEMI under the superseded first edition and NRND 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.
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.