The link check returned 400 or worse, did not complete at all, or the repository has been untouched for more than three years. Listed on purpose: an entry marked dead is more useful than a live-looking link nobody checked.
The rule that sets it, second edition:
the last HTTP check returned 400 or worse, or did not complete — or the repository has no push within 1095 days.
Why DEAD: The link check returned 502 at 2026-08-14T09:12:00Z. DEAD is tested first.
Field
Value at this printing
http_status
502
fetched_at
2026-08-14T09:12:00Z
rubric_edition
2nd, in force
Endpoint: HEAD https://arh.antoinevastel.com/bots/areyouheadless
Bad Gateway. No earlier observation in this register, so no down-since date is printed.
No repository, so there is no API field to re-read from a browser. A cross-origin liveness check has to be made server-side; this entry's status comes from the register's own sweep.
Listed precisely because other registries still list it without checking. A dead entry that is marked dead is more useful than a live entry nobody verified. — ED.
Why DEAD: The link check returned no response at all at 2026-08-14T09:12:00Z. DEAD is tested first.
Field
Value at this printing
http_status
no response
fetched_at
2026-08-14T09:12:00Z
rubric_edition
2nd, in force
Endpoint: HEAD https://www.deviceinfo.me/
Connection failure — no HTTP response at all, from two attempts.
No repository, so there is no API field to re-read from a browser. A cross-origin liveness check has to be made server-side; this entry's status comes from the register's own sweep.
Why DEAD: pushed_at = 2023-01-08 — 1314 days, past the 1095-day outer threshold.
Field
Value at this printing
pushed_at
2023-01-08
archived
false
latest_release
—
license.spdx_id
Apache-2.0
stargazers_count
2200
http_status
200
fetched_at
2026-08-14T09:12:00Z
rubric_edition
2nd, 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
Why DEAD: pushed_at = 2021-08-14 — 1826 days, past the 1095-day outer threshold.
Field
Value at this printing
pushed_at
2021-08-14
archived
false
latest_release
—
license.spdx_id
null (none declared)
stargazers_count
40
http_status
200
fetched_at
2026-08-14T09:12:00Z
rubric_edition
2nd, in force
Endpoint: GET https://api.github.com/repos/Xetera/nginx-http2-fingerprint
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 DEAD: pushed_at = 2019-07-09 — 2593 days, past the 1095-day outer threshold.
Field
Value at this printing
pushed_at
2019-07-09
archived
false
latest_release
—
license.spdx_id
null (none declared)
stargazers_count
521
http_status
200
fetched_at
2026-08-14T09:12:00Z
rubric_edition
2nd, in force
Endpoint: GET https://api.github.com/repos/p0f/p0f
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
Test pages rot faster than repositories, and the anti-detect field has an unusually long memory: a detection page written years ago gets cited in a tutorial, the tutorial gets quoted in an answer, the answer gets copied into a list, and the list gets forked. By the time the host stops answering, the address has more inbound references than most live projects. Nobody in that chain ever re-requests it.
So this register requests it, records the status code and the instant, and prints both. That is the entire mechanism, and it is the one capability no undated list in this category has.
Two different things produce DEAD, and they are not the same finding
The first is an address that failed: 400 or worse, or a request that did not complete at all. That clause is tested before every other rule in the rubric, because an unreachable address cannot be rescued by a healthy licence field or a recent tag. The second is a repository whose liveness field is past 1095 days — three years, which is where this register stops describing a repository as merely quiet.
Neither is an obituary. Code that has not been touched in three years may still compile and a technique described a decade ago may still be entirely current; what has stopped is anyone attending to it. Where an address failed, the honest thing to do is check it yourself: it is printed on the entry page with the status beside it, and if it answers for you, this register is wrong and the correction is an errata entry against a named edition.
Questions about the DEAD mark
Answered from the rule printed above, and from the fields it reads.
Why does this registry list dead links at all?
Because deletion loses the finding. The entries here are still recommended by lists that do not check, and a row carrying a status code and a check timestamp is more useful to a reader than a silent omission — or than a live-looking link nobody has requested in years.
What makes an entry DEAD in this registry?
Either an address that returned 400 or worse or did not complete at all at the field check, or a repository whose liveness field is more than 1095 days before it. The first clause is tested before every other rule in the rubric.
The link works for me. Is the registry wrong?
Possibly, and that is a usable answer rather than an embarrassing one. The status, the endpoint and the instant of the check are all printed on the entry page precisely so the claim can be falsified. A host that refuses the sweep and answers a browser is a real and common case, and it is recorded as a refusal on the field log rather than hidden.
Every row on this page is a project someone once chose, and the state
beside it is the part that was invisible at the moment of choosing.
Donut Browser is filed in section
01 under the same rule, with the same fields printed against it and
no exemption of any kind: an open-source anti-detect browser under
AGPL-3.0, with engine-level fingerprint spoofing through the Wayfern
Chromium fork rather than injected JavaScript, a local REST API and MCP
server on your own machine, 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. If it stops shipping, this
rubric marks it without anyone's permission.