Open-Source Licence Policy SDK

Open-source licence policy as code

Turn your licence policy into an enforceable build rule.

Validate SPDX licence evidence locally and fail CI when a component breaks your policy.

  • Local-first
  • SPDX-native
  • Deterministic
  • CI-ready

Try it free locallyPlans and commercial rights

Developer / Evaluation is $0. Evaluate locally with the full SDK and CLI. No account, licence key or network call required.

Install
npm install @wardenkit/open-source-licence-policy
Generally availableLocal Node.js SDKNode.js 22.x · Node.js 24.xv0.1.2

Not SCA: no dependency discovery, no licence detection, no legal advice.

How it works

Three steps to an enforced licence rule

Give WardenKit your software-component list and your licence rules; it tells your build to stop when a component breaks those rules.

  1. Write your licence rules

    Commit a JSON policy that says which licences are allowed, denied or need review, and which outcomes fail CI.

  2. List your components

    Supply one SPDX licence expression per component, from licence evidence you already hold.

  3. Run it in CI

    One command validates every expression locally and exits non-zero when a component breaks your policy.

Example

What it looks like in your codebase

Evaluate your own policy over your own component records

typescript
import { readFile } from "node:fs/promises";
import { createEvaluator } from "@wardenkit/open-source-licence-policy";

const evaluator = createEvaluator();

const policy = JSON.parse(await readFile("licence-policy.json", "utf8"));
const components = JSON.parse(await readFile("components.json", "utf8"));

const outcome = evaluator.evaluate({ components, policy });

if (!outcome.ok) {
  console.error(outcome.error.code, outcome.error.message);
  process.exit(2);
}

const { aggregate, provenance } = outcome.result;
console.log(aggregate.outcome, aggregate.counts, provenance.policyHash);
if (aggregate.ciBlocking) process.exitCode = 1;

Fail a release pipeline closed on a policy-denied licence

bash
npx wardenkit-licence-policy evaluate \
  --components components.json \
  --policy licence-policy.json \
  --json > licence-policy-result.json

Why WardenKit

A licence rule your build actually enforces

Your policy, in your repository

Versioned beside your code and hashed into every result. WardenKit never decides what you allow.

Deterministic evidence

Identical inputs produce byte-identical JSON, with the policy hash and SPDX reference version recorded.

Nothing leaves your process

No hosted evaluator, no upload and no telemetry. Free evaluation needs no account or licence key.

SPDX-native

Expressions are validated and normalized against a pinned SPDX License List, and deprecated identifiers are flagged.

Pricing

Plans and commercial rights

Paid plans differ by commercial scope, not product features. WardenKit does not meter repositories or usage.

  • Production: 1 organization · up to 10 repositories
  • Platform / Agency: up to 5 client organizations · 50 repositories total

A 30-calendar-day initial-purchase refund guarantee applies once, from an organization's first paid transaction for this product; renewals outside that window are handled under the payment provider's refund policy and statutory rights. Cancel renewal anytime; access continues through the paid period. By subscribing, you accept the Terms and Refund Policy.

Keep this tab open after payment. Activation then opens in a new tab.

No WardenKit account required. Manage billing, invoices and cancellation anytime from WardenKit using your purchase email.

Developer / Evaluation

$0

Evaluate locally with the full SDK and CLI. No account, licence key or network call required.

What's included
  • Full local SDK and CLI evaluation against the bundled SPDX evaluation reference snapshot.
  • Non-production evaluation and integration rights, including local trials and integration spikes.
  • No account, sign-up, email address or licence key is required to install and evaluate.
  • No production or production-CI use rights.
  • No continuing maintained Reference Pack refresh.
  • No production support or service-level commitment.

Free evaluation needs no checkout, account or licence key: install the package and run the CLI locally.

Platform / Agency

$149 / month

Production use for up to 5 client organizations and 50 repositories in aggregate.

