<?xml version='1.0' encoding='utf-8'?>
<rss version="2.0">
  <channel>
    <title>Carbone Changelog — v3</title>
    <link>https://carbone.io/changelog.html</link>
    <description>Carbone v3.x releases</description>
    <lastBuildDate>Wed, 15 Apr 2026 10:17:25 +0000</lastBuildDate>
    <ttl>1440</ttl>
    <item>
      <title>v3.8.2</title>
      <link>https://carbone.io/changelog.html#v3-8-2</link>
      <pubDate>Fri, 03 Apr 2026 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.8.2</guid>
      <description>• [EE] Update to Node 20.20.2&lt;br/&gt;• Add limits maxTemplateUncompressedSize (200 MB by default) for unzipped templates to improve resistance to zip bomb denial-of-service attacks&lt;br/&gt;• Node.js library only: Fix a critical security issue identified in a recent audit. This issue had already been fixed in all other versions. Align published version on npm with this version</description>
    </item>
    <item>
      <title>v3.8.1</title>
      <link>https://carbone.io/changelog.html#v3-8-1</link>
      <pubDate>Sat, 17 Jan 2026 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.8.1</guid>
      <description>• Update dependencies + latest IANA database to manage correctly Daylight Saving Time&lt;br/&gt;• â ï¸ Fix a critical security issue identified in a recent audit</description>
    </item>
    <item>
      <title>v3.8.0</title>
      <link>https://carbone.io/changelog.html#v3-8-0</link>
      <pubDate>Mon, 08 Sep 2025 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.8.0</guid>
      <description>• Fixed Carbone API Authentication to return status code 401 instead of 500 when an API key has expired.&lt;br/&gt;• Carbone On-Premise: add parameter maxTemplateSize (bytes) to change default limit (20MB)&lt;br/&gt;• Accept to send a volatile template when calling the API POST /render/template . This template is never stored and it does not trigger the middleware readTemplate {
  data      : {},
  template  : "base64-encoded-file-with-or-without-data-URI-prefix",
  convertTo : "pdf"
} This update makes Carbone v3 compatible with the new Carbone v5 Studio.</description>
    </item>
    <item>
      <title>v3.7.2</title>
      <link>https://carbone.io/changelog.html#v3-7-2</link>
      <pubDate>Thu, 13 Jun 2024 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.7.2</guid>
      <description>• Update dependencies for security&lt;br/&gt;• Improve Libreoffice detection on Arch Linux (Thank you @jan-san)&lt;br/&gt;• Fix: removed the possibility of prototype pollution in formatters</description>
    </item>
    <item>
      <title>v3.5.6</title>
      <link>https://carbone.io/changelog.html#v3-5-6</link>
      <pubDate>Wed, 12 Jun 2024 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.5.6</guid>
      <description>• Fix: removed the possibility of prototype pollution in formatters. This can only occur if the parent NodeJS application has the same security issue. CVSS:3.0/AV:N/AC:H/PR:L/UI:N/S:C/C:H/I:H/A:H.&lt;br/&gt;• Update some dependencies</description>
    </item>
    <item>
      <title>v3.7.1</title>
      <link>https://carbone.io/changelog.html#v3-7-1</link>
      <pubDate>Tue, 19 Dec 2023 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.7.1</guid>
      <description>• [EE] Fix crash when dynamic image URL contains forbidden characters</description>
    </item>
    <item>
      <title>v3.7.0</title>
      <link>https://carbone.io/changelog.html#v3-7-0</link>
      <pubDate>Thu, 15 Jun 2023 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.7.0</guid>
      <description>• [EE] All APIs returns "400 Bad request" instead of "404 Not Found" when idTemplate is not valid&lt;br/&gt;• [EE] Fixed HEAD /render/:renderId : The request don't delete the generated document anymore.&lt;br/&gt;• [EE] Fixed GET /template/:templateId : If the template doesn't exist, the statusCode 404 is returned instead of 400.&lt;br/&gt;• [EE] Force download of the rendered report when the query parameter ?download=true is set, such as: POST /render/:renderId?download=true&lt;br/&gt;• [EE] On-Premise: New option to enable more security controls, following ANSSI (France) and BSI (Germany) recommendations. Contact us for more information.&lt;br/&gt;• [EE] Updated DELETE /template/:templateId : If there isn't a template, Carbone does not remove any template but will still respond that the command was successful with a code 200 .</description>
    </item>
    <item>
      <title>v3.6.0</title>
      <link>https://carbone.io/changelog.html#v3-6-0</link>
      <pubDate>Mon, 17 Apr 2023 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.6.0</guid>
      <description>• Support vector barcodes with the new svg option to improve print quality: {d.number:barcode(qrcode, svg:true)}</description>
    </item>
    <item>
      <title>v3.5.6 [EE]</title>
      <link>https://carbone.io/changelog.html#v3-5-6-ee</link>
      <pubDate>Thu, 16 Feb 2023 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.5.6 [EE]</guid>
      <description>• [EE] BREAKING CHANGE in Carbone On-Premise plugins: the callback of getPublicKey must take two arguments (err, publicKeys) .
