Linebender in December 2024

Bruce Mitchener, Daniel McNab, January 13, 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.

We'd like to wish everyone a happy New Year!

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.

Last month, we continued down the path to supporting a richer color model and wider gamuts. We released Peniko 0.3.0 which replaces the old color code with our new Color crate.

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.

Last month, we released Color 0.2.0 and Color 0.2.1.

The release of Color 0.2.0 contained a significant amount of work to enable use with Peniko and the rest of the Linebender stack.

Color 0.2.1 included improvements to parsing.

We encourage people to give Color a try and let us know how it goes.

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.

Vello is now using the new Peniko 0.3 release along with the Color crate.

Parley

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

Kompari

Kompari is a tool for visual inspection of snapshot tests. This project is a new addition to Linebender, generously contributed by Ada Böhm and is currently in pre-alpha.

A screenshot of a web page, titled 'Kompari Report'. The report has a section called 'test1.png', which shows that two images of the text 'Linebender' have 2482 different pixels. An image displaying which pixels are different is next to these.

A report for snapshot test, generated by Kompari.

We plan for Kompari to standardise and improve the developer experience of snapshot tests in Linebender (and beyond). It can generate reports which summarises failed snapshot tests, and will also contain functionality for interactive blessing of new snapshots. This reporting can be integrated into a repository as an xtask:

cargo xtask report

Kompari also includes a standalone CLI, for projects which don't use the xtask pattern or are trialling Kompari.

In December, we added initial functionality and established CI in the repository. Ongoing work includes:

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.

Updates to Parley integration and usage for IME and text editing:

The new tree arena landed and saw some performance improvements:

We updated to start using the Color crate:

Miscellaneous:

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.

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.

We have a couple of active and ongoing research projects:

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.