RSSAmplifier

Blog

speedata news

Recent content on speedata news

news.speedata.deRSS feed ↗15 posts

Latest posts

The manual was complete. Something was still missing.

I have been writing the speedata Publisher manual for almost 17 years now, pretty much since the first lines of code in 2009. And from the beginning, completeness was the goal: every command documented, every attribute explained, every concept covered somewhere. Over the years the manual grew into hundreds of pages, in German and English, and whenever a user asked something that was not in there,…

Checking PDF/UA without firing up a Windows VM

A lot of what I do with the speedata Publisher ends up as accessible PDF. PDF/UA-1 is a common customer requirement, and the Publisher has been producing tagged PDFs for a while now. So I spend more time than I would like to admit checking PDFs for accessibility compliance. The de-facto tool for this is PAC from the PDF Association. It is good, it is free, and it is Windows-only. On macOS that…

Version 5.6 released

Version 5.6 of the speedata Publisher is out. The last stable release (5.4) was at the end of February, so it has been about 100 days of work, 25 small patch releases in between, and quite a few new things. Get a coffee, there is a lot in this one. I have to admit that I sat on some of these changes a bit longer than planned. Originally I wanted a stable release after about six weeks, but then one…

Version 5.4 released

Version 5.4 of the speedata Publisher is now available. This is a solid update with speed improvements, better HTML support, and a few nice additions. Here is what changed since 5.2. Speed This version is noticeably faster. Several internal optimizations — grid allocation, paragraph post-processing, and general typesetting — add up to a real difference, especially for larger documents. There is…

Structuring layouts with the new Section element

Layout files in the speedata Publisher can get long. Really long. A product catalog with conditional page types, fallback logic, index generation, and a dozen different record types easily grows to a few hundred lines of XML. And at that point, scrolling through the file becomes a chore. I have been wanting a way to organize layout code into logical groups for a while — something like regions or…

I benchmarked 6 PDF engines — the fastest is not the one I’d pick

I’m building a typesetting engine for a living ( speedata Publisher ). People keep asking me “why not just use Typst?” or “isn’t WeasyPrint good enough?” and I never had a good answer with real numbers. Just gut feeling. So I decided to actually measure it. I set up a simple benchmark, same document with all six tools. And what I learned was maybe not what I…

Fixing macOS notarization issues in the speedata Publisher 5.2.0

I have rebuilt the macOS packages of the speedata Publisher and released them as version 5.2.1. The Windows and Linux packages remain at 5.2.0, because the changes are macOS-specific. This post is a short write-up of what broke, how I debugged it, and which tools I used along the way. If you ever need to get a macOS command line tool notarized, this might save you some time (or at least a bit of…

Version 5.2 released

Big Improvements Under the Hood We’re happy to announce a new development snapshot of the speedata Publisher ! This release comes with major internal improvements, cleaner architecture, and a bunch of small but meaningful user-facing enhancements. Rewritten XML Parser The XML parser has been completely reimplemented in Go, with a stronger focus on correctness , performance , and test coverage . It…

billingcat – invoicing software powered by the speedata Publisher

It has been a while since my last post on this blog. This time I would like to introduce a project that is a bit different in scope but technically closely related to the speedata Publisher: billingcat – an open-source application for invoicing and simple customer relationship management. What is billingcat? billingcat is an open-source project that combines two essential tasks for freelancers and…

High speed PDF generation with boxes and glue

This article is not up to date anymore, I will leave it online. Risor is not supported anymore Lua is now the choice of scripting language. I will post a follow-up soon. I have been playing with electronic invoices (especially the German and French ZUGFeRD/Factur-X format) for a while now. The speedata Publisher has support for ZUGFeRD since 2017. The next step is to make (my other PDF generation…

Version 5 Released

Almost five years after releasing version 4.0 of the speedata Publisher , it is time for version 5.0. This is a short announcement, since most changes have been covered before. The speedata Publisher looks the same since its beginning, but there have been major changes under the hood since version 4: Integration of HarfBuzz for left to right and right to left text layout, even mixed…

speedata Publisher and AI

Don’t worry, the speedata Publisher will not gain any half-baked, annoying artificial intelligence features. This post is about chatting with some of the more famous AI chats (ChatGPT, Google Gemini, DeepSeek). I have tried to find out how good these AI chats know the speedata Publisher and if they can help users to generate a layout. There is still a long road ahead, but read on. A big…

Electronic invoices

The following text is written from a German perspective. This should apply to all parts of the European Union, although with likely differences in other countries. Since the beginning of 2025, all companies in Germany have had to send and receive electronic invoices (with overriding deadlines and a few exceptions). This affects me too, so I asked myself (out of curiosity), what is an electronic…

Release stable version 4.20

After more than half a year, 150 commits and 40 minor releases, I have now published version 4.20, which is hopefully the last stable version before the “big five”. As always, old document should run without any changes. You might have to switch on compatibility modes with --xpath=lxpath and --option fontloader=fontforge on the command line, but in most cases, the new defaults should not change…

Creating PDF with JavaScript

I have created JavaScript bindings for boxes and glue . These bindings are made with goja . Let me show you an example: const bag = require ( 'bag:backend/bag' ) const fe = require ( 'bag:frontend' ) const f = fe . new ( 'out.pdf' ) const str = `In olden times when wishing still helped one, there lived a king whose daughters were all beautiful; and the youngest was so beautiful that the sun…