If the first argument contains an error, the bad token is kept in quarantine area for 60s instead of infinitely.</description>
    </item>
    <item>
      <title>v3.5.5</title>
      <link>https://carbone.io/changelog.html#v3-5-5</link>
      <pubDate>Wed, 07 Dec 2022 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.5.5</guid>
      <description>• Add user-agent Carbone when webhook is called.</description>
    </item>
    <item>
      <title>v3.5.4</title>
      <link>https://carbone.io/changelog.html#v3-5-4</link>
      <pubDate>Wed, 15 Jun 2022 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.5.4</guid>
      <description>• [EE] Do not return an error when DEL /template is called and the template is already deleted on local storage. It may be already deleted by the plugin.</description>
    </item>
    <item>
      <title>v3.5.3</title>
      <link>https://carbone.io/changelog.html#v3-5-3</link>
      <pubDate>Wed, 25 May 2022 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.5.3</guid>
      <description>• [EE] Accept convCRLF before :html formatter to convert to &lt;br&gt;</description>
    </item>
    <item>
      <title>v3.5.2</title>
      <link>https://carbone.io/changelog.html#v3-5-2</link>
      <pubDate>Fri, 06 May 2022 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.5.2</guid>
      <description>• [EE] Add file verification on template upload</description>
    </item>
    <item>
      <title>v3.5.1</title>
      <link>https://carbone.io/changelog.html#v3-5-1</link>
      <pubDate>Wed, 04 May 2022 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.5.1</guid>
      <description>• Rollback fix in v3.4.9</description>
    </item>
    <item>
      <title>v3.5.0</title>
      <link>https://carbone.io/changelog.html#v3-5-0</link>
      <pubDate>Wed, 04 May 2022 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.5.0</guid>
      <description>• Formatters add() , mul() , sub() and div() accept simple mathematical expressions inside parenthesis. Example: {d.val:add(.otherQty  +  .vat  *  .price - 10 / 2) Only mathematical operators +, *, -, / are allowed, without parenthesis Multiplication and division operators ( * , / ) has higher precedence than the addition/substration operator ( + , - ) and thus will be evaluated first.</description>
    </item>
    <item>
      <title>v3.4.9</title>
      <link>https://carbone.io/changelog.html#v3-4-9</link>
      <pubDate>Wed, 27 Apr 2022 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.4.9</guid>
      <description>• Fix crash with very complex JSON map</description>
    </item>
    <item>
      <title>v3.4.8</title>
      <link>https://carbone.io/changelog.html#v3-4-8</link>
      <pubDate>Tue, 15 Mar 2022 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.4.8</guid>
      <description>• [EE] Fix: avoid crash when a tag is used on a shape instead of a sample image (v3.2.2-1)&lt;br/&gt;• [EE] Fix graceful exit on SIGTERM, keep the converter alive to finish remaining renders! As soon as Carbone has finished all renders, it exits after 15 seconds instead of 10 seconds&lt;br/&gt;• [EE] Fix DOCX documents that are including dynamic images and static charts</description>
    </item>
    <item>
      <title>v3.2.2-1</title>
      <link>https://carbone.io/changelog.html#v3-2-2-1</link>
      <pubDate>Fri, 11 Mar 2022 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.2.2-1</guid>
      <description>• Fix: avoid crash when a tag is used on a shape instead of a sample image</description>
    </item>
    <item>
      <title>v3.4.7</title>
      <link>https://carbone.io/changelog.html#v3-4-7</link>
      <pubDate>Tue, 01 Mar 2022 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.4.7</guid>
      <description>• [EE] Carbone-EE On-Premise accepts to read the license from environment variable CARBONE_EE_LICENSE , or --license CLI options</description>
    </item>
    <item>
      <title>v3.4.6</title>
      <link>https://carbone.io/changelog.html#v3-4-6</link>
      <pubDate>Fri, 18 Feb 2022 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.4.6</guid>
      <description>• [EE] The HTTP server starts as soon as possible, before LibreOffice.&lt;br/&gt;• [EE] Gracefully exits on SIGTERM. When the signal is received GET /status returns 503. The reverse-proxy should stop sending new requests As soon as Carbone has finished all renders, it exits after 10 seconds Whatever happens, it exists after 300 seconds.&lt;br/&gt;• [EE] Add barcode options: pass to the formatter :barcode options as second argument. It should keep the format "key:value", such as: {d.number:barcode(qrcode, width:300, height:100, includetext:false)} . Options available: width Width a number as millimeters. Example: {d.number:barcode(qrcode, width:300)} height Height a number as millimeters. Example: {d.number:barcode(qrcode, height:10)} scale Quality of the barcode as a number between 1 to 10 . The default value is 3 . Example: {d.number:barcode(qrcode, scale:3)} includetext Show the text and takes a Boolean as value, true or false . Example: {d.number:barcode(qrcode, includetext:false)} . textsize Number to change the size of the text. Example: {d.number:barcode(qrcode, textsize:20)} textxalign Change the alignment of the text horizontally. Takes only 4 values: left , center , right , or justify . The default value is center. Example: {d.number:barcode(qrcode, textxalign:right)} textyalign Change the alignment of the text vertically. Takes only 3 values: below , center , or above . The default value is below. Example: {d.number:barcode(qrcode, textyalign:above)} . rotate Rotate the barcode and the text. Takes only 4 values (case insensitive): N for not rotated, R for 90 degree right rotation, L for 90 degree left rotation, I of 180 degree rotation. Example: {d.number:barcode(qrcode, rotate:R)} or {d.number:barcode(qrcode, rotate:l)} . barcolor Color of bars as hexadecimal #RRGGBB . Example: {d.number:barcode(qrcode, barcolor:#1FDE25)} . Note: 6 characters required, and case insensitive. textcolor Color of the text as hexadecimal #RRGGBB . Example: {d.number:barcode(qrcode,… (read more: https://carbone.io/changelog.html#v3-4-6)</description>
    </item>
    <item>
      <title>v3.4.5</title>
      <link>https://carbone.io/changelog.html#v3-4-5</link>
      <pubDate>Wed, 09 Feb 2022 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.4.5</guid>
      <description>• Now the parameter converterFactoryTimeout updates also the HTTP socket timeout accordingly</description>
    </item>
    <item>
      <title>v3.4.4</title>
      <link>https://carbone.io/changelog.html#v3-4-4</link>
      <pubDate>Mon, 07 Feb 2022 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.4.4</guid>
      <description>• [EE] Experimental: increase the limit to 200 repetitions maximum when using the repetition feature {d[i+1*qty]</description>
    </item>
    <item>
      <title>v3.4.3</title>
      <link>https://carbone.io/changelog.html#v3-4-3</link>
      <pubDate>Mon, 31 Jan 2022 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.4.3</guid>
      <description>• [EE] Bump dependencies to latest version&lt;br/&gt;• [EE] Add options.isDebugActive . If true, POST /render returns additional information in debug sub-object: { "renderId" : "file.pdf" , "debug" : { "markers" : [ "{d.id}" , "{d.tab[i].id}" ] // all tags found in template }
}</description>
    </item>
    <item>
      <title>v3.4.2</title>
      <link>https://carbone.io/changelog.html#v3-4-2</link>
      <pubDate>Mon, 10 Jan 2022 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.4.2</guid>
      <description>• [EE] Fix do not crash if content passed to :html formatter is not a string</description>
    </item>
    <item>
      <title>v3.4.1</title>
      <link>https://carbone.io/changelog.html#v3-4-1</link>
      <pubDate>Thu, 09 Dec 2021 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.4.1</guid>
      <description>• Accepts "OpenDocument Text Flat XML" (.fodt) template files&lt;br/&gt;• Includes v3.3.3: fix timezone conversion with latest IANA database to manage correctly Daylight Saving Time&lt;br/&gt;• [EE] Fix dynamic colors for DOCX cells background</description>
    </item>
    <item>
      <title>v3.3.3</title>
      <link>https://carbone.io/changelog.html#v3-3-3</link>
      <pubDate>Fri, 26 Nov 2021 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.3.3</guid>
      <description>• Fix timezone conversion with latest IANA database to manage correctly Daylight Saving Time 2021-11-18T08:05+0000 -&gt; Europe/London -&gt; Thursday, November 18, 2021 8:05 AM</description>
    </item>
    <item>
      <title>v3.4.0</title>
      <link>https://carbone.io/changelog.html#v3-4-0</link>
      <pubDate>Wed, 17 Nov 2021 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.4.0</guid>
      <description>• Remove compatibility with NodeJS 10.x. V8 uses timsort since NodeJS 11. So we can remove timsort dependency. NodeJS 12+ required.&lt;br/&gt;• Bump DayJS to 1.10.7 and debug to 4.3.2&lt;br/&gt;• Improve thread management of LibreOffice on Linux: The system, which auto-restarts LibreOffice when it crashes or if there is a conversion timeout, could hang indefinitely on Linux.
On the Enterprise Edition, the global watchdog system was able to fix this bad behavior but it was slow.
Now, the LibreOffice is correctly killed. No zombie processes remaining. Avoid launching the parent process "oosplash" of LibreOffice Improve auto-restart mechanism Add debug logs All tests passed on Linux ð&lt;br/&gt;• [EE] Bump all dependencies&lt;br/&gt;• [EE] Fix random image display in LibreOffice documents. Sometimes, LibreOffice hides one image when two or more images share the same name. Now, Carbone generates a unique name for each image with the format "carbone-image-&lt;counter&gt;".&lt;br/&gt;• [EE] Experimental: Deffered rendering with a webhook, it is dedicated to render huge reports: Render a document as usual with the request POST /render/:templateID with the JSON dataset into the body request AND you have to insert the header carbone-webhook-url as a callback URL. It is an endpoint of your server listening when a document is rendered. Carbone will generate your document and it will notify your webhook with a renderID Retrieve the generated document with a GET /render/:renderID and voilÃ !&lt;br/&gt;• [EE] Experimental: add the possibility to duplicate rows using an attribute of an object Data : [ { "id" : "A" , "qty" : 2 } , { "id" : "B" , "qty" : 3 } , { "id" : "C" , "qty" : 0 } , { "id" : "D" , "qty" : 1 } ] Template : {d[i].id} - {d[i+1*qty].id} Result : A - A - B - B - B - D&lt;br/&gt;• [EE] â¡ï¸ Carbone supports 107 barcodes in DOCX/ODT/XLSX/ODS templates: Barcodes are inserted as a dynamic image to support more types In your template, barcodes tags must be inserted inside the title or description field of a… (read more: https://carbone.io/changelog.html#v3-4-0)</description>
    </item>
    <item>
      <title>v3.3.2</title>
      <link>https://carbone.io/changelog.html#v3-3-2</link>
      <pubDate>Mon, 11 Oct 2021 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.3.2</guid>
      <description>• [EE] Dynamic Image fix: image types verification support uppercase and lower case formats</description>
    </item>
    <item>
      <title>v3.3.1</title>
      <link>https://carbone.io/changelog.html#v3-3-1</link>
      <pubDate>Thu, 09 Sep 2021 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.3.1</guid>
      <description>• [EE] New Carbone On-premise: Pass the option "maxDataSize" to change the maximum JSON data size when rendering a report. The value must be bytes . The default value is 60MB.</description>
    </item>
    <item>
      <title>v3.3.0</title>
      <link>https://carbone.io/changelog.html#v3-3-0</link>
      <pubDate>Mon, 30 Aug 2021 00:00:00 +0000</pubDate>
      <guid isPermaLink="false">carbone-v3.3.0</guid>
      <description>• [EE] HTML Formatter: Fix: The HTML content is rendered without adding an empty line above it. Fix: The HTML content and static content are rendered in the expected order. New: If static content and Carbone tags are mixed with an HTML formatter in the same paragraph, the html is isolated into a new paragraph and each element are seperated above or below. For example, the following template on a text editor &lt;paragraph&gt;A rocket is made of {d.data:html} {d.details}, this is cool!&lt;/paragraph&gt; will be transform into 3 paragraphs on the generated report &lt;paragraph&gt;A rocket is made of &lt;/paragraph&gt;&lt;paragraph&gt;{d.data:html}&lt;/paragraph&gt;&lt;paragraph&gt; {d.details}, this is cool!&lt;/paragraph&gt; . Improved HTML rendering stability when it is mixed with lists, tables, and images.&lt;br/&gt;• [EE] Dynamic Checkbox are supported only for ODT file. A tag should be inserted into the checkbox property "name" and it is used to set the value of the checkbox on the generated report. The checkbox is ticked (checked) when the value is a Boolean with the value "true", a non empty string, a non empty array or a non empty object. If the exported file type is a PDF, the checkbox can be edited on the generated document. An ODT document created from MS Word that include checkboxes does not work. It is also not possible to create a list of checkboxes with the expressions [i] / [i+1] .&lt;br/&gt;• Accept null for the attribute complement in options</description>
    </item>
  </channel>
</rss>