New: allowances counted across every runtime of a seat See what's new →
For React / TypeScript
License your React apps.
One provider. TypeScript. Done.

Monaiq's TypeScript client gives you license enforcement with full type definitions. Install from npm, wrap your app in a provider, and gate features with a single assertion.

Get Started Free
npm install @sidub-inc/licensing-client

Why licensing React apps is hard

Most licensing tools were built for server-side languages. They assume you have a backend, a database, and a secure runtime. React developers get an afterthought — a REST API with no React bindings and no type safety.

Client-side verification matters. Your React app needs to check entitlements without round-tripping to your server on every render. It needs to handle loading states, cache authorization data, and ride out a dropped connection. That's not a wrapper around a REST call — that's a purpose-built SDK.

Monaiq's client is TypeScript-first, ships a React provider, and handles cryptographic signature validation in the browser. It fits the way React developers already build — a context provider at the top, and plain calls wherever a component needs an answer.

Built for the React ecosystem

A real client behind a React provider, not a wrapper around a REST call.

One Shared Client

useLicensingContext hands any component the shared LicensingClient — getAuthorization, assertLicense, performOperation. Repeated calls are served from the client's cache.

Context Provider

LicensingProvider wraps your app once. Every component below gets automatic access to the licensing client — no prop drilling, no manual instantiation.

Full Type Safety

TypeScript-first API with full type definitions. Assertions, features, and authorization objects are all strongly typed — your editor knows what's valid.

Cryptographic Verification

Built-in signature validation using Web Crypto API. License authorizations are cryptographically verified in the browser — matching the .NET SDK's security model.

Rides Out Outages

Assertions evaluate locally against the cached, verified authorization. If the service is briefly unreachable, the last good authorization keeps being served for a grace window.

Framework Agnostic

Plain React 16.8 or later, so it fits client components in any React setup — and the same package runs in Node without React, alongside PurchaseClient for in-app purchase.

From npm install to feature gating in minutes

Wrap your app in a provider. Gate features with an assertion. Ship it.

App.tsx
import { LicensingProvider } from '@sidub-inc/licensing-client';

// 1. Wrap your app with the provider
<LicensingProvider config={{
  licenseServiceUri: 'https://monaiq-apim-a7ut4jehosnbm.azure-api.net/licensing',
  encodedCredential: 'SIDUB_LIC_...'
}}>
  <App />
</LicensingProvider>
PremiumFeature.tsx
import { useEffect, useState } from 'react';
import {
  useLicensingContext,
  ServiceAccessAssertion,
  ServiceAccessLevel
} from '@sidub-inc/licensing-client';

// 2. Check authorization in any component
function PremiumFeature() {
  const client = useLicensingContext();
  const [hasAccess, setHasAccess] = useState(false);

  useEffect(() => {
    client.getAuthorization().then((authorization) =>
      setHasAccess(client.assertLicense(
        ServiceAccessAssertion.create('premium-feature', ServiceAccessLevel.Allowed),
        authorization)));
  }, [client]);

  return hasAccess ? <PremiumDashboard /> : <UpgradePrompt />;
}

Works with your React stack

Same package, same client, every React setup.

React Next.js Remix Vite Node.js TypeScript

Ready to license your React app?