Safeguard
Compliance•

How do you build a license inventory for a client delivery?

A license inventory lists each dependency with its SPDX license identifier. How agencies generate one, find gaps, and pass questions to counsel.

Safeguard Security Team
3 min read

Generate the list from your lockfile or SBOM, record each package's license as an SPDX identifier, flag packages with a missing or unusual license, and give the result to the client with a note on who reviews meaning. The inventory is a factual record. Interpreting licenses is a job for counsel.

This is not legal advice.

Why clients ask

Clients who resell, embed or acquire software want to know what is inside it. Many procurement forms include a question about open source licenses. An inventory answers it with data instead of reassurance, and it protects the agency if the question comes up a year later.

Use standard identifiers

The SPDX License List catalogs commonly found licenses and exceptions. Each entry has a short identifier, such as MIT, Apache-2.0, BSD-3-Clause or GPL-3.0-only. Exceptions are combined with the WITH operator in expressions like GPL-2.0-or-later WITH Autoconf-exception-2.0. The list exists so everyone can refer to a license the same way, and the site recommends short identifiers in source code.

The npm documentation says package authors should specify a license, ideally with an SPDX identifier, and to use UNLICENSED for private packages with no license. Your own client-specific packages should follow that rule.

Steps

  1. Start from the committed lockfile or an SBOM generated in CI. Both list direct and transitive packages.
  2. Export the license field for each package. SBOM tools and many scanners do this.
  3. Normalize to SPDX identifiers. Map odd strings to the closest identifier and note where you were unsure.
  4. Sort into groups: permissive, weak copyleft, strong copyleft, unknown, none.
  5. Investigate unknown or none. Check the repository or ask the maintainer. A package with no license is not free to use by default.
  6. Record the date and tool.
  7. Deliver the list with the handover pack.
ColumnExample
Packageexample-package
Version1.3.0
Direct or transitiveTransitive
License (SPDX)MIT
Source of license datapackage metadata
NotesVerified in repository

Common gaps

  • Dual-licensed packages listed with an expression, such as MIT OR Apache-2.0. Keep the whole expression.
  • Metadata that disagrees with the repository's license file.
  • Fonts, images and icons, which do not appear in a package manager but have licenses too.
  • Code copied from tutorials or snippets sites.

What not to say

Do not tell a client that a license is safe or compatible with their plans. SPDX itself says it records facts and does not make legal interpretations. Describe what the license is, and recommend counsel review for anything beyond permissive.

Try it yourself

Click through it at your own pace, or open it full screen.

Open the inventory and look for the license information on each component. That is the data you will export.

Quick check

Do I need licenses for development dependencies?

List them separately. They may not ship, but some clients want the full tree.

What if a package has no license?

Treat it as a gap to resolve before delivery: contact the maintainer or replace it.

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.