Safeguard
Compliance•

How do you record a license that is not on the SPDX License List?

Use a LicenseRef identifier and keep the extracted license text with it. How the format works, uniqueness rules, and what to store in your SBOM.

Safeguard Security Team
3 min read

Record a license that is not on the SPDX License List with a LicenseRef identifier: the prefix LicenseRef followed by a hyphen and a name made of letters, numbers, periods and hyphens. Keep the extracted license text with it, so anyone reading the SBOM can see exactly what terms apply.

What the SPDX specification says

The spec describes LicenseRef as a locally unique identifier for licenses not found on the SPDX License List. Each identifier must be unique within the SPDX document. Since version 1.2 descriptive names are allowed, so LicenseRef-Whiskeyware is acceptable instead of a sequential number. You can use the identifier in the package, file and snippet sections.

When you assign an identifier, extracted text becomes conditionally mandatory. It preserves the license wording as it appeared in the package, file or snippet, and can be a short reference or the full text.

The SPDX License List itself is at version 3.29.0, dated 16 September 2026, and its identifiers are meant to be stable. Deprecated identifiers remain valid but should no longer be used.

When to use it

SituationUse
License is on the listThe standard SPDX identifier
Custom text from a vendorLicenseRef plus text
Modified standard licenseLicenseRef, explain the change
License exception not on the listCheck the exceptions list first
Several unrelated custom licensesOne LicenseRef each, unique names

Steps

  1. Check the SPDX list and exceptions list for a match. Do not invent a LicenseRef for something that already has an identifier.
  2. Save the exact license text from the package version.
  3. Choose a descriptive, unique identifier such as LicenseRef-VendorName-Terms-2026.
  4. Put the text in the extracted text field and reference the identifier in the package or file entry.
  5. Add the decision to your register. See how to handle a custom license.

CycloneDX equivalent

CycloneDX licenses use an id for SPDX identifiers or a name for others, and a license can carry its text and URL. See id, name or expression in CycloneDX.

Pitfalls

Reusing one LicenseRef for different texts destroys meaning. Leaving the text out makes the identifier a dead end. Using a LicenseRef where an SPDX identifier exists breaks automated policy matching.

Treat LicenseRef entries as a signal. A growing list of them means your dependencies or vendors use custom terms, and that deserves a conversation with legal. Review the list when you generate each release SBOM, and retire entries when you replace the component that needed them.

Safeguard generates SBOMs and scans dependencies. Try a free scan to see what your inventory looks like.

Quick check

Can two different licenses share one LicenseRef?

No. Each identifier must be unique within the document and refer to one text.

Is the text field optional?

Not when you assign an identifier. The spec makes extracted text conditionally mandatory.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.