Community and Enterprise editions

Deckgauge is one open-source platform with an optional module that loads on top of it. Community is everything in this repository, runs standalone, and never phones home; Enterprise adds a small set of gated features behind a license file the API reads locally.

deckgauge · DECKGAUGE_EDITION
CECommunity
EEEnterprise

The variable that decides whether the enterprise module is even attempted.

What Community includes

Everything in the public repository — boards, sync from Jira/GitHub/GitLab/Azure DevOps, engineering intelligence, org trees, roadmaps, timesheets, and the Advisor — is Community, and it runs fully standalone. Nothing behind apps/* or the other packages/* depends on the enterprise module; a Community install never imports it, and a build with no @deckgauge/enterprise package present at all still works end to end.

How the enterprise module loads

The private @deckgauge/enterprise package is never a static dependency of the API — it's resolved at runtime, by an explicit file path, only when DECKGAUGE_EDITION=enterprise. If that variable isn't set to exactly enterprise, or DECKGAUGE_ENTERPRISE_MODULE is empty or missing, the loader returns silently and the app runs as Community with no warning logged. Only when the module path is set but the import itself throws — a path the API can't resolve, or a broken build — does the loader log the "edition requested but module failed to load" warning before falling back.

  1. Set DECKGAUGE_EDITION=enterprise and DECKGAUGE_ENTERPRISE_MODULE to the module's built entry point (a dist/index.js in production, or the TypeScript entry under tsx in development). docker-compose.yml passes neither variable to the api service, so this loading path only applies when you run apps/api directly on the host — not the containerized api.
  2. Set DECKGAUGE_LICENSE_FILE to the absolute path of your signed license.
  3. Restart the API — it imports the module, calls its createEnterprise(), and verifies the license on boot.

What the license actually is

A license is an Ed25519-signed offline token — no phone-home, no license server. It's verified locally against a trusted public key and declares which feature flags it enables and when it expires; there's deliberately no seat or user-count field anywhere in the token — the open-core model doesn't cap how many people use Deckgauge. Enforcement degrades rather than locks you out: a valid license turns features on, an expired one within its grace period keeps them on with a warning, and a license past grace turns enterprise features off while the entire core platform keeps working exactly as it does in Community.

Under the hood

An enterprise license verified as invalid or absent behaves identically to Community for every purpose that matters — the platform never refuses to run without one. Verification checks the license against a list of trusted public keys baked into the enterprise package, not against anything a Community install can influence. As shipped today, that list holds a development key only — its matching private key is committed for local testing and is meant to be replaced with a real keypair before any license is issued for production use. The dev-only override (DECKGAUGE_ALLOW_DEV_LICENSE_KEYS) exists so a locally-generated license can be tested without baking a key into source, and is documented as unsafe for production.

If it looks wrong

SymptomCauseFix
API starts as Community despite DECKGAUGE_EDITION=enterprise, no warning loggedDECKGAUGE_ENTERPRISE_MODULE is unset or empty — this case is silent by designConfirm the variable is set and reaches the process (it isn't passed to the containerized api at all)
API starts as Community and the "edition requested but module failed to load" warning appearsDECKGAUGE_ENTERPRISE_MODULE points at a path the API can't importCorrect the path to the module's built entry point
Enterprise features are enabled even though the license expiredIt's still inside its grace period — features stay on with a warning, by designRenew the license before the grace period ends, or treat the warning as your deadline
A locally-signed dev license won't validateDECKGAUGE_ALLOW_DEV_LICENSE_KEYS or DECKGAUGE_LICENSE_PUBKEY is missingSet both for local testing only — never in a production environment

Related

Last updated