Bringing damage to the Skia compositor

After two posts on the layer-based SVG engine, this one moves to a very different corner of WebKit: the compositor that the WPE and GTK ports use to compose the final picture on the screen. It is something I have been working on together with Carlos Garcia Campos. Over the last couple of months we have been building a new compositor based on Skia to replace TextureMapper, the OpenGL-based compositor these ports have used for well over a decade. This new compositor is enabled by default in the freshly released WPE WebKit 2.54, and this post comes in two halves. The first is about the compositor itself, what it is and why we wanted it, which Carlos laid out in detail in his Web Engines Hackfest 2026 talk. The second, and the part I want to focus on, is something I built on top of it: teaching the compositor to repaint only the parts of a page that have actually changed from one frame to the next, rather than re-compositing the whole page every time. The idea goes by the name damage in graphics systems in general, and getting it to work well on the new compositor turned out to be an involved project. ...

September 21, 2026 · 24 min · Nikolas Zimmermann

Implementing compositing in LBSE

This is the second post about the recent work on the layer-based SVG engine (LBSE) in WebKit. In the first part I described conditional layer creation, where a renderer is given a RenderLayer only when it truly needs one. That made the common case fast and lean, but it also left something broken behind it: if an element is composited while its siblings are not, it no longer paints in its correct document-order slot. ...

July 22, 2026 · 12 min · Nikolas Zimmermann

Reducing layer overhead in LBSE

The last time I wrote here about the layer based SVG engine (LBSE) was back in autumn 2021, when I published the technical design document. A lot has happened since then, but maybe not what you would expect after almost four years. The engine landed in WebKit and it works well, but it is still not the default. You have to switch it on by toggling a runtime setting (in MiniBrowser). Between autumn 2021 and late 2022 LBSE was bootstrapped upstream, patch after patch. We added support for all the individual building blocks that make up SVG: paths, shapes, text, polygons, etc. within the new LBSE design. After that first big push the work stalled for a few months and resumed in mid-2023, and lasted until April 2024, due to generous support by Wix. During that period most advanced painting features, such as clipping, masking, filters, non-solid paint servers (patterns, gradients), markers, etc. were all implemented, sharing the logic with HTML and CSS rather than running through the separate code paths, as the legacy SVG engine did. Then the work paused again. A project of this size needs sustained funding to move forward, and for a while that funding was not there. ...

July 14, 2026 · 15 min · Nikolas Zimmermann

Introducing the layer based SVG engine

This article provides a technical design document for the layer based SVG engine.

October 29, 2021 · 1 min · Nikolas Zimmermann

Accelerating SVG - an update

Yikes, it’s been more than a year since my last post. Time flies, especially during the pandemic that hit us all like a stroke in 2020. Let me start with a few personal notes: Luckily no one in my family got the disease, but we paid a huge price - as everybody else - by reducing the social contacts down to an absolute minimum. My wife gave birth to our daughter in September 2020, so we were especially cautious that no one brings back Corona home. ...

October 13, 2021 · 2 min · Nikolas Zimmermann

CSS 3D transformations & SVG

As mentioned in my first article, I have a long relationship with the WebKit project, and its SVG implementation. In this post I will explain some exciting new developments and possible advances, and I present some demos of the state of the art (if you cannot wait, go and watch them, and come back for the details). To understand why these developments are both important and achievable now though, we’ll have to first understand some history. ...

December 12, 2019 · 10 min · Nikolas Zimmermann

Back in town

Welcome to my blog! Finally I’m back after my long detour to physics :-) Some of you might know that my colleague Rob Buis and me founded the ksvg project a little more than 18 years ago (announcement mail to kfm-devel) and met again after many years in Galicia last month. ...

November 24, 2019 · 5 min · Nikolas Zimmermann