permit/v1
- type
- entitlement
- subject
- org:studio-42
- product
- pro.desktop
- edition
- team
- seats
- 12 named
- use
- perpetual
0a:30:14:14:d3:67…
Protocol v1 · Ed25519 · Apache-2.0
Permit gives independent software a small, open format for product rights that work offline and stay manageable online.
0a:30:14:14:d3:67…
THE MISSING PRODUCT LAYER
A payment event proves that money moved. An account proves identity. Neither gives an installed app a durable, portable answer to “what may this user run right now?”
Permit turns that answer into a signed artifact. The application verifies it locally with public keys it already trusts. A future management service may issue or refresh credentials, but authorization never depends on that service being reachable.
Ed25519 signs the decoded payload bytes exactly. Verifiers never parse and re-serialize JSON before checking the signature.
Long-lived entitlements stand on their own. Products add short-lived activation leases only when their policy needs online control.
Permit sits beside Rivet, Glaze, native apps, or any other runtime. The application framework never owns commercial policy.
ONE VOCABULARY, DISTINCT WINDOWS
Use rights, update eligibility, and access to newly published features are independent facts.
Teams, named seats, devices, concurrent seats, bundles, editions, add-ons, and scalar capabilities remain separate claims — no overloaded “license count.”
SMALL CORE, EXPLICIT LAYERS
Decode the payload and signature. Reject unknown protocol versions and algorithms.
Resolve key_id through next, active, retired, or revoked trust-store state.
Verify Ed25519 over the exact payload bytes before claims are used.
Evaluate product, version, time windows, grants, installation, and optional lease.
product · edition · grants · seats
installation_id · expires_at · grace
subject · limits · use_expires_at
KEY ROTATION WITHOUT A FLAG DAY
RACKET REFERENCE IMPLEMENTATION
Install the package, generate a key pair, sign a payload, then verify it with only the public trust store.
Browse source and test vectors →$ raco pkg install --auto \
--name permit https://github.com/turinglambdaai/permit.git
$ raco permit keygen \
--private private-key.der \
--public public-key.der \
--trust-store trust-store.json \
--key-id license-2026 \
--issuer com.example
$ raco permit verify \
--trust-store trust-store.json \
--credential entitlement.permit.json
✓ verified entitlement
A DELIBERATE BOUNDARY
Permit v0.1 does not implement payments, accounts, pricing, tax, email, dashboards, hosted metering, or a license server. Future management systems may issue Permit credentials through this boundary; they do not belong in the verification core.