Catalogue · Section 07 · Entry
uTLS
ACTIVE
uTLS is a Go project catalogued in section 07 of this register. Go TLS library that lets you choose your ClientHello. The foundation almost everything in this section stands on. It reads ACTIVE at the last field check — its most recent push was 12 days before that check, inside the 90-day threshold the rubric in force prints.
https://github.com/refraction-networking/utls
The fields this state was derived from
| Field | Value at this printing |
|---|---|
| pushed_at | 2026-08-02 |
| archived | false |
| latest_release | v1.8.2 · 2026-08-02 |
| license.spdx_id | BSD-3-Clause |
| stargazers_count | 2500 |
| http_status | 200 |
| fetched_at | 2026-08-14T09:12:00Z |
| endpoint | GET https://api.github.com/repos/refraction-networking/utls |
| 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 ACTIVE
pushed_at = 2026-08-02 — 12 days, within the 90-day ACTIVE threshold.
Shipping. Safe to build on today.
Under the superseded first edition
Unchanged: the first edition read ACTIVE from the same fields.
The rubric in force · The superseded first edition · Errata leaf
What uTLS actually does
A fork of Go's TLS package that lets a caller choose the exact ClientHello it emits — cipher order, extensions, curves, ALPN — instead of accepting whatever the standard library composes.
What uTLS's maintenance signals mean
The liveness field here is pushed_at, read as 2026-08-02 against a field check 12 days later. That is inside 90 days, and 90 days is where the second edition of the rubric put ACTIVE after moving it down from the first edition's 180.
The reason for the move is worth stating, because it is the kind of threshold that looks arbitrary until you know what it is measuring against: detection changes on a shorter cycle than half a year, so a six-month-old evasion is not a current one. What a recent push does not tell you is what was in it. A commit landing on a branch is not a release, not a fix, and not a test — it is evidence that somebody is still there.
The release field is a second and different signal. v1.8.2 was published 2026-08-02, and the gap between that date and the push date above is the interval in which work exists but has not been cut into anything you can pin a dependency to. A project that pushes constantly and tags rarely and a project that does the reverse look very different to anyone trying to depend on either.
Where uTLS sits in this catalogue
uTLS is filed in section 07, network, tls & http fingerprint tooling, whose scope is this: The layer below JavaScript: TLS ClientHello and HTTP/2 fingerprinting, impersonating clients, and the passive tooling that reads 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: uQUIC (ACTIVE), curl-impersonate (lexiforest) (ACTIVE), curl-impersonate (lwthiker) (NRND). 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 BSD-3-Clause, alongside the rest of the BSD-3-Clause entries in this register, and it sits with everything else currently marked ACTIVE. 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.
What to settle before you adopt uTLS
Almost everything else in this section stands on it, directly or by imitation, so understanding its ClientHello specification model pays off repeatedly. Browser presets age as browsers ship, so check which versions the current release fingerprints.
Questions readers ask about uTLS
Answered from this entry's own fields, at the field check printed above and at no other instant.
Is uTLS still maintained?
At the 2026-08-14 field check this register read pushed_at as 2026-08-02 and the archive flag as false, and the rubric in force turned those into ACTIVE. Shipping. Safe to build on today. The clause that fired is printed on this page, so you can check the arithmetic rather than take the word.
What else in this registry does the job uTLS does?
No substitution edge is declared for this entry, which means nobody has stated one rather than that none exists. The nearest comparison available is the rest of section 07, where everything is answering roughly the same question on the same printed fields.
What licence is uTLS under?
BSD-3-Clause, read from the repository's own licence metadata at the field check rather than from a README badge. Other BSD-3-Clause entries are grouped together, and the no-licence-declared group is worth a look before you assume any project here carries a grant.
Where does this status come from?
From one sweep, recorded with the instant it ran. The raw fields, the endpoint they were read from, the fetch timestamp and the rubric edition in force are all printed on this page, and the same row is in the CC0 data files in JSON and CSV. Recompute the state from those columns and this page must agree with you; where it does not, the register is wrong.
Section 07 is the half of a fingerprint that JavaScript cannot reach, and a browser-shaped page surface over a tool-shaped handshake is a contradiction that no amount of navigator patching fixes. Donut Browser is a real browser rather than an impersonating client, which resolves that layer by not having the problem — and it adds profile-level proxy handling with a launch gate that checks the exit's geography against the profile before anything starts.
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.