Skip to content

Chapter 9 — Licensing

9.1 The seat model

Stolo is licensed per device as a seat. A seat is activated onto exactly one install at a time; moving to a new device means deactivating the old install (freeing the seat) and activating the new one.

There are no feature tiers — a licensed device has full functionality. A license has three states:

State Behavior
Not licensed Only the activation screen is available; the mesh engine does not start.
Active Full functionality.
Expired See Expiry behavior.

License tokens are cryptographically signed and verified offline on the device. Day-to-day operation requires no connection to any licensing service; the network is used only for activation, renewal, and deactivation.

9.2 Activating

The activation screen offers two paths:

Organization activation code

Enter the 16-character code issued by your organization (shown as XXXX-XXXX-XXXX-XXXX; the field auto-formats and tolerates common look-alike characters). Tap Activate.

Possible outcomes and their meaning:

Message Meaning / action
Payment processing… The seat purchase is still settling; the app retries automatically for a short period.
This seat is active on another device. Deactivate the seat on the other device first, then activate here.
This activation code has already been used. Codes are single-use; request a new code from your org admin.
Subscription inactive / lapsed The seat was revoked or the underlying subscription ended — renew via your org admin.
That code isn't valid. Re-check the code.
No connection to the licensing server. Activation (only) needs internet — check the network and retry.

App Store subscription (iOS / macOS)

Subscribe purchases the monthly auto-renewing Stolo Seat subscription through Apple (price shown live from the App Store; renews until cancelled in your Apple account settings). Restore Purchases re-links an existing subscription — for example after reinstalling, or to finish activation if the network dropped mid-purchase. Ask to Buy purchases activate automatically once approved.

If a subscription seat is already bound to another device, activation reports seat occupied — deactivate it there first.

9.3 Checking license status and deactivating

Settings → Identity → License shows the current state — Active (with organization, channel, and expiry date), Expired, or Not licensed — and offers Deactivate this device.

Deactivating frees the seat for use elsewhere and removes the license from the device; you'll need an activation code (or subscription restore) to use Stolo on it again. Deactivating mid-session takes effect immediately: the app returns to the activation screen.

9.4 Expiry behavior

Expiry is deliberately gentle to avoid cutting off a device mid-operation:

  • A running session never stops when its license expires. Stolo shows a non-blocking banner — "License expired — renew to keep access after restart" — and everything keeps working.
  • Enforcement happens at the next launch: an expired install boots to the activation screen.
  • Licenses renew automatically while the device has periodic internet access: the app refreshes its token in the background starting 7 days before expiry, and issued tokens include a 72-hour offline grace beyond the nominal period. A device that is offline for extended periods should be given occasional internet access (or a fresh activation) before its token lapses.

9.5 Notes for org administrators

  • Seat moves are self-service on the device (Deactivate → activate elsewhere). If a device is lost, its seat can be revoked centrally, after which the install reports Subscription inactive on its next refresh and stops at the next launch.
  • Activation requires internet once; a fielded device then runs offline within its renewal window. Plan renewal windows around deployment schedules.
  • Licensing gates only the app launch — it does not alter mesh behavior, encryption, or data. An expired device's data remains intact on the device and is available again after re-activation.