On-Premise installation

Licensing

Get a Carbone license and activate the Enterprise Edition on your servers

Community and Enterprise Edition

Carbone On-Premise always starts, with or without a license. Without one it runs the Community Edition: document generation works, but Enterprise features are disabled.

A license unlocks the Enterprise Edition and comes with support and updates.

See the feature-by-feature comparison to know exactly what each edition includes.

Get a license

To request a free 30-day trial:

  1. Create an account on account.carbone.io.
  2. Ask us in the chat and we activate it immediately.
  3. Download your license from your dashboard.

For a production license or any question on plans, talk to us.

How to provide the license

The license is a *.carbone-license file holding one signed token. You can either pass its content as a string or drop that file on disk. Both carry the same license, so pick whichever suits your deployment.

Option 1: pass the license as a string

Use this when the filesystem is read-only or ephemeral, or when secrets are injected by the platform. Set the license parameter to the content of the .carbone-license file:

export CARBONE_LICENSE="eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhY..."

./carbone webserver

With Docker, export the variable on the host and forward it with -e CARBONE_LICENSE, so the token stays out of the command line and out of the image:

export CARBONE_LICENSE="eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJhY..."

docker run -t -i --rm -p 4000:4000 -e CARBONE_LICENSE carbone/carbone-ee:full-5.14.3

Never bake the token into an image or commit it to a repository. Each platform has its own secret store, and the deployment guides show how to wire it:

Option 2: put the file on disk

Copy the file into the license directory, which is the config folder of the workspace directory by default. Only the .carbone-license extension matters, the filename is free:

/var/www/carbone/
└── config/
    ├── config.json
    └── acme-corp.carbone-license

The Docker image uses /app as workspace directory, so mount your folder into /app/config:

docker run -t -i --rm -p 4000:4000 --volume ./config:/app/config carbone/carbone-ee:full-5.14.3

To keep licenses somewhere else, point licenseDir to that directory:

export CARBONE_LICENSE_DIR=/etc/carbone/licenses

Which license is selected

  1. If the license string is set, Carbone uses it and never reads the license directory. As with any parameter, the CLI option wins over the environment variable, which wins over config.json.
  2. Otherwise Carbone lists the license directory, keeps the files ending with .carbone-license, and loads the most recently created one. Sub-directories and any other file are ignored.

To renew a license, just drop the new file next to the old one: being the newest on disk, it is picked up at the next restart.

The selection uses the file creation date, not the filename nor the modification date. Copying an older license into the directory gives it a fresh creation date and makes it win. When in doubt, delete the obsolete files.

Check the loaded license

Carbone prints the license it loaded on startup:

LICENSE:
--------
- name       : ACME Corp
- expired at : 2027-01-31T00:00:00.000Z
- address    : 1 rue de la Paix, Paris
- email      : admin@acme.corp
- plan       : enterprise

When no valid license is found, Carbone still starts, in Community Edition: Enterprise features are disabled, the job balancer is forced off, and the reason is printed instead:

LICENSE:
--------
❌ No *.carbone-license files found in /app/config
❌ No license found in env. variable CARBONE_EE_LICENSE or CARBONE_LICENSE
⚠️ Only features of the Community Edition are enabled

An expired license does not always stop the Enterprise Edition: with the eternity plan, versions published before the expiration date keep running, only support and updates stop. A Invalid license. Check system clock. message means the machine clock is set earlier than the publication date of your Carbone version.