prod-guard-oss

Back to index

Licensing

This document explains the prod-guard licensing model, how licenses work, how they are validated, and what happens when a license is missing or expired.


Overview

prod-guard uses a signed offline license model. No network calls, no SaaS dependency, and no runtime activation are required.

Licensing is designed to be:


License Types

prod-guard currently supports the following license types:

The license tier controls which checks are allowed to execute.


What a License Enables

Capability FREE PREMIUM
FREE checks (PG-0xx / PG-1xx)
PREMIUM checks (PG-2xx)
Offline usage
Startup validation

License File

A prod-guard license is distributed as a single file, typically named:

prodguard.lic

The license file contains:

The payload includes:


Cryptographic Model

prod-guard uses Ed25519 for license signing and verification.

At runtime:


License Validation Lifecycle

License validation happens once at application startup.

  1. Read license file
  2. Parse payload and signature
  3. Verify cryptographic signature
  4. Check expiration date
  5. Create a runtime LicenseContext

The result is cached and reused during the entire application lifecycle.


Behavior Without a License

If no license is present:

Example log:

[prod-guard] premium check PG-203 present but no valid license found

Expired Licenses

Expired licenses behave the same as missing licenses, with explicit logging.

Example log:

[prod-guard] license expired on 2026-01-23 (licensee: Vicente_lopez)

Expiration Warnings

prod-guard emits proactive warnings before license expiration.

By default:

Example:

[prod-guard] License expires in 14 days (licensee: Vicente_lopez)

Configuration

The license file location is configured via properties or YAML:

prodguard:
  license:
    path: ./prodguard.lic

If the property is not set, prod-guard runs in FREE mode.


Operational Guarantees

Licensing never blocks application startup by itself.


Why This Model

This licensing approach was chosen to align with production constraints:


Next Steps

Back to index