What's included
  • Production and CI use rights for up to 5 client organizations.
  • Up to 50 repositories in aggregate.
  • Production use on behalf of clients, including agency, consultancy, platform and multi-tenant delivery.
  • The same maintained material and update rights as Production.
  • Aggregate repository and client limits are commercial licence rights, not metered technical quotas.

How it works Subscribe → Generate Activation Code → Activate locally → Verify

Secure checkout powered by Paddle.

Plan scope and limits

Paid tiers differ in commercial scope only. Repository and client-organization limits are commercial licence rights recorded in entitlement metadata and customer terms; the SDK does not meter, count or report repositories, dependencies or usage, and transmits no telemetry. There are no seat, transaction, revenue or API quota limits, and no other quota dimension exists.

Production vs Platform / Agency. Production covers one entitled customer organization using the SDK and CLI for its own repositories and CI, up to 10 repositories. Platform / Agency adds production use on behalf of client organizations — agency and consultancy delivery, platform and multi-tenant use, and embedding within a broader customer-facing product or service — for up to 5 client organizations and up to 50 repositories in aggregate. Perfect technical enforcement of these limits is not claimed.

Quickstart

Run your first licence check

Install the package, write a policy and evaluate your component records locally. Free evaluation needs no account.

Install
npm install @wardenkit/open-source-licence-policy

Open the quickstart

Continuous integration

Using GitHub? Add WardenKit to GitHub Actions →

  • npm distributes the SDK and its CLI.
  • Use it inside any project, including projects hosted on GitHub.
  • GitHub Actions can run the licence-policy check on every push and pull request. GitHub does not host or activate the SDK.

FAQ

Questions buyers ask

Is free evaluation really free?

Yes. Install the package and evaluate locally with the full SDK and CLI: no account, licence key, payment or network call. Production and CI use need a paid plan.

What do I need to provide WardenKit?

Your licence policy (a JSON file) and your component records, each with one SPDX licence expression. WardenKit does not discover dependencies, detect licences or scan source code.

Does WardenKit upload my source code?

No. Evaluation runs in your own process. Component records, policies, SPDX expressions and results are never transmitted, and there is no telemetry. Production use adds only a bounded authorization refresh with the WardenKit service.

What happens after I subscribe?

Keep the tab open. WardenKit takes you straight to an activation page: generate your one-time Activation Code, run one terminal command in your project, paste the code when it asks, then verify with the status command.

What is an Activation Code?

A one-time code that activates Production in your project. It is shown once on the activation page, typed into the CLI's protected prompt rather than the command line, and never emailed or stored by this site.

How do I manage or cancel my subscription?

Open Billing & subscription in the site footer and enter your purchase email to receive a secure sign-in link. You can view invoices, update payment details and cancel there. Cancelling stops renewal; paid access continues to the end of the paid period, and nothing installed is remotely deleted.

Lost your Activation Code?

If you've generated an Activation Code but haven't used it, you can securely request a replacement using the same browser where you originally generated your code.

Recover your Activation Code

Already activated? You normally don't need your original Activation Code again. Use the SDK's status command to check your installation.

Who decides which licences are acceptable?

You do. WardenKit enforces the licence policy you write; it does not judge which licences your organization may use.

Which SPDX version is supported?

Expressions are validated against SPDX License List 3.28.0 through the signed WardenKit Reference Pack. Paid plans receive maintained Reference Pack updates as newer SPDX releases are adopted.

Is the SDK open source?

No. It is source-available under the WardenKit source-available commercial licence. Evaluation is free; production use needs a paid plan.

Technical details Capabilities, output, activation, licence, maintenance and scope
Family
Security and Assurance
Topology
Local Node.js SDK and CLI, no hosted evaluator
Input
JSON component records and a JSON policy you author
Output
Machine-readable JSON with a CI-consumable aggregate outcome
SPDX baseline
License List 3.28.0, Specification 3.0.1 Annex B grammar
Network at evaluation
None for createEvaluator and the CLI evaluate command. Managed Production: bounded authorization refresh only. Telemetry: none

