How detection works
What Reporight reads
- The repository record from GitHub's REST API, including the SPDX identifier GitHub publishes from its own detector.
- The license file GitHub points to, matched in full against reference license texts — and read for an
SPDX-License-Identifierline if the project declares one there. - The root directory listing, to spot additional
LICENSE-*files,COPYING, andNOTICE.
Reporight does not scrape github.com pages, and it never touches private repositories.
Where the license knowledge comes from
Reporight matches against the ScanCode LicenseDB maintained by AboutCode: 821 SPDX identifiers with their license categories, and the full reference text of 50 licenses developers actually meet. Categories drive the family a license lands in, which is why a source-available license like SSPL is never quietly filed as open source.
That data is used under CC-BY-4.0. ScanCode Toolkit itself is Apache-2.0; Reporight does not bundle its code, only the published license data. Detection logic — the matching, scoring, and conflict handling — is Reporight's own, so mistakes here are ours, not AboutCode's.
What the deep scan does
- Downloads the repository archive once from codeload, reads it in memory, and stores nothing.
- Reads every text file: an
SPDX-License-Identifierline first, then the notice patterns that appear in file headers, then full-text matching for files that are licenses in their own right. - Attributes files with no notice of their own to the repository's license, which is how licensing actually works — so the percentages describe the whole tree.
- Flags what matters: copyleft inside a permissive project, source-available licenses, and vendored directories that carry their own terms.
Limits: 40,000 files, 120 MB of archive, and 180 seconds. A scan that hits one says so at the bottom of its report rather than quietly reporting a partial tree as the whole.
How confidence is decided
- High — the license text matches a reference license in full and GitHub's declaration agrees (or the text alone is a clean match).
- Medium — one signal is present without the other: GitHub declares a license Reporight could not verify from the text, the file declares its own SPDX identifier without carrying the full license text, or the text matches while GitHub declines to assert.
- Low — a partial match with nothing to corroborate it, a custom license, or conflicting signals.
When GitHub says one license and the file reads as another, Reporight reports a conflict and shows both. It will not quietly pick a winner.
Freshness
A repository's record is cached for 24 hours. “Rescan now” on any result page re-reads GitHub immediately, subject to fair-use throttling so Reporight stays within GitHub's API limits.
What this release does not do
- Dependency licensing. Reporight counts what manifests declare, but does not resolve those packages or read their licenses — that is a different job from scanning a tree.
- SBOM export, team policy workspaces, or CI policy checks.
- Private repositories, which need explicit OAuth consent Reporight does not yet ask for.
- Legal advice, in any form.
This is not legal advice. Your obligations depend on how you use the code and your jurisdiction. Consult counsel for production risk.