Authentication
Register, sign in and keep end users signed in from inside your app - with Argon2id hashing, heartbeats and revocable sessions.
AroliBuild it. License it. Ship it.
Authentication, licensing and distribution, finally in one place.
Manage users, secure your applications, issue licenses and ship software with confidence. Everything your product needs, beautifully connected.
A free plan is available. Upgrade only when your product needs it.
The platform
Nine building blocks that share one data model, one dashboard and one API - so a license, a device and a subscription always agree with each other.
Register, sign in and keep end users signed in from inside your app - with Argon2id hashing, heartbeats and revocable sessions.
Generate keys in batches with a prefix, duration and activation limit. Revoke one and only its time is withdrawn.
Bind accounts and keys to hardware IDs with a per-app limit. Reset from the dashboard or the API.
Timed and lifetime entitlements that stack without overlap, freeze and resume, and are checked with one call.
TypeScript, Python and C++ clients with stable error codes and built-in response signature verification.
Follow your API request volume and see how close you are to your plan limits.
Scoped secret keys for your backend, separate dev and live keys, idempotent writes.
Signed events for registrations, redemptions and entitlement changes, retried with backoff.
Invite your team with Owner, Admin, Developer, Support and Viewer roles. Every admin action is audited.
The dashboard
Applications, users, licenses and every API call in one place. Click through the tabs - this preview uses example data.
Applications in the demo organization
| Application | App ID | Status |
|---|---|---|
| Northwind Studio | app_3m9c2r7d | Active |
| Northwind CLI | app_k8x1v4qa | Active |
| Lumen Capture (beta) | app_t2w7n0hs | Paused |
Example data for illustration only. IPs are from documentation ranges.
How it works
No authentication or licensing servers of your own to build, run or patch.
Name your product in the dashboard. Aroli issues a public app ID and an Ed25519 key pair for signing responses, and you choose the device limit.
Install the SDK for TypeScript, Python or C++, pin your app's public key, and call login, redeem and hasEntitlement where your app needs them.
Generate keys, grant or freeze time, reset devices and ban accounts from the dashboard - or automate it from your backend with the management API.
For developers
Sign users in, redeem a key, check an entitlement. The SDKs handle response verification and session heartbeats, so your code stays about your product.
import { Aroli, AroliError } from "@aroli/sdk";
const aroli = new Aroli({
appId: "app_8f2k1x9q", // public - safe to ship
publicKey: "<your app's Ed25519 key>", // pinned: responses are verified
});
try {
const session = await aroli.login({ username, password, hwid: machineId() });
await session.redeem(licenseKey); // binds the key to this user + device
if (!(await session.hasEntitlement("pro"))) showUpgrade();
session.startHeartbeat(); // keeps the session alive
} catch (err) {
if (err instanceof AroliError && err.code === "device_mismatch") {
showError("This account is linked to another device.");
}
}app_… identifies your application. It is meant to ship inside your binary - it grants nothing on its own. Secret management keys never belong in client code.
Client API responses carry an Ed25519 signature over the timestamp, your nonce and the body. The SDK verifies it against the public key you pinned.
device_mismatch, license_already_redeemed, activation_limit_reached… Branch on the code, show the message. Codes are part of the API contract.
Security
No badges, no buzzwords. Here is exactly what Aroli does to protect your accounts, your keys and your customers.
Dashboard accounts and your end users alike. Plaintext passwords are never stored.
Session tokens and API keys are random 256-bit values. We keep only their SHA-256 hash, so stored values can't be used to sign in.
Keys are stored as HMAC verifiers. You see the plaintext once when generating them; afterwards only a short hint remains.
Each application has its own Ed25519 key pair. Client API responses are signed, and keys can be rotated.
Signing keys, webhook secrets and MFA secrets are encrypted with AES-256-GCM before they reach the database.
Dashboard accounts can enable TOTP-based MFA with one-time recovery codes.
Sign-in, registration, redemption and validation endpoints are rate-limited per application and IP address.
Each request is checked server-side against your organization and application before any data is read or changed.
Owner, Admin, Developer, Support and Viewer roles control who can change what in your organization.
Administrative actions are recorded with who did what and when, so changes are traceable.
Deliveries carry an HMAC-SHA256 signature. Endpoints must be public HTTPS; private and loopback addresses are rejected.
Device fingerprints are supplied by the client, so a determined attacker can spoof them. Aroli enforces device and activation limits on the server, signs every response and keeps secrets out of your binary - but no service can make software running on someone else’s machine uncrackable. We'd rather tell you that up front.
Pricing
Simple plans with clear limits. Pay monthly or save with longer billing intervals.
Everything you need to build and test your first integration.
No charge
Start for freeFor independent developers shipping their first paid product.
Billed monthly
Choose StarterFor products with a growing customer base and a small team.
Billed monthly
Choose ProFor established software companies with many products.
Billed monthly
Choose BusinessPrices shown are provisional and may change before general availability. Pay in euros or US dollars from your prepaid Aroli balance; taxes may apply.
Compare all plan limitsCreate an application, connect an SDK and issue your first license key. The free plan has everything you need to build and test your integration.