What you get that a hand-maintained rule set does not

  • Your policy, as code, in your repository. The policy is a JSON document you author and own, versioned beside your code and hashed into every result. WardenKit never decides which licences you allow, deny or send to review.
  • Deterministic, reproducible evidence. Identical component records, identical policy, identical product version and identical reference version produce byte-identical machine-readable output, with the policy hash and reference version recorded in the provenance block of every result.
  • Runs where your code runs. Evaluation, expression validation, the SPDX reference command and status make no network call. The managed Production evaluator adds only a bounded authorization refresh on evaluate activity; the evaluation itself still runs locally, and component records, policies, SPDX expressions, dependency names and results never leave your process.
  • Built for CI, not for a dashboard. One CLI command returns JSON on stdout and a deterministic exit code, so a release pipeline can fail closed on a denied or unsupported licence expression without a hosted service in the path.
  • A maintained SPDX technical reference. Expression validation and normalization are pinned to a published SPDX License List release, and paid tiers receive the maintained signed Reference Pack as new published releases are adopted.
  • Technical results, not legal opinions. Results are named policy-allowed, policy-denied, review-required and invalid-unsupported, describing the outcome of your configured policy — never a legal permission, prohibition or compatibility opinion.

What the SDK does

  • Validates SPDX licence expressions against the SPDX Specification 3.0.1 Annex B grammar, including AND, OR, WITH, the + operator and parentheses.
  • Normalizes valid expressions to a canonical form: canonical SPDX identifier case, canonical operand ordering for the commutative AND and OR operators, and canonically re-emitted parentheses.
  • Resolves identifiers and exception identifiers against a pinned SPDX License List 3.28.0 baseline and flags deprecated identifiers with a deterministic diagnostic instead of substituting a successor.
  • Supports LicenseRef- custom licence identities and AdditionRef- custom additions as opaque customer-defined references, with no legal meaning assigned.
  • Validates the customer-authored policy document under a strict schema, rejects unknown fields, and reports a stable policy hash.
  • Evaluates the policy over each component record and derives an aggregate outcome from the policy's own configured thresholds.
  • Fails closed on malformed input, unknown identifiers and schema violations unless the policy explicitly tolerates that diagnostic code.
  • Prints the pinned SPDX reference metadata and the local entitlement state as machine-readable JSON.

Structured output

  • Per-component category: policy-allowed, policy-denied, review-required or invalid-unsupported.
  • Normalized SPDX expression and expression shape for each component record.
  • Coded diagnostics with stable machine-readable codes, for example EXPR_UNKNOWN_ID and EXPR_DEPRECATED_ID.
  • Aggregate outcome plus an explicit CI-blocking flag, mirrored by the CLI exit code.
  • Provenance block: product version, SPDX License List version, reference snapshot version and policy hash.

How production activation works

  • Production use is authorized by a signed, time-bounded local entitlement, paired with a signed and versioned production pack.
  • Verification happens locally in your process. The evaluator itself makes no network call.
  • Each signed production authorization lasts at most 72 hours from issue (earlier if the paid period or a scheduled cancellation ends sooner); there is no additional grace period after the signed deadline.
  • Refresh is automatic and activity-driven: createManagedProductionEvaluator().evaluate() refreshes the signed authorization on Production activity once 24 hours have passed since it was issued. No routine daily manual refresh is required.
  • There is no timer, daemon or background keepalive: a dormant process makes no requests, and a dormant installation revalidates automatically on its next managed Production use (fail-closed until that revalidation succeeds).
  • The CLI refresh command is an explicit recovery and diagnostic action, not a routine requirement.
  • Cancellation and expiry are non-destructive: nothing installed is remotely deleted or disabled, and evaluation use continues. Production use stops when the signed authorization expires, not instantly on cancellation.

Activation is explicit and out of band through the CLI wardenkit-licence-policy; the managed Production evaluator and that CLI are the only writers of the local artefact cache in ~/.wardenkit/open-source-licence-policy/.

Activation CLI
npx wardenkit-licence-policy status --json
npx wardenkit-licence-policy activate  # asks for the Activation Code; nothing secret goes on the command line
npx wardenkit-licence-policy refresh --json  # recovery/diagnostic; the managed evaluator refreshes on activity, authorization lasts at most 72 hours

Availability. Production activation runs against the WardenKit Live activation service. An activation credential is issued only after Paddle's verified webhook confirms the subscription; the credential is shown once and never stored by this site. Evaluation, policy validation, the SPDX reference command and status run locally and need no service.

Source-available, production-entitled

WardenKit source-available commercial licence, distributed as LICENSE.md inside the package.

  • Source-available: the published package contents may be read, audited and inspected.
  • Evaluation and integration use is permitted at no cost; production use requires a paid entitlement.
  • Not an OSI-approved open source licence and not an SPDX-listed identifier.
  • The licence covers the WardenKit product only. Your policies, component records and results remain yours.

What subscribers keep receiving

  • The maintained signed WardenKit Licence Reference Pack binds a published SPDX License List release, with WardenKit normalization and deprecation-diagnostics metadata, pack version, provenance and signature envelope.
  • New published SPDX License List releases are tracked, and a new maintained pack is produced when a release is adopted.
  • Node.js support windows and the package's minimal dependency set are monitored for compatibility and security releases.
  • Paid tiers receive maintained Reference Pack refreshes, compatibility releases and security releases while the subscription is current.
  • Cancellation keeps paid access through the end of the paid period with no automatic prorated refund; an approved refund of the current paid period, a confirmed chargeback or terminal cancellation stops further issuance and refresh immediately, while a refund that is only requested or pending does not. Installed files and cached evidence are never remotely deleted or disabled, and evaluation-rights use may continue.
  • Each signed production authorization lasts at most 72 hours. The managed Production evaluator refreshes it on evaluate activity once 24 hours have passed (no daemon, no background timer, no traffic while dormant), and the CLI refresh command is a recovery and diagnostic action; every refresh re-verifies the subscription with the payment provider and there is no extra grace. Transient service failures follow a bounded retry ladder; an authorization that expires while the service is unreachable reports REVALIDATION_REQUIRED after two bounded recovery attempts (a technical state, not a revocation; the next evaluate on the same evaluator begins a fresh bounded recovery, so no routine daily manual refresh is required), and a subscription in provider-confirmed payment recovery (past due) keeps refreshing under PAYMENT_RECOVERY until the provider reports a rights-changing event.
  • A 30-calendar-day initial-purchase refund guarantee applies once, from an organization's first paid transaction for this product; renewals outside that window are handled under the payment provider's refund policy and statutory rights. See the Refund Policy.

Technical scope and boundaries

  • No source-code licence detection or licence-text classification.
  • No dependency discovery: you supply the component records.
  • No vulnerability, malware or general SCA scanning.
  • No SBOM generation, and no SPDX-document or CycloneDX adapters in this version.
  • No lockfile, manifest, registry or dependency-graph readers.
  • No legal advice, legal permission or obligation determination.
  • No licence compatibility opinion.
  • No compliance certification, endorsement or binding decision.
  • No copyright analysis, obligation generation or attribution-sufficiency assessment.
  • No hosted evaluation API, dashboard, portal or remediation workflow.
  • No telemetry and no transmission of customer operational data.
  • No SPDX or Linux Foundation affiliation or endorsement.

Where the product is distributed

npm package
@wardenkit/open-source-licence-policy
Published to the public npm registry under the @wardenkit scope.
Public examples repository
github.com/wardenkit/open-source-licence-policy
Public curated repository carrying the README, licence, changelog, security policy and the runnable SDK, CLI, policy, GitHub Actions and generic CI examples.

Distribution. Installs the published package from the npm registry. Free local evaluation needs no account, licence key or network call.

Full documentation, error states and activation reference →

All guides →

Questions about scope, licensing or entitlement: support@wardenkit.com. See also the documentation, Terms, Refund Policy, Privacy and Support.