SPDX License Matcher
A Python tool which takes the license text from the user, compares it with the SPDX License List using an algorithm which finds close matches and returns differences if the input license text is found to be a close match.
A Redis (or Valkey) server is used to store the license texts.
Requires Python 3.9+ and Java 11+ (for SPDX Java Tools).
Usage
spdx-license-matcher -f filename -t threshold
filenameis the file with the license text (required)thresholdis a value up to which we will just won't consider a match (optional; default: 0.9)
Run spdx-license-matcher --help for more info.
(For the very first time it may take a while to build the license.)
Installation
pipx install license-matcher
Or with uv:
uv tool install license-matcher
The package bundles SPDX Java Tools. No separate jar download needed.
To use a different jar version,
set the SPDX_TOOLS_JAR environment variable to its path before running.
Install Redis/Valkey
Redis/Valkey stores the pre-processed SPDX License List. Install it once, then keep it running while using the tool.
-
Linux
sudo apt-get install redis-server
-
macOS
brew install redis brew services start redis
-
Windows
Download from microsoftarchive/redis and install.
Verify installation
Verify Redis is running: redis-cli ping should return PONG.
By default, the tool connects to Redis at localhost:6379.
Set SPDX_REDIS_HOST to override the hostname.
Development Installation
-
Clone the repository
git clone https://github.com/spdx/spdx-license-matcher.git cd spdx-license-matcher
-
Install in editable mode
pip install -e .
Workflow
The workflow of the tool is as follows:
-
Reads the license text as input from the user.
-
Build a Redis/Valkey database with all the license text present on the SPDX License List.
-
Compare the license text with the license text present in the database.
- Normalizes the license text based on the SPDX Matching guidelines while ignore the replaceable text and only focusing on substantial text for matching purposes.
- Tokenizes the normalized text into a list of bigrams. This is necessary for the token-based algorithm we are using for our use case.
- Use a token based similarity metric algorithm namely Sørensen-Dice algorithm which is based on the logic to find the common tokens, and divide it by the total number of tokens present by combining both of the sets. This algorithm helps us to distinguish our close matches.
- A threshold value is used where we just won't consider a match.
- If the match is 100% then we say it's a perfect match.
- If the match is between a threshold value and 100% then we apply the
full matching algorithms and compares the closely matched license text
to the license text of SPDX Standard License using a method
present in the SPDX tools.
- If there is a match then the given license text matches with the SPDX standard license.
- If there is no match then we simply display the differences of the given license text with that of SPDX License List.
History
- This project started as a Google Summer of Code 2019 project, with contribution from @ugtan.
- Now maintained by the SPDX community and updated for Python 3.
- See SPDX's participation in Google Summer of Code (GSoC): https://github.com/spdx/GSoC.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file license_matcher-2.11.1.tar.gz.
File metadata
- Download URL: license_matcher-2.11.1.tar.gz
- Upload date:
- Size: 55.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
76e970a1bb538d6ccdb98bf9d779970ff3d338d8a4188d7d3b1cb006d5f934b8
|
|
| MD5 |
e059876b1fd4878bca47c4694bd8fd62
|
|
| BLAKE2b-256 |
91b5ba5b5461a759426374497a6f2ebe654b69d036b0ce7984a81a865a5bf880
|
Provenance
The following attestation bundles were made for license_matcher-2.11.1.tar.gz:
Publisher:
pypi-publish.yml on spdx/spdx-license-matcher
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
license_matcher-2.11.1.tar.gz -
Subject digest:
76e970a1bb538d6ccdb98bf9d779970ff3d338d8a4188d7d3b1cb006d5f934b8 - Sigstore transparency entry: 2456671540
- Sigstore integration time:
-
Permalink:
spdx/spdx-license-matcher@eff1fe1198cefea80efb9059639d29c20491694b -
Branch / Tag:
refs/tags/v2.11.1 - Owner: https://github.com/spdx
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@eff1fe1198cefea80efb9059639d29c20491694b -
Trigger Event:
release
-
Statement type:
File details
Details for the file license_matcher-2.11.1-py3-none-any.whl.
File metadata
- Download URL: license_matcher-2.11.1-py3-none-any.whl
- Upload date:
- Size: 55.6 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
879730158dde1e52744eb4ac6830fdd7634d1fc048585ffeecd139dc65780fac
|
|
| MD5 |
c9ece4e4481c83b21928d9a918e3388d
|
|
| BLAKE2b-256 |
1bb1628b672db516aa8fffa800027e514d43cae7ca172cf2ba83134323f98b25
|
Provenance
The following attestation bundles were made for license_matcher-2.11.1-py3-none-any.whl:
Publisher:
pypi-publish.yml on spdx/spdx-license-matcher
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
license_matcher-2.11.1-py3-none-any.whl -
Subject digest:
879730158dde1e52744eb4ac6830fdd7634d1fc048585ffeecd139dc65780fac - Sigstore transparency entry: 2456671694
- Sigstore integration time:
-
Permalink:
spdx/spdx-license-matcher@eff1fe1198cefea80efb9059639d29c20491694b -
Branch / Tag:
refs/tags/v2.11.1 - Owner: https://github.com/spdx
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
pypi-publish.yml@eff1fe1198cefea80efb9059639d29c20491694b -
Trigger Event:
release
-
Statement type: