Skip to content

SDK overview

Axowl ships four SDK families. Web front-ends use the JS/TS one; on the server pick the client for your runtime — .NET, Node, Python or Java. Every backend SDK does the same three things the same way: verify the end-user token against your org’s JWKS, read permissions with the same wildcard rules, and (optionally) ask Axowl for a server-authoritative answer.

RuntimePackageRegistryPublished today (2026-10-12)Page
Browser / React@axowl/sdknpm✅ 0.3.1 (since 2026-10-07)Quickstart
Node / Next.js@axowl/sdk-backendnpm✅ 0.3.2 (since 2026-10-07)below
.NETAxowl.Sdk.Identity.Client (+ Integrity, Eventing, Korean Identity)nuget.org✅ since 2026-09-26 — all nine Axowl.Sdk.* packages (Identity.Client 0.2.2)Identity
Python 3.9+axowl-sdkPyPI✅ 0.1.1 (since 2026-09-26)Python
Java 17+com.axowl:axowl-sdkMaven Central✅ 0.1.1 (since 2026-09-26)Java
PackagePurpose
@axowl/sdk (packages/react)React provider, hooks & components — AxowlProvider, useAxowl, usePermission, useSession, useOrg, plus drop-in SignIn, SignInButton, UserButton
@axowl/sdk-backend (packages/backend)Express middleware (axowlMiddleware, requirePermission) and Next.js helpers (getAuth, getAuthAsync, canAccess); JWT verification against the org JWKS (verifyTokenAsync)
@axowl/sdk-core (packages/core)Shared client, token store and permission matching (used internally)
@axowl/sdk-wasm (packages/sdk-wasm)WASM integrity-verification core
import { AxowlProvider, useAxowl, usePermission } from '@axowl/sdk';
<AxowlProvider orgSlug="my-org" clientId="client_..."><App /></AxowlProvider>
const { user, isSignedIn, signIn } = useAxowl();
const { can } = usePermission(); // can('dashboard.view')

clientId is the application’s client key (client_..., one per platform × environment, from Applications in the dashboard). The client talks to /api/public/apps/{clientId}/... — login methods, magic link, social, federated, passkey, session handshake.

Features: magic link, social, passkey (FIDO2), and federated (OIDC) sign-in; JWT auto-refresh; wildcard permission matching (sap.fi.*); Express req.axowl context; Next.js App Router & Middleware support; TypeScript-first.

ProjectPurposePage
Axowl.Sdk.Identity.ClientIntrospection, permission checks, [RequirePermission]Identity
Axowl.Sdk.Integrity.ClientVerify sealed records (REST/gRPC/Fallback)Integrity
Axowl.Sdk.Eventing.ClientPublish custom events / poll sealed eventsEventing
Axowl.Sdk.Korean.Identity.Client[RequireKoreanIdentity] gatingKorean Identity

Each client uses a 3-layer transport (REST + gRPC over h2c + fallback), confirmed by the Rest*Client / Grpc*Client / Fallback*Client files in each project. A separate Blazor/.NET end-user auth package lives in axowl-sdk/dotnet — see .NET EndUser auth.

pip install axowl-sdk. verify_token (RS256 against the org JWKS, issuer/audience/expiry), AxowlContext with typed claims and a decoded permission list, axowl.fastapi.AxowlAuth (dependency + require("scope")), and AxowlIdentityClient for introspect / check-permission. See Python SDK.

com.axowl:axowl-sdk. AxowlTokenVerifier (RS256 against the org JWKS, cached and rate-limited), AxowlContext record, Permissions (wildcard matching + require), AxowlAuthFilter for servlet containers such as Spring Boot, and AxowlIdentityClient for introspect / check-permission. See Java SDK.

Every client now gives up instead of waiting forever on a stalled connection.

SDKSettingDefaultNotes
JavaScript (@axowl/sdk-core)requestTimeoutMs15000Applies to every request the client makes. 0 turns it off.
.NET (Axowl.Sdk.Identity.Client, .Integrity.Client, .Eventing.Client, .Korean.Identity.Client)CallTimeout10 secondsgRPC deadline and REST timeout for each call.

Other behavior worth knowing:

  • JavaScript: the list of sign-in methods is cached per client for 5 minutes, and concurrent calls share one request. A change made in the dashboard shows up within that time. A failed fetch is not cached.
  • .NET: the signing-key set (JWKS) is refreshed every hour, so a rotated key is picked up within the hour. Event polling backs off with jitter when there is nothing new instead of polling on a fixed interval.

An Axowl end-user access token is an RS256 JWT with iss = {api}/api/public/orgs/{orgSlug}, aud = your application key, sub = end-user id, and the claims email, org, org_slug, app, app_group, type ("enduser"), is_employee, cid (the user’s org badge) and permissions (a JSON-encoded string array). Keys are published per organization at {api}/api/public/orgs/{orgSlug}/.well-known/jwks.json. All four backend SDKs verify against exactly that, so a token accepted by one is accepted by the others.