Licensing: Core and Pro
A self-hosted deployment deals with two keys, and you copy neither. The server checks them itself: no request waits on the portal.
The free offering is the open-source JoobQ Core library. The self-hosted console needs a paid deployment licence, and JoobQ Pro can be tried with one 14-day trial key per organization.
| Key | Where it comes from | What it unlocks | Without it |
|---|---|---|---|
| Deployment licence | Sign in with JoobQ on the server's setup page: the server fetches it from app.joobq.io and keeps it in its data volume | The console and /api/v1 of a self-hosted server; single sign-on when the tier includes it | The console's operations routes and /metrics answer 402 paid_license_required; single sign-on answers 402 sso_upgrade_required. The SDK gateway keeps serving |
JoobQ Pro key (arrives with the licence check-in, or JOOBQ_PRO_LICENSE) | The portal: paid (with the deployment's licence) or trial (14 days, once per organization). A Pro key works only for the deployment and organization it was issued to | Every Pro feature | Core keeps working; the Pro routes of the SDK gateway answer 402 pro_required, the console's Pro routes are not served |
Which answer a request gets
The deployment licence gates the console; the Pro key gates the Pro routes. Workers on the SDK gateway never need the deployment licence.
Core and Pro
| Core (no Pro key) | Pro |
|---|---|
Jobs: enqueue, batch enqueue, delays, run_at_ms, expires_ms, timeout_ms, retries with backoff, non-retryable errors | Workflows: steps conducted by the engine, sagas, signals, timers, queries, client reads, step options |
Unique jobs with while_locked (a unique_key held for unique_ttl_ms) | Unique jobs with until_executing and until_executed |
| Queue throttling, pause, resume, concurrency | Rate limiting (rate_limit(key, limit, period_ms)) |
| Dead letters, payload encryption, worker middleware | Batches with completion callbacks (Crystal) |
| Job schedules (cron or every, from code or YAML) | Workflow schedules |
Accounts, roles, tokens, two-factor authentication, single sign-on, audit log, retention, /metrics | Alert rules and their notifications |
| Search attributes, run history and archive, worker build ids, bulk workflow actions |
The full list, with the exact routes and fields, is the Pro features index, built from the code.
What the server does without a Pro key
- It boots and serves every Core route.
GET /api/v1/capabilitiesreportsfeatures.pro: false(and the workflow features off), so the console hides the Pro pages. - The SDK gateway's Pro routes answer
402 Payment Requiredwith the error codepro_required: starting, signalling and reading workflows, registering blueprints,rate-limit, aworkflowschedule, and an enqueue withunique_modeuntil_executingoruntil_executed. A plain enqueue, poll and ack of jobs never are. - The console's Pro routes (
/api/v1/workflows*,/api/v1/workflow-*,/api/v1/alerts*) are not registered.
When the key changes
The server turns its Pro features on when it starts, with the key it has then. So:
- a key that arrives later, for example on the first check-in of a new deployment, serves the Pro routes after the next restart;
- when a key expires,
rate-limitand the unique release modes answer402, and the next start comes up without Pro; - when the deployment is unpaid or its Pro entitlement is revoked, the server drops its Pro key, so Pro is off at the next start. Core keeps working throughout.
The deployment licence over time.
The deployment licence is renewed every 15 minutes when the server checks in with the portal (license:refresh checks in now), and a portal that cannot be reached does not end a paid period for up to 7 days after the last successful check-in. See Licence and Pro key.
Crystal applications
JoobQ Core needs no key. Every JoobQ Pro entry point checks the key itself and raises JoobQPro::LicenseError without one: Workflows::Client.new, Workflows::Worker.new, Workflows::Schedules.new, RateLimiter.reserve, the unique-job and batch services, JoobQ::Timeout.run, the metrics and the alert manager. Pro reads the key from JoobQPro::Licensing.key=, else JOOBQ_PRO_LICENSE, else the file named by JOOBQ_PRO_LICENSE_FILE. The key is a paid key of a licensed deployment or your organization's 14-day trial key.