{{ summaryTitle }} {{ summaryValue }} {{ summaryLine }} {{ badge.label }} {{ badge.value }}
Dependency license policy inputs
CSV headers may include dependency, version, license, scope, direct, owner, and path.
{{ sourceStatus }}
Auto detect supports CSV, npm license-checker JSON, CycloneDX JSON, and SPDX JSON.
Use a short label that is traceable in a release ticket or audit note.
Choose the context in which these dependencies will be used or shipped.
Pin stricter handling when source quality or expression evidence must be reviewed.
Excluded rows remain visible in evidence with the reason they left the active gate.
Formal release gates should normally review or block evidence gaps.
Keep automatic approval limited to licenses your organization has reviewed.
Use this for licenses that may be acceptable only with contextual approval.
Denied matches outrank allowed and review matches inside a required AND group.
{{ workflowFeedback }}
Leave blank to use the project label in exported evidence.
Filters only clearly allowed rows from the evidence table; the gate, counts, score, findings, chart, and exported JSON remain unchanged.
{{ hide_allowed_rows ? 'Enabled' : 'Disabled' }}
DependencyVersionScopeDirectnessLicense evidenceOutcomeGateReasonCopy
{{ row.dependency }}{{ row.version }}{{ row.scope }}{{ row.directness }}{{ row.license }}{{ row.outcome }}{{ row.gate }}{{ row.reason }}
PriorityGateDependencyLicenseFindingNext actionCopy
{{ row.priority }}{{ row.gate }}{{ row.dependency }}{{ row.license }}{{ row.finding }}{{ row.action }}
{{ exportAnnouncement }}
{{ statusAnnouncement }}

A dependency inventory answers what software is present. A license review asks a different question: what evidence describes each dependency's license, which obligations may apply in this use, and whether the organization has already approved that evidence. The answer can change between an internal service, a redistributed product, and an exploratory inventory.

License identifiers are not verdicts by themselves. The MIT identifier may already be approved under one policy, while MPL-2.0 may require notice review and GPL-3.0-only may be denied for a particular release. Missing evidence is another condition entirely. NOASSERTION means a conclusion was not supplied; it does not mean the dependency has no license obligations.

Software Package Data Exchange (SPDX) expressions preserve relationships that a flat license list loses. MIT OR GPL-3.0-only offers a choice of branches, while MIT AND GPL-3.0-only says both apply. A WITH expression attaches an exception or addition to a base license. Policy review must keep those operators intact because splitting the identifiers into unrelated words can reverse the conclusion.

Scope matters as much as the expression. A direct runtime dependency can ship with the product or execute in the service; a transitive development dependency may never reach the release surface. Excluding a row from a particular gate does not erase it from the inventory, and a clean gate does not prove the underlying bill of materials is complete.

Automated triage is most useful as a queue, not legal advice. It can apply a documented allow, review, and deny policy consistently, surface missing evidence, and show why a row was included. A qualified reviewer still needs to confirm license text, exceptions, linking or distribution facts, notices, source-offer duties, and any approved exception.

How to Use This Tool:

Use a current dependency inventory and a policy that matches the software's real use or distribution context.

  1. Paste or load the Dependency license source, then select its format or use Auto detect. Supported inputs include CSV or a simple list, npm license-checker JSON, CycloneDX JSON, and SPDX JSON.
  2. Enter a traceable project label and choose the Policy profile. Redistributed Product is stricter in the pressure score; Inventory Discovery turns denied rows into review rather than a blocking gate.
  3. Choose SPDX normalization. Tolerant aliases help with familiar noncanonical names; SPDX Strict Expressions keeps exceptions from inheriting approval unless the full expression is classified; Evidence-first Conservative turns unsupported custom or malformed terms into unknown evidence.
  4. Set Dependency reach. All Parsed Dependencies keeps every row in the gate; Release Surface includes runtime, peer, build, or direct rows; Direct Runtime requires both runtime scope and explicit directness.
  5. Choose how unknown and unlisted identifiers should behave, then review the allowed, review, and denied lists. A denied match outranks other terms inside a required AND branch.
  6. Read the gate status and parser label. Use Dependency evidence to verify what was parsed and excluded, then resolve the highest-priority rows in License finding queue before approving the release.

Interpreting Results:

Block means at least one included dependency produced a blocking policy result. Review means no blocker remains but one or more included rows need a decision. Pass means every included row passed the supplied policy. No rows in scope means the reach filter excluded the entire parsed inventory, not that the inventory is compliant.

The evidence table is the trust surface. Check dependency name and version, scope, directness, original license expression, normalized outcome, gate, and reason. A parser warning, unknown version, missing license, or unexpected exclusion can matter more than the summary badge.

Policy pressure ranks review workload from 0 to 100 by averaging built-in row scores. It is not legal risk, a compliance percentage, or a probability. A single direct runtime blocker should still stop a release even when many allowed rows lower the average.

Technical Details:

The analysis has three distinct stages: parse dependency evidence, classify each license expression against policy, and apply reach and gate rules. Keeping those stages separate makes it possible to tell a malformed inventory from a deliberate policy decision.

Transformation Core

Dependency inventory transformations
InputRecognized evidenceFallback behavior
CSV or simple listDependency, version, license, scope, directness, owner, and path columnsWithout a recognized header, the first seven columns are read in that order and a warning is recorded.
npm license-checker JSONObject entries keyed by package and versionCommon license, package, scope, ownership, and path fields are mapped when present.
CycloneDX JSONComponent name, version, license expression, scope, package URL, and component referenceAn empty or unrecognized components array is rejected.
SPDX JSONPackage name, version, concluded or declared license, and SPDX identifierNOASSERTION in the concluded license falls back to declared or file evidence, then Unknown.

Common aliases such as “Apache 2.0,” “MIT License,” and older GPL shorthand are mapped to canonical identifiers. Expressions are separated into OR choices and required AND terms; WITH keeps an exception attached to its base license. This is a policy-oriented parser, not a full SPDX conformance validator.

Rule Core

Each required AND branch receives its worst term outcome in this order: Denied, Review, Unknown, Unlisted, Allowed. Across OR branches, one allowed branch produces Allowed choice when alternatives exist. If no branch is allowed, the least restrictive available alternative is retained; the result is Denied only when every alternative is denied.

License outcome to gate rules
OutcomeNormal gateImportant exception
AllowedPassAn included row still needs its real obligations fulfilled.
Allowed choiceReviewRecord which allowed OR branch is selected.
ReviewReviewThe review list requires contextual approval.
Unknown or UnlistedReview or BlockThe selected unknown policy controls the gate; unlisted terms can be allowed when only missing evidence is reviewed.
DeniedBlockInventory Discovery lowers the gate to Review.
Excluded by reachExcludedThe row remains visible with the exclusion reason.

Priority follows gate and runtime reach: a direct runtime blocker is P0, another blocker P1, a runtime review P2, and remaining review work P3.

Formula Core

Each included row starts with an outcome weight: Denied 100, Review 65, Unknown 55, Unlisted 45, Allowed choice 12, and Allowed 0. Blocking unknown or unlisted evidence adds 30 points. A direct runtime row adds the profile boost; indirect development rows are multiplied by 0.65. Redistributed-product choices add 8 before the profile multiplier is applied. Each row is rounded and clamped from 0 to 100.

License policy profile pressure modifiers
Policy profileMultiplierDirect runtime boost
Standard release gate1.0010
Redistributed product1.1814
Internal service0.9216
Inventory discovery0.744

Policy pressure is the rounded arithmetic mean of all included row pressures. Excluded rows do not enter the denominator.

P=round(i=1npin)

An inventory can contain up to 5,000 dependency rows and 262,144 characters. Each allowed, review, or denied policy list is limited to 12,000 characters; project and evidence labels are limited to 120 characters.

Privacy and Accuracy Notes:

Dependency inventories and policy lists are parsed in the browser and are not sent to a checker service. They may still reveal internal package names, paths, owners, versions, and policy decisions, so handle screenshots and exported evidence according to the project's security rules.

  • This is policy triage, not legal advice and not a license-text scanner.
  • Auto detection and field mapping cannot prove that the inventory is complete, current, or correctly generated.
  • Declared, concluded, and detected license evidence can disagree. Resolve the underlying package evidence before approval.
  • Parentheses and complex SPDX syntax are not fully validated. Use a dedicated SPDX validator when conformance or operator precedence is consequential.
  • Approval lists express organizational policy, not universal judgments about a license.

Worked Examples:

A dual-licensed runtime dependency

A direct runtime package declares MIT OR GPL-3.0-only. If MIT is allowed and GPL-3.0-only is denied, the expression becomes Allowed choice, not Denied, because an allowed branch exists. Under the Standard Release Gate it enters Review so the selected MIT branch can be documented. Its row pressure is 12 outcome points plus the 10-point direct-runtime boost, or 22.

References: