Unlock the plan you bought
A Coreflux broker always starts. With no license it runs as Community. A signed license — obtained online with an activation code, or installed offline as a file — is what raises the plan, artifact budget, and premium features.When to use this
- Start a 30-day Growth trial — register at portal.coreflux.org, then activate the license on your broker
- Manage your fleet of brokers in the same portal
- Activate a running broker with a
CFLX-…code, without restarting - Install a signed license on an air-gapped host using the hardware fingerprint
- Enroll the broker into a Coreflux organization so federated logins can bind to that org
- Check usage and limits from
$SYS/Coreflux/Licenseor the opsGET /licenseendpoint
The sections below cover the two license paths, the MQTT commands, environment variables, and how to watch status.
Quick Start
- Activate online
- Install a signed file
- Enroll in an organization
Paste an activation code on a running broker. Limits apply immediately — no restart.Get the code by registering at portal.coreflux.org (including a 30-day Growth-type license). The broker exchanges the code with the licensing authority, verifies the signed lease, and republishes
$SYS/Coreflux/License. The code is used once and is not written to disk; the signed lease is what survives a restart.On a broker you cannot reach over MQTT, set COREFLUX_ACTIVATION_CODE in the process environment and start (or restart) the broker instead.Plans
Three plans. With no license and no activation code, the broker is Community. The broker does not start a trial on its own.30-day Growth trial
To try Growth features, register at portal.coreflux.org. That issues a 30-day Growth-type license. Activate it on your broker the same way as any other license (-activateLicense / COREFLUX_ACTIVATION_CODE, or a signed file). When the 30 days end, the broker reverts to Community like any other expired license.
Use the same portal to manage your fleet of brokers. This page does not walk through portal screens — open the portal and follow the flow there.
The same account is how Coreflux HUB lists that fleet and connects with an access token. The broker accepts the token only after enrollment has set its organization and OIDC bearer authentication is enabled. License activation and that MQTT check are separate: a valid license does not by itself turn token login on.
A Cloud Trial on Installation is a hosted broker and HUB Coreflux runs for you. A Growth trial from the portal is a license you apply to a broker you install (Docker, package, or binary).
Custom ACL rules (
-addRule) require Growth or Enterprise. Shipped default rules always apply. See RBAC with LoT Rules.
A TYPE LLM connector counts toward the connector cap. A DEFINE AGENT needs the same Growth or Enterprise license and does not take a connector slot. License usage reports agents separately from connectors. See AI Connectors and Agents.
Artifact budget
Models, Actions, and Panels each cost 1. Python scripts cost 2. When the budget is full, new definitions are refused with a message that names the limit. When a license expires (past expiry plus any offline grace), the broker reverts to Community. Existing artifacts keep running; new artifacts, advanced connectors, and new RBAC rules are blocked.How the broker picks a license
On boot the broker uses the first source that succeeds:- Inline signed token — process env
COREFLUX_LICENSE_TOKEN(a compact JWS) - License file path — process env
COREFLUX_LICENSE_FILE(for a read-only mount) - Working file —
config/license.jwsin the data directory - Online activation — process env
COREFLUX_ACTIVATION_CODE - Community — nothing of the above
config/license.jws so later restarts can load it without the network. An online lease then refreshes about once a day.
Commands
Publish to$SYS/Coreflux/Command and subscribe to $SYS/Coreflux/Command/Output. The same verbs work from Coreflux HUB Command Console and the System Config License tab. See Broker Commands.
Activate
message names the remedy (unknown code, no free seat, authority unreachable). The activation code is redacted from broker logs and the audit trail.
Load a signed license
A compact JWS is treated as the license itself. Anything else is treated as a path on the broker filesystem:Brokers that predate JWS-text
-loadLicense treat the token as a path and reply License file not found: eyJ…. Update the broker, or install on the host with --load-license /path/to/license.jws.Refresh an online lease
The online lease refreshes on a 24-hour timer. Use-refreshLicense when a plan change or revocation should apply now:
Enroll
$SYS/Coreflux/License shows Enrollment.Enrolled as true or Enrollment.BoundOrg set to the organization id — Coreflux HUB shows Enrolled in that case. Enrollment.Pending going false is not enough. While enrollment is still pending, Enrollment.Reason names the remaining problem.
When the platform can’t be reached
If egress tobrokers.coreflux.org is blocked, the broker keeps serving. Licensing and local users are unaffected. Only federated logins wait for BoundOrg. Each platform call times out after 15 seconds, so startup isn’t delayed.
A lease enrollment with no answer retries at the next licence refresh (daily, or now with -refreshLicense). An et_… token with no answer is kept and retried with backoff (5 seconds, doubling up to every 5 minutes) while the token is valid. A new token, or pressing Enroll in Coreflux HUB, is tried at once.
Enrollment.Reason says the platform couldn’t be reached, and the broker logs one warning instead of an error per attempt.
When the credential is revoked
If the broker’s Fleet row is deleted, the broker is disconnected, or the organization is deleted, the broker logs Platform no longer recognises this credential and keeps serving. If it holds an online lease, it renames the file tocredential.json.revoked and enrolls again with the lease within seconds. The portal only accepts that for a broker waiting in Fleet, so a disconnected broker doesn’t rejoin on its own.
Without a lease, replace or remove the credential and supply a new et_… token.
Startup flags
These flags are processed at process start (see Startup Options):Environment variables
Set these on the broker process. Restart after changing them unless you use-activateLicense / -enroll on a live broker instead.
A broker onboarded from Coreflux HUB needs none of these. Enrollment also turns on at boot when
config/enrollment/credential.json exists (from -enroll) or config/license.jws holds an online lease for this instance (from -activateLicense). A successful -activateLicense turns it on immediately, without a restart.
There is no COREFLUX_ENROLLMENT_TOKEN environment variable. Deliver the token with --enroll / -enroll, or write it to {data directory}/config/enrollment-token.
Allow outbound HTTPS to https://license.coreflux.org for activation and refresh, and to https://brokers.coreflux.org for enrollment.
Fleet performance metrics
An enrolled broker sends a host description, one metrics point per minute, and up to 25 grouped error reports on the same enrollment heartbeat (every 300 seconds by default). No extra connection is opened. A broker that is not enrolled sends nothing. The Coreflux Portal charts the metrics on that broker’s page. The host description includes the process start time, operating system and version, architecture, .NET version, container and orchestrator, core count, cgroup CPU quota and memory limit, and cluster role and size. It does not include a hostname, IP address, user name, or file path. Each minute includes CPU (average and peak), working set and managed heap, garbage-collection pause share and thread-pool queue peak, connected clients, connects and disconnects, messages and bytes in and out (with per-second peaks), refused CONNECTs, ACL denials, rate-limit refusals, route and cluster drops, and route, action, model, and Python errors. It also includes the session count, the retained-message count, the ten routes with the most errors. Error signatures are scrubbed before they leave the broker. Numbers become#. GUIDs and hex ids become <id>. Anything in single or double quotes becomes '…'. The text is cut at 200 characters. Topics and payloads are never sent. Each signature is named by the route, action, model, or script that failed.
Errors are grouped by kind, not by source, so 100 connectors with the same fault send one report. Each report lists the sources that hit it (up to 50, busiest first) with a count, and adds:
- A category (
comms,config,auth,resource,script,internal, ordevice), a severity, whether the broker retries on its own, and a short hint when the broker recognizes the error. - The exception type and the first broker code frame. For an action, the LoT line that failed.
- For a connector, its type and name. Never its address.
graceful, signal (for example a Kubernetes rollout or Ctrl-C), unhandled (with the exception type), or unknown (killed, out of memory, or power loss), with its start time and uptime. This needs a persistent data directory. On a container without one it stays empty.
While the platform is unreachable, the broker keeps up to 60 unsent minutes and sends them when the platform answers again. Older minutes are dropped.
Fleet performance metrics are on by default. The Coreflux Portal has a per-broker switch. The broker learns that choice from the heartbeat response, within one interval. These settings on the broker always win over the Portal:
COREFLUX_FLEET_METRICS=off(orfalseor0).DO_NOT_TRACK=1."Enrollment": { "Metrics": { "Enabled": false } }in the broker configuration.
COREFLUX_TELEMETRY affects only the anonymous install census. It does not change fleet performance metrics. The counters behind these metrics are also exposed on the local /metrics endpoint, whether fleet metrics are on or off.
Watch license status
The broker publishes the full status retained on:GET /license on the operational endpoints listener (default port 9100). HTTP property names are camelCase; the samples below match the retained topic. Ops HTTP is unauthenticated — do not expose that port to the public internet.
Community brokers still publish the topic, so you can read Tier, EffectiveLimits, CurrentUsage, Fingerprint, and Enrollment.
Routes for connectors (MaxRoutes, CurrentUsage.Routes). isTrial may appear in lowercase. Older brokers omit Enrolled and BoundOrg and publish only { Pending, Reason }.
Fields operators use
Enrollment reasons
WhenEnrollment.Pending is true, Reason is a full sentence. Typical causes:
Offline fingerprint
--show-fingerprint (and the Fingerprint field on the status payload) is what Coreflux binds an offline license to.
Do not request an offline license against
hostname+mac unless you accept that recreating the container may drop the broker back to Community.
Persist the data volume
The license, install identity, and enrollment credential live under{data directory}/config/. Official images use CONFIG_PATH=/etc/project.
Online-activated brokers with
COREFLUX_ACTIVATION_CODE and an empty volume mint a new install identity and consume a new seat. Restoring the old volume is cheaper than re-activating. If the volume is gone, manage the fleet at portal.coreflux.org before activating on a new volume.
Enrolled brokers need config/enrollment/ on the same volume. An enrollment token is single-use: if the credential is on an emptyDir and the pod restarts, the next exchange fails and will not self-heal.
Error messages
Best practices
Prefer an activation code when the broker can reach the network
Prefer an activation code when the broker can reach the network
Online activation refreshes the lease, picks up plan changes, and releases the seat on a graceful shutdown. Get a code (including a 30-day Growth-type license) at portal.coreflux.org. Keep
COREFLUX_ACTIVATION_CODE in the process environment (or activate once with -activateLicense and persist config/license.jws).Use a signed file only when the host is air-gapped
Use a signed file only when the host is air-gapped
Offline licenses are hardware-bound. Collect
--show-fingerprint from the real host — not from a laptop you will not deploy.Keep config/ on the same volume across upgrades
Keep config/ on the same volume across upgrades
Replacing the image while keeping
/etc/project (or /var/lib/coreflux) preserves the license, the seat, and enrollment.Do not publish the ops port
Do not publish the ops port
GET /license on the ops listener is unauthenticated. Bind ops to localhost or a private network. The same status is on $SYS/Coreflux/License for MQTT clients that already authenticate.Next Steps
License tab in Coreflux HUB
Activate with a code or signed file, refresh a lease, and enroll from System Config.
Broker Commands
Publish
-activateLicense, -loadLicense, -refreshLicense, and -enroll over MQTT.
