Linebender in January 2025

Kaur Kuut, Daniel McNab, Tom Churchman, Raph Levien, March 3, 2025

Linebender is an informal open-source organization working on various projects to advance the state of the art in GUI for the Rust programming language.

Xilem

Xilem is our flagship GUI project, inspired by SwiftUI. It lets you build user interfaces declaratively by composing lightweight views together, and will diff them to provide minimal updates to a retained layer.

Xilem saw decent direct progress in January and of course Xilem also benefits from all the progress in the rest of our stack which is detailed in later sections.

A screenshot of a Xilem example app. It shows sixteen different facial expression emoji with a cat face with a wry smile being selected.
Xilem emoji picker example app, showing various emoji options.

We also improved documentation, see e.g. xilem#818.

Masonry

Masonry is the widget system used by Xilem. It provides a non-opinionated retained widget tree, designed as a base layer for high-level GUI frameworks.

January was quite a busy month for Masonry with lots of significant changes landing, including both new features and improved old ones. Most notable are the following highlights:

We also improved documentation a lot, see e.g. xilem#787, xilem#809, xilem#811, xilem#813, xilem#815, xilem#824, xilem#826, xilem#829, xilem#832, and xilem#835. Additionally a bunch of stale code got cleaned up.

Vello

Vello is our GPU vector renderer. It can draw large 2D scenes with high performance, using GPU compute shaders for most of the work.

We released Vello 0.4.0 which has a bunch of improvements and fixes from the preceding four months. Among the improvements is the change from December that Vello now uses our own Color library. Highlights from the additions in January include image extend modes, alpha, and nearest neighbor sampling and correct rendering of Apple Color Emoji.

A screenshot of a Vello demo app. It shows four different variations of an image extended with nearest neighbor filtering.
Vello demo, showing image extend modes with nearest neighbor filtering.

Of course work didn't stop with this release. In preparation for the next release we have already upgraded Vello to use wgpu 0.24.0.

Kurbo

Kurbo provides data structures and algorithms for curves and vector paths.

Parley

Parley is a text layout library. It handles text layout, mostly at the level of line breaking and resolving glyph positions.

In January, a variety of layout edge cases have been fixed, support for bidirectional text was expanded, and testing of text layout and selection has improved.

Peniko

Peniko provides a set of shared types for concepts that are important for drawing/stroking paths, but excluding the path geometry itself (which can be found in Kurbo). It includes types for brush styles (including gradient) and color.

We released Peniko 0.3.1 which was a simple maintenance release with tweaked docs and updated dependencies.

Color

Color provides functionality for representing, converting, parsing, serializing, and manipulating colors in a variety of color spaces. It closely follows the CSS Color Module Level 4 draft spec.

We released Color 0.2.2, soon followed by Color 0.2.3, the latter of which added easier methods to convert 8-bit colors from byte streams (for use with GPUs) and to other color representations in color#135 and color#136. This release also saw the addition of the ACES2065-1 color space in color#124.

Velato

Vello SVG

We released Vello SVG 0.6.0 which most notably includes:

Kompari

Kompari is a tool for visual inspection of snapshot tests.

Resvg

SVG Types

We released SVG Types 0.15.3 with a few minor fixes. This is also the first release under the stewardship of Linebender.

Tiny Skia

SimpleCSS

We released SimpleCSS 0.2.2 with no_std support, updated docs clarifying Linebender involvement, and to test run the publishing workflow.

Research and Future Directions

Linebender has an origin story in being a very research oriented group, looking to break new ground. While we are focused on shipping code today, we still have an eye on the future and how to be prepared for the new opportunities and technologies that are coming.

While Vello has unmatched rendering speed thanks to its GPU-driven architecture, there are two practical tradeoffs: it can require unpredictable amounts of memory, and it doesn't work on downlevel GPUs with weak or nonexistent support for compute shaders. Raph Levien has been exploring a possible hybrid CPU/GPU direction for Vello to address these issues. Read the design doc, follow the Zulip thread, or stay tuned for more developments.

Get Involved

We welcome collaboration on any of our crates. This can include improving the documentation, implementing new features, improving our test coverage, or using them within your own code.

We host an hour long office hours meeting each week where we discuss what's going on in our projects. See #office hours in Zulip for details.