Catalogue · Section 07 · Entry
p0f
DEAD
p0f is a C project catalogued in section 07 of this register. Classic passive OS fingerprinting from TCP/IP behaviour. The technique predates all of this and still works. It reads DEAD at the last field check, and it is still listed as live by registries that do not check. The status and the instant it was read at are both printed below.
The fields this state was derived from
| 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 |
| endpoint | GET https://api.github.com/repos/p0f/p0f |
| 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 DEAD
pushed_at = 2019-07-09 — 2593 days, past the 1095-day outer threshold.
Unreachable, or untouched past the outer threshold.
Under the superseded first edition
Unchanged: the first edition read DEAD from the same fields.
The rubric in force · The superseded first edition · Errata leaf
What p0f actually does
Passive operating-system fingerprinting from TCP/IP stack behaviour alone — window sizes, option ordering, timing — requiring no cooperation from the client and no application-layer data at all.
What p0f's maintenance signals mean
pushed_at reads 2019-07-09 — 2593 days, about 7.1 years, past the 1095-day outer threshold. Three years is where this register stops describing a repository as merely quiet.
DEAD in this catalogue is a statement about a measurement, not an obituary. The code is still there and may still compile; what has stopped is anybody attending to it. Read that against what the project is for. A passive fingerprinting reference from a decade ago can be entirely current as a description of a technique while being entirely unmaintained as software, and this register prints the second fact without implying the first.
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 p0f sits in this catalogue
p0f 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: nginx-http2-fingerprint (DEAD), mitmproxy (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.
Its licence field is empty, and this register treats that as a finding rather than a gap — see every entry here that declares no licence. Source you can read is not source you have been granted the right to use, modify or redistribute, and an absent licence file means exactly that absence and nothing friendlier. It is also grouped with everything else the rubric marks DEAD.
Substitutes for the same job, with no claim that either is better: JA4+. The alternative relation is symmetric and carries no ranking, because this register publishes no ranking of any kind. The full p0f comparison table sets all of them side by side on licence, push date, release cadence and state.
What to settle before you adopt p0f
The technique predates every browser-level concern in this catalogue and still works, which is the point of listing it. The code itself has not moved in years and declares no licence, so treat it as a reference rather than a dependency.
Questions readers ask about p0f
Answered from this entry's own fields, at the field check printed above and at no other instant.
Is p0f still maintained?
At the 2026-08-14 field check this register read pushed_at as 2019-07-09 and the archive flag as false, and the rubric in force turned those into DEAD. Unreachable, or untouched past the outer threshold. 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 p0f?
JA4+ 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 p0f under?
None is declared. That is a finding, not a formatting problem: without a licence file there is no grant to use, modify or redistribute the code, however openly it is published. Every entry here in the same position is listed together for that reason.
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.