Mako 9.0.0 Release Notes

RELEASED JULY 3RD, 2026

Introduction

Mako 9.0.0 marks a major advance in PDF output performance

Apex PDF Output (APO) is a high speed PDF output class that is now available as an alternative to Mako’s regular PDF output class, IPDFOutput.

Whether PDF is the final deliverable or an intermediate format in a larger automated process, output performance matters. Faster PDF writing means faster conversions, shorter production cycles, improved server throughput, and reduced processing cost at scale.

With the new implementation, Mako can write PDF output more than 2× faster in representative workflows, with benchmark results showing substantial reductions in elapsed processing time. For customers processing large volumes of PDF files, or generating PDF as part of a time-sensitive pipeline, this is a meaningful improvement that can be felt immediately.

See this knowledgebase article for details of how to use APO in your Mako project.

Customer issues

As usual, this release includes many improvements made in response to issues and requests reported by Mako customers. Where a link to the support issue is included, it can only be opened by the customer who reported it.

New Features

MAKO-5681 Add API to encapsulate rendered image to PWG

In Mako 8.4.0 we added the ability to save a document to PWG (Printer Working Group) format, commonly used in IPP printing. However, this was not as flexible as we felt was necessary, so in this release we have added a new image class, IDOMPWGImage, that includes an encoder, making it very easy to hook up to a renderer or other image processing. You can see it in action in this video that showcases Apex Renderer, Apex PDF output and PWG output.

MAKO-5573 Generate object map during rendering

This is a new Apex renderer feature. The object map is an 8-bit image with the same dimensions as the output, each byte of which identifies the objects that contributed to the associated image result, such as text, image, linework etc. Post-processing on the GPU has access to this buffer, or it can be retrieved for use on the CPU.

It is enabled by setting to true a new flag added to Apex: CRenderSpec::generateObjectMap

Each of the object map pixel values is an OR of flags depending on what kinds of object contributed to the pixel. For example, a fill overprinting text will result in both the "LineWork (0x08)" and "Text (0x10)" bits being set. See the API documentation for a description of the flags available.

A worked example can be found on GitHub that implements dual screening: images are screened with a traditional halftone and text / linework is FM-screened.

MAKO-5725 Allow for non-square screening in Apex

Apex allows for arbitrary aspect ratios when rendering, for example 600dpi x 1200 dpi. This change ensures AM screening (with CHalftonePostProcessSpec) is scaled correctly.

MAKO-5715 A libtiff security issue CVE-2026-4775 should be fixed

This was reported by a customer. We investigated and found that the vulnerable API was not used and was not linked into the Mako library.

As a group, we are currently undertaking a review of Hybrid Software’s readiness to fully comply with the Cyber Resilience Act (CRA), a European directive concerned with cybersecurity of software products sold within the EU. In due course, as a part of this effort we will publish SBOMs for Mako Core SDK generated directly by our build servers.

Customer issues and requests

MAKO-5774 MAKOSUP-11720 Add PostScript callbacks that allow output to be redirected

At the request of a customer, we have added a new feature to allow setting a handler class derived from IPSOutputHandler that can be used to redirect output from the PostScript %stdout and %stderr files, in the same way as postscript_output_cb and postscript_stderr_cb do for Jaws.

To capture output a user must create an IPSOutputHandler-derived class and pass it to IDistiller::setOutputHandler(). To show how to use it in code, we've added an example handler to the makodistiller example, include in the SDK (makoapps folder).

MAKO-5658 MAKOSUP-11773 (Optionally) work around bad marked content nesting

The PDF specification asserts that marked content and text objects must be nested properly. Despite this, PDFs continue to show up with this rule broken. The customer exhibit is yet another example. Mako already has some workarounds in place for this scenario, but in this case, those were not quite enough. An additional workaround has been added, but this feature is enabled only when the MAKO_PDFIN_ALLOW_SPLIT_TEXT_STATES environment variable is set to something non-empty.

MAKO-5669 MAKOSUP-11777 Exponential slowdown when creating/resaving OCR searchable layer

The OCR nature of this job is very relevant. While the text in the PDF is invisible, the tool generating this job has sized the text carefully, presumably to best match the text positioning of the original OCR content. Because of this, most of the text is painted with different font matrices but using the same font. This was a challenge for Mako’s PDF output, as a fontID is cached for each unique matrix. For this job, the list gets very long, ultimately leading to the slowdown.

The issues causing the slowdown are addressed in this release. When testing with the customer exhibit, processing time went from seven minutes before the change to one minute after.

MAKO-5731 MAKOSUP-11756 SWIG : Support getIsRect() output parameters firstLineIsX, closed in SWIG

This and similar issues arise when there is a mismatch between the definition of the objects available to developers using Mako’s C#, Java or Python wrapppers vs. those in C++. This release fixes the specific issue raised by the customer as well as issues of a similar nature.

MAKO-5684 MAKOSUP-11778 Extend CTransformMatrix constructor to cover 2D RectTmpls

The CTransformMatrix has a creator that transforms from one rectangle to another. A customer pointed out that when the source and destination have zero widths (or heights) they are effectively lines.

Mako now allows this case, enabled via an optional parameter, allowZeroWidthRect. When true, Mako treats zero-width rects as lines (either horizontal or vertical) and the matrix transform becomes a linear scaling.

MAKO-5685 MAKOSUP-11780 Font crash

The customer exhibit is a badly formed PDF. Other consumers including Acrobat complain about it. However, Mako should not crash and so we have engineered a fix in theis release to work around invalid composite glyphs found in the job.

MAKO-5714 MAKOSUP-11780 Java runtime error

This error was triggered during font processing, leading to the Java runtime error reported by the customer. This is now fixed.

MAKO-5739 MAKOSUP-11797 Fix two issues leading to a customer crash when reading a PDF

The customer exhibit had an unexpected XObject (form) construction that while entirely within the PDF spec, triggered an error in during interpretation. This is now fixed.

MAKO-5738 MAKOSUP-11795 PDF with Performance Problems

The customer file was slow to process not just in Mako but in several PDF consumers we tested with, which crashed or reported out of memory. The cause is a huge number of images (328,616) on a single page, and more than 1000 shadings and 2000 color spaces.

Profiling the job revealed a lot of time taken up with PDF dictionary lookups, so we took the opportunity to improve Mako’s dictionary handling. Along with some other performance improvements, the job now processes in approximately half the time.

MAKO-5759 MAKOSUP-11805 PCL5 issue rendering overlay characters with Mako

Workaround two PCL jobs that exhibited issues with text scaled incorrectly, which was found to be caused by undocumented behavior. Now fixed.

MAKO-5794 MAKOSUP-11825 PDF rendering issue with Apex renderer: render function does not return

This required correcting the handling of zero-width lines in the stroker, the internal component that applies “ink” along a path (comprising lines and Bézier curves) to make it visible.

MAKO-5798 MAKOSUP-11826 PCL Interpreter Enhancement: Add Support for Symbol Set 0G (HP Roman-8)

Add support for the PCL 0G (HP German) symbol set. This symbol set appears to be superseded by the 1G symbol set ISO 21: German. Although the PCL 5 comparison guide notes that this is “obsolete”, it’s clear it’s still in use.

MAKO-5799 MAKOSUP-11832 Add a callback feature to Mako IDistiller similar to that found in Jaws PDFLib

This duplicates a request from another customer. See MAKO-5774 for the solution.

MAKO-5804 MAKOSUP-11836 Font issue when saved as PDF/X-4

The customer exhibit has a font with unusual glyph names, mainly ASCII but with the odd binary character that does not validate as UTF-8. Normally Mako will sanitise such glyphs to ensure compliance with PDF/X-4, but doing so, as in this case, could cause a problem. The solution in this release works around the issues, allowing the text to render correctly, and the result to validate as conformant in Acrobat preflight.

Distribution

Windows VS2019 builds deprecated: Although Mako libraries built for Visual Studio 2019 (V142 build tools) will continue to be available, we recommend you switch to the new Mako libraries built for Visual Studio 2022 (V143 build tools). The VS2019 builds will be removed before the end of 2027.

Mako is distributed in a folder labelled MakoSDK that you will find in your support FTP folder. If you have access to Apex, there will be a second folder labelled MakoApexSDK. Obviously, the latter should be used for Apex-related development, but in other respects the Apex release is identical to the Jaws release and can be used for non-Apex development too.

Mako Version 9.0.0 is built for the following platforms:

Apple:

  • iOS (iOS 6.0 and later)

  • macOS (universal binary - x86-64 & ARM64, macOS 11 (Big Sur) and later)

GNU / glibc–based Linux:

  • Ubuntu 24.04 LTS

  • Mint 22.2

  • Debian Bookworm

  • Red Hat Enterprise v8.4

  • CentOS8

  • Debian Bookworm (arm32v7 for Raspberry Pi)

  • Debian Bookworm (arm64v8 for Raspberry Pi)

musl-based Linux:

  • Alpine Linux v3.17.10

Windows platforms:

  • Windows (static and dynamic libs, VS 2022 (V143), x64 and ARM64)

  • Windows (static and dynamic libs, VS 2019 (V142), x64 and x86)

    • Found in Windows_VS2019 folder

Android:

  • The Android build is excluded from this release. Contact Mako support if you need Mako for Android.

Mako supports the following programming languages.

  • C++ (Mako is written in C++)

  • C# (.NET Core (multiple platforms) and .NET Framework (Windows only))

  • Java (built with OpenJDK11 and therefore compatible with later versions)

  • Python

The alternatives to C++ are built using SWIG (http://www.swig.org ) which provides a translation to the native libraries. They are found in these distribution folders, found in the SWIG folder:

  • Linux_GNU_SWIG_(C#-Java-Python)

  • Linux_Alpine_SWIG_(C#-Java-Python) – Alpine v3.17

  • Linux_Centos8_SWIG_(C#-Java-Python)

  • Linux_Ubuntu_SWIG_(C#-Java-Python)

  • macOS_SWIG_(C#-Java-Python)

  • Windows_SWIG_(C#-Java-Python)

Cross-platform Java build

The folder SWIG/CrossPlatformJAR contains Java builds that combine the implementations for multiple platforms into a single JAR package, thereby simplifying deployment. The folder contains two combinations, one for Windows & Linux and another for Windows, Linux and macOS. A pre-built sample app is included: makoconverter.jar, and additionally for Apex, simpleapexrender.jar.

ColorLogic

MAKO is available with the ColorLogic CMM, supplied by our Hybrid Group sister company, ColorLogic Gmbh. All builds can be found in the ColorLogic folder. C++ builds are available for Windows, macOS and Linux, and there is also a Windows SWIG build for development with C#, Java or Python that use the ColorLogic CMM.

Windows: All Windows C++ ColorLogic builds are VS2022 only (V143 build tools)