Skip to main content

Licensing

FactoryThread self-hosted runs on a signed Entitlement — a JWS token issued by your account team for your Organization that sets your plan and limits. It is verified and installed offline; no call home is required.

First boot: Unlicensed until you activate

A fresh install is Unlicensed and runs on a deliberately restrictive Free floor:

LimitFree floor
Concurrent executions1
Published flows10
Workspaces1

This is intentional — an install with no licence must never be more permissive than a paid plan. Install your Entitlement as part of first boot, right after the app is up:

sudo ./ftctl license install --jws "$(cat entitlement.jws)"

Optionally pin it to your Organization id, so a token issued for a different Organization is refused:

sudo ./ftctl license install --jws "$(cat entitlement.jws)" --tenant org_abc123

The new plan takes effect within ~60 seconds — no container restart.

Check your plan

sudo ./ftctl license status
Organization : Acme Corp (org_abc123)
Tier : pro
Mode : self_hosted
Contract end : 2027-07-31
Concurrent executions : 20
Published flows : unlimited
Workspaces : unlimited

If nothing is installed, status reports UNLICENSED and the Free-floor limits.

Renewal

Renewal is the same command with the new token — it upserts, no restart:

sudo ./ftctl license install --jws "$(cat renewed.jws)"
A lapsed contract does not stop your integrations

It freezes changes (create / edit / delete / publish) until you install a renewal. Reads and already-published flows keep running.

What install refuses

install verifies the Entitlement locally before storing anything and installs nothing (exiting non-zero) when:

  • the signature is invalid or the token is truncated,
  • it was signed by a key this build does not trust (unknown key id),
  • with --tenant, it was issued to a different Organization.