On-Premise installation

Upgrade Guide

How to Upgrade Between Versions

How to Upgrade

Upgrading Carbone is usually a simple process, as most steps are managed automatically.

Your Environment Upgrade Steps
Cloud Change the API version
On-Premise binary Install the new binary as you would during a standard installation.
Carbone keeps your existing directories (templates, config, database, ...).
On-Premise with Docker Ensure your templates and (optional) database are stored on persistent storage.
Then pull the new image.

Breaking Changes

We strive to avoid introducing breaking changes to your templates.
However, certain breaking changes may occur in plugins or the Studio Web Component.

The table below provides a quick overview of what to check when upgrading Carbone.

Version Breaking changes
v3.x.x No.
v4.x.x No. See notes 1 and 2 below.
v5.0.x No. See notes 1 and 2 below. Also review the new template ID concept.
v5.1.0 Avoid this version if you use the Studio Web Component
v5.1.1 Breaking changes in the Studio Web Component only.

Note 1. Carbone now detects more syntax errors than before. Some templates that previously worked with unusual or undocumented syntax may now produce errors that need to be fixed.

Note 2. The Docker images (On-Premise) and Cloud Edition now use the latest converters (LibreOffice, OnlyOffice, Chrome) available at the time of the Carbone release, which generally improves DOCX/ODT to PDF conversion. However, we recommend verifying that your documents are converted correctly. In our experience, conversions work reliably when documents are properly designed and do not use unusual formatting or design workarounds.

Please find more information about our Release Lifecycle here.

v5.0 -> v5.1.1

Applies only if you use the Embedded Studio Web Component.

Studio Web Component

New embedded modes

Please carefully review the two execution modes of the Studio Web Component.

By default, the studio starts in "embedded" mode, as in version 5.0. However, note that in 5.1.1, the "Save" button has been removed from this mode.

Function changes

The function openTemplate(templateObj, options) is now deprecated and has been replaced in version 5.1.1.

Suppose you have these initial constants:

const _previewOptions = {
  data : {}
}
const _templateObject = {
  templateId : '212121212121212',
  extension  : 'docx',
  comment    : 'file name'
}

If your code currently uses:

studio.openTemplate(_templateObject, _previewOptions);

Update it as follows for Carbone Studio 5.1.1 and above:

// First, set the preview options:
studio.setRenderOptions(_previewOptions, false);
// Then, open the template by its version ID and type:
studio.openTemplateVersionId(_templateObject.templateId, _templateObject.extension, _templateObject);

Or use one of the 5 new ways to open a template. This ensures forward compatibility and uses the new recommended API.

Event changes

// The event is triggered for additional user interactions (such as language, timezone, converter, currency).
// These extra attributes are now included in the 'options:updated' event in 5.1.x and above.
studio.addEventListener('options:updated', (e) => {
  console.log('options:updated', e.detail);
  // {
  //   data           : Object|Array,
  //   complement     : Object|Array,
  //   enum           : Object,
  //   translations   : Object,
  // 
  // ADDITIONAL ATTRIBUTES IN 5.1:
  //   lang           : String,
  //   timezone       : String,
  //   converter      : String,
  //   currencySource : String,
  // }
});


// Carbone now always returns a valid data-URI and createdAt.
// In Carbone 5.0, it sometimes returned a plain base64 string (without the data-URI prefix).
studio.addEventListener('template:updated', (e) => {
  console.log('template:updated', e.detail);
  // AFTER 5.1.x
  // {
  //   createdAt : 1767108187,
  //   type      : "html",
  //   dataURI   : "data:text/html;base64,PCFET0NUWVBFIGh0bWw+PGh0bWw+PGJvZHk+PGRpdj5hemRhemQ8L2Rpdj48L2JvZHk+PC9odG1sPg=="
  // }

  // BEFORE 5.0.x
  // {
  //   type      : "html",
  //   dataURI   : "PCFET0NUWVBFIGh0bWw+PGh0bWw+PGJvZHk+PGRpdj5hemRhemQ8L2Rpdj48L2JvZHk+PC9odG1sPg=="
  // }
});

// Since Carbone v5.1, a reference to the complete internal template object is returned (with the same attributes as the Template HTTP API).
// This object should be cloned before any modification, as it is a direct reference.
// Internal fields starting with "_" may exist and could be hidden or renamed in future versions.
studio.addEventListener('template:saved', (e) => {
  console.log('template:saved', e.detail);
  // AFTER 5.1.x
  // {
  //    versionId   : "a53593973e6ec37c2b79fb9128cc602c830afbb44de4bd0db719b0b71e34fc77",
  //    id          : "1317319105326582256",
  //    createdAt   : 1767109431,
  //    expireAt    : 0,
  //    deployedAt  : -1,
  //    size        : 66,
  //    type        : "html",
  //    name        : "My Template",
  //    comment     : "",
  //    tags        : [],
  //    origin      : 1,
  //    sample      : [
  //      {
  //          "data": {},
  //          "complement": {},
  //          "enum": {},
  //          "translations": {}
  //      }
  //    ],
  // }

  // BEFORE 5.0.x
  // {
  //   "templateId": "424242424242424242424242424",
  //   "extension": "docx"
  // }
});