SPDX License Identifier Checker
WebEverything runs locally in your browser — nothing is uploaded
One SPDX identifier per line, each with a verdict: is it valid, what is the canonical spelling, is it deprecated, is it OSI approved, is it permissive or copyleft, and must the copyright and license notice be kept. The focus is case: SPDX identifiers are case-sensitive, so the canonical form is `Apache-2.0`, not `apache-2.0` — and ecosystems such as npm and pip often do not check, so a misspelled identifier installs and runs until a compliance scan or SBOM tool rejects it. That is why the exact canonical spelling is given here. Deprecation is spelled out too: `GPL-2.0` is deprecated and is now written `GPL-2.0-only`; `GPL-2.0+` and `GPL-2.0-or-later` mean the same, with the former deprecated. A curated table of about seventy common licenses ships with the page, holding only fields the author can confirm — so “not found” means “outside this table”, not “does not exist”. Everything runs locally in your browser.
Features
- Case-sensitive checking, with the exact canonical spelling when you get it wrong
- Valid and deprecated are separated: a deprecated identifier is still a valid one
- Deprecated entries point to the current replacement (GPL-2.0 to GPL-2.0-only)
- Explains `GPL-2.0+` vs `GPL-2.0-or-later` and `GPL-2.0` vs `GPL-2.0-only`
- Marks whether OSI (Open Source Initiative) approved the license
- Copyleft level: permissive, weak (file-level), strong, or network (AGPL)
- Marks whether the copyright and license notice must be kept
- About seventy common licenses: MIT, Apache, BSD, GPL, LGPL, AGPL, MPL, ISC, CC0, EPL, Artistic, Zlib, BSL, WTFPL and more
- One identifier per line, so a whole list can be checked at once
- SPDX expressions such as MIT OR Apache-2.0 are flagged for splitting
How to use
- Paste one SPDX identifier per line
- Each line gets a verdict and its details
- A case mistake is pointed out with the canonical spelling
- Use the row copy button to take a single result
FAQ
- What is the difference between `GPL-2.0` and `GPL-2.0-only`?
- `GPL-2.0` is the old, deprecated form, because it is ambiguous: it could mean “GPL 2.0 only” or “GPL 2.0 or later”. Current SPDX splits it into two unambiguous identifiers, `GPL-2.0-only` and `GPL-2.0-or-later`. Write one of those in new projects; which one depends on the grant you intend.
- Are `GPL-2.0+` and `GPL-2.0-or-later` the same?
- Same meaning, but `GPL-2.0+` is deprecated. The trailing `+` is the old “or later” notation; current SPDX asks for `-or-later`, which reads better and cannot be confused with other symbols. The tool marks `GPL-2.0+` as deprecated and points you to `GPL-2.0-or-later`.
- What is the difference between weak and strong copyleft?
- Weak copyleft (LGPL, MPL, EPL and friends) usually applies per file: only if you modify that file and redistribute it must you release the changes under the same license; linking it into a closed program is normally fine. Strong copyleft (GPL) applies to the whole work: if you distribute a program linked with GPL code, the whole program must be under the GPL. Network copyleft (AGPL) goes further: even without distributing, merely offering the program over a network requires you to provide the source.
- Why can I not find some licenses here?
- This is a hand-curated table of roughly seventy common licenses, limited to fields the author can confirm. The official SPDX list has over six hundred identifiers, many of them obscure licenses and exceptions. Mislabeling a strong copyleft license as permissive costs far more than not finding it, so the table is deliberately narrow — when it is missing, check the official SPDX list rather than assuming the identifier does not exist.
- Is any of this uploaded?
- No. The whole license table lives in the page and the check runs locally in your browser. No request is made and no API is queried, so it works offline.
Related tools
Compose ↔ docker run
WebConvert both ways between compose services and docker run. Keys without an equivalent are listed with the reason, never silently dropped.
security.txt Parser
WebParse a security.txt: list the contacts, the expiry and other fields, and say plainly whether the file is still valid and where it breaks the RFC.
JS Unpacker
EncodingUnpack eval(function(p,a,c,k,e,d){…}) compressed code, or pack it back. Pure string manipulation — no script is ever executed.
URL Parser
WebParse a URL into scheme, host, port, path, query parameters and fragment, with each parameter shown raw and decoded. Runs entirely in your browser.
User-Agent Parser
WebParse a user agent into browser, version, OS, device type and engine, and see which rules matched. Pattern matching only. Runs entirely in your browser.
HTTP Status Codes
WebLook up an HTTP status code for its meaning, 1xx–5xx class, typical uses and common traps. Runs entirely in your browser.