Skip to content

Licensing model

A ModelxcelPro license is a signed grant of access, issued for one machine, with a start and an end. This page is the reference for the states a license moves through, the claims it carries, the difference between a trial and a paid license, and the two on-disk license formats — legacy v2 and current v3.

License states

At any moment the add-in is in exactly one of six license states. Three of them are active — they enable the feature groups on the ribbon — and three are not.

StateMeaningFeatures?
UnlicensedNo valid license is installed.Off
TrialAn active trial (an issued signed trial; or, in developer builds only, a local 90-day trial).On
LicensedAn active paid license.On
GraceUp to 7 days after a paid license expires; the status reads “renew now.”On
ExpiredThe license — or the grace window — has ended.Off
InvalidA license is present but failed validation (wrong machine, bad signature, or a clock problem).Off

Features are enabled when, and only when, the state is Trial, Licensed, or Grace. There is no per-feature tier — every command that needs a license needs only an active license, and a trial unlocks the same set as a paid license. The greying-out is covered on the Activation page and in Troubleshooting.

What a license carries

A current (v3) license is a signed JSON document. The signature covers a fixed set of claims — change any byte and verification fails. The claims that matter to you:

ClaimWhat it is
machineCodeThe machine this license was issued for. The add-in re-derives your machine code and requires a match — this is what makes a license machine-bound.
validThroughThe inclusive last valid day (e.g. 2026-04-17). This is what the License Status dialog shows, to avoid an off-by-one “expired a day early” display.
expiresUtcThe internal expiry instant — exactly the validThrough day + 1 at UTC midnight.
featuresWhat the license unlocks. A paid license carries ModelxcelPro; a trial additionally carries ModelxcelPro.Trial.
email · nameWho the license was issued to (shown as “Licensed to…”).
issuedUtc · licenseIdWhen it was issued and its unique id (lic_…) — the id the website’s freshness/revocation endpoint keys on.
keyId · issuerWhich signing key signed it and the issuer string (“ModelxcelPro Licensing Portal”).
renewedFromLicenseIdFor a renewal, the id of the license it replaced.

The signed claims define what is true; the add-in never trusts anything it computes from an unsigned source for entitlement. How the signature is checked is on the Security model page.

Trial vs paid

A license has a kindTrial or Paid — and the two behave slightly differently at the edges:

  • Both unlock the full product. A trial is not a reduced edition; it is the same features with a shorter runway.
  • Only a paid license gets a grace window. After a paid license’s last valid day, features keep working for 7 more days (state Grace, “renew now”), then stop. A trial has no grace — when it ends, it ends.
  • Issued trials are time-boxed. A signed trial can be valid for at most 90 days; it counts down from its own expiry date.

There is no self-serve local trial in shipped builds

A 90-day local trial (one that starts itself the first time you run the add-in) exists only in developer builds. In released builds, a machine with no signed license is simply Unlicensed (“No signed trial or paid license installed”). Beta access is granted as an issued signed trial or a paid license — both tied to your machine code and activated the same way. (A developer-only bypass also exists when a debugger is attached to a debug build; it cannot occur in production.)

The two license formats: v2 and v3

ModelxcelPro understands two on-disk license formats. The add-in routes by content: a license whose text begins with { is treated as v3 JSON; otherwise it is treated as a legacy v2 signed XML license. New licenses are always v3; existing v2 licenses keep working until they expire.

v3 (current)v2 (legacy)
ContainerJSON envelope + payloadSigned XML (Standard.Licensing)
SignatureECDSA ES256 over the P-256 curveThe Standard.Licensing signature scheme
Machine-bound?Always, via the machineCode claimOnly when its schema version is 2; older v2 licenses aren’t machine-bound
Moving machinesRequires a new or rotated license issued for the new machine (portal/seat policy)Add-in-side counter: up to 2 machine changes / 365 days, then refused
Issued today?Yes — all new licensesNo — kept valid for backward compatibility only

The most important practical difference: v3 does not use the legacy v2 move counter. A v3 license is verified by signature, machine code, and expiry alone — there is no local “2 moves per year” allowance. Moving a v3 license to a new machine means getting a new or rotated license issued for that machine, governed by the portal’s seat policy (see Admin & signing).

How the state is decided

At startup the add-in loads the stored license, verifies it, and resolves the state from the dates: for a paid license, now before expiry is Licensed; within 7 days after expiry is Grace; beyond that is Expired. A signed trial is Trial until its expiry, then Expired (no grace). A wrong machine, a broken signature, or a system clock set backwards yields Invalid. The full startup sequence and the offline checks are on the Activation & machine binding page.

Where to go next