NOASSERTION means a licence file exists and automated identification could not match it to a known SPDX identifier. It is not the same as no licence: there are terms, and you have to read them yourself, which is precisely why this register keeps it as a distinct value rather than folding it into either neighbour.
Filed under the SPDX identifier GitHub reports for the repository,
not under what the README claims. NOASSERTION means a licence file
exists that GitHub could not match to an SPDX identifier — read it
before you depend on it.
Why NRND: pushed_at = 2025-04-25 — 476 days, inside the 365–1095 day NRND band.
Field
Value at this printing
pushed_at
2025-04-25
archived
false
latest_release
—
license.spdx_id
NOASSERTION
stargazers_count
861
http_status
200
fetched_at
2026-08-14T09:12:00Z
rubric_edition
2nd, in force
Endpoint: GET https://api.github.com/repos/ttlns/Selenium-Driverless
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 ACTIVE: pushed_at = 2026-07-22 — 23 days, within the 90-day ACTIVE threshold.
Field
Value at this printing
pushed_at
2026-07-22
archived
false
latest_release
—
license.spdx_id
NOASSERTION
stargazers_count
12300
http_status
200
fetched_at
2026-08-14T09:12:00Z
rubric_edition
2nd, in force
Endpoint: GET https://api.github.com/repos/g1879/DrissionPage
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 ACTIVE: pushed_at = 2026-08-06 — 8 days, within the 90-day ACTIVE threshold.
Field
Value at this printing
pushed_at
2026-08-06
archived
false
latest_release
—
license.spdx_id
NOASSERTION
stargazers_count
1400
http_status
200
fetched_at
2026-08-14T09:12:00Z
rubric_edition
2nd, in force
Endpoint: GET https://api.github.com/repos/openwpm/OpenWPM
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 ACTIVE: pushed_at = 2026-07-21 — 24 days, within the 90-day ACTIVE threshold.
Field
Value at this printing
pushed_at
2026-07-21
archived
false
latest_release
—
license.spdx_id
NOASSERTION
stargazers_count
2000
http_status
200
fetched_at
2026-08-14T09:12:00Z
rubric_edition
2nd, in force
Endpoint: GET https://api.github.com/repos/FoxIO-LLC/ja4
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
Licence is FoxIO's own, not an OSI identifier. GitHub reports NOASSERTION and so does this register — read the file before you vendor it. — ED.
Why ACTIVE: pushed_at = 2026-07-28 — 17 days, within the 90-day ACTIVE threshold.
Field
Value at this printing
pushed_at
2026-07-28
archived
false
latest_release
—
license.spdx_id
NOASSERTION
stargazers_count
8061
http_status
200
fetched_at
2026-08-14T09:12:00Z
rubric_edition
2nd, in force
Endpoint: GET https://api.github.com/repos/lorien/awesome-web-scraping
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
Three different things produce this value
A genuinely custom licence written for the project. A standard licence with modifications — an added clause, a changed jurisdiction, a field-of-use restriction — which is common and is the case most likely to surprise you. Or a standard licence in a form the matcher did not recognise, such as an unusual file name or a translated text.
Only the first and second have consequences, and you cannot tell which you are looking at without opening the file. That is the entire practical content of this page: NOASSERTION is an instruction to go and read something.
Why it is filed as custom rather than as permissive or copyleft
Because bucketing it either way would be a guess with legal consequences. The register's buckets are derived mechanically from the identifier, and where there is no identifier there is no derivation to make. Printing the ambiguity is more useful than resolving it incorrectly.
This register reads the identifier from the repository's own licence metadata at the field check, not from a README badge, and prints it exactly as the API returned it.
Questions about the NOASSERTION entries
Licence questions, answered from the field this register reads and from the licence texts themselves. Nothing here is legal advice.
What does NOASSERTION mean for a licence?
That a licence file exists but automated identification could not match it to a known SPDX identifier. Terms exist; they are simply not machine-classified. Open the file at the source before depending on the project.
Is NOASSERTION the same as no licence?
No, and the difference is significant. No licence declared means no grant of rights at all. NOASSERTION means there is a grant whose exact shape has not been classified, which may be entirely permissive or may carry a restriction that matters to you.
Why does this registry not classify these licences itself?
Because that would be asserting a legal conclusion it did not measure. Every bucket on this site is derived mechanically from a declared identifier; where no identifier exists, the register prints the ambiguity rather than resolving it.
Every row above was chosen by somebody who then had to establish two
separate things — whether the code was alive, and whether it was theirs
to use. Donut Browser answers the second in its own repository: an
open-source anti-detect browser under AGPL-3.0, with the desktop
application and the sync server both in that repository, engine-level
fingerprint spoofing through the Wayfern Chromium fork rather than
injected JavaScript, a local REST API and MCP server on your own
machine, zero telemetry, and a pre-launch gate that refuses to start a
profile when the proxy's exit geography contradicts the profile's
fingerprint. Its own licence row is in
this same catalogue, read at the same
field check as everything else.