---
title: "@playstack/licensing"
description: "Portable signed-license parsing, offline validation, device binding, revocation checks, and Ed25519 verification."
tags: ["package","identity","licensing","offline","ed25519","pro"]
---

{/* package-access:start */}

> **Pro.** Covered by the Playstack Pro License. Registry access is required; check preview availability before installing. See [package access](/docs/packages#access-policy).

{/* package-access:end */}

`@playstack/licensing` verifies Playstack license credentials without issuing licenses, storing private signing keys, processing payments, or validating App Store receipts.

```ts
import {
  RECOMMENDED_OFFLINE_GRACE_SECONDS,
  WebCryptoLicenseVerifier,
  createLicensing,
} from '@playstack/licensing'

const licensing = createLicensing(
  new WebCryptoLicenseVerifier({
    subtle: crypto.subtle,
    keys: { 'production-2026': publicKeyBytes },
  }),
)

const result = await licensing.validate({
  token,
  product: 'quickzones',
  deviceId,
  now: Math.floor(Date.now() / 1_000),
  highestTrustedTime,
  offlineGraceSeconds: RECOMMENDED_OFFLINE_GRACE_SECONDS,
  isRevoked: (licenseId) => revocations.has(licenseId),
})
```

Grace policy is explicit; omitting it means zero grace. `LicenseSignatureVerifier` supports native key stores, and `@playstack/licensing/vectors` publishes deterministic cases for TypeScript, Swift, and Rust implementations.

{/* package-install:start */}

## Install

After confirming [preview access](/docs/packages#access-policy), install the package at your application's shared Playstack version:

```sh
npm install --save-exact @playstack/licensing@0.1.0-beta.1
```

Check the peer requirements below before choosing a runtime or provider.

{/* package-install:end */}

{/* package-reference:start */}

## API entry points and requirements

Reference snapshot: `@playstack/licensing@0.1.0-beta.1`. Import only the entry point your runtime needs. Paths below are relative to the installed package; use **Go to Definition** in your editor to inspect exact parameters, return types and overloads. Do not import the declaration-file paths directly.

| Public entry point | Declaration file |
| --- | --- |
| `@playstack/licensing` | `./dist/index.d.ts` |
| `@playstack/licensing/errors` | `./dist/errors.d.ts` |
| `@playstack/licensing/testing` | `./dist/testing.d.ts` |
| `@playstack/licensing/vectors` | `./dist/vectors.generated.d.ts` |
| `@playstack/licensing/vectors.json` | No TypeScript declaration (asset or metadata export). |
| `@playstack/licensing/package.json` | No TypeScript declaration (asset or metadata export). |

Node.js engine requirement: `>=20`. This is not a claim that every entry point works in browsers or Workers.

### Peer dependencies

This package declares no peer dependencies. Its ordinary dependencies are resolved by the package manager.

For a complete first program, start with [Getting started](/docs/getting-started). For API lookup and partial-example conventions, see [Reading the reference](/docs/packages#reading-the-reference). Provider failures, lifecycle requirements and application responsibilities remain described in the guide above; types alone do not establish production safety.

{/* package-reference:end */}
