Linebender in April 2025

Daniel McNab, Taj Pereira, Tom Churchman, May 7, 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.

RustWeek

Many members of the Linebender community will be attending the RustWeek 2025 conference, in Utrecht next month. At the time of writing, there are no longer tickets available, although there is a waitlist. Raph Levien will be giving a talk, titled Faster, easier 2D vector rendering. This will be covering a lot of the sparse strips work discussed in the Vello section.

Matt Campbell will give a talk, titled AccessKit: reusable UI accessibility.

We will also be attending the unconference, as part of the "UI, App dev & Browser Summit" group. We're looking forward to working with other teams in the Rust UI ecosystem there.

Masonry

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

To do list app, where the next item input says turn off the newline factory, with newlines before newline and factory. The final item also contains a newline.

Masonry now has support for multi-line text inputs.

Xilem

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

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.

Progress on the sparse strips renderers has also been continuing at pace. The big standout this month is the significant leap in Vello CPU functionality:

Cowboy emoji, with a rainbox gradient mixed on top.

An adapted version of Vello CPU's tests, showing support for blending, gradients and image rendering.

The above PRs set the foundation for introducing these features into Vello Hybrid over the coming months. Another notable released feature is text outline rendering, which allows both renderers to draw text (emoji are not yet supported).

Our working roadmap can be found here. This roadmap outlines our planned timeline for work on the renderers over the next year.

Parley

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

Text with a line break halfway through the word Antidisestablishmentarianism. The first characters after this break are underlined (indicating that those have the WordBreak property set).

parley#315 added the WordBreak style property, which is set to BreakAll on 'anism' in this screenshot.

Kurbo

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

We released Kurbo 0.11.2, adding the Triangle shape, providing more ergomic methods on various shapes, and improving performance. The following are some highlights of this release. See the changelog for a full overview.

Multiple improvements to Kurbo are on the roadmap, such as improved stroke expansion in kurbo#427.

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.3.0, featuring the addition of manual chromatic adaptation and absolute color conversions, improved type conversion ergonomics, and more. This month saw the following changes, all included in the 0.3.0 release. See the changelog for a full overview.

Android View

Android View is a platform integration for Rust code in Android apps. In April, Android View gained support for text input using the software keyboard, with accessibility support.

Android Screen, with text on the top half, and a keyboard visible with the word listening, followed by an ellipsis.

Android View now allows many input methods on Android. This screenshot shows voice to text working in an app using Linebender libraries. This image has been edited to remove blank areas.

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.

Towards the end of April, some members of Linebender started working on ecosystem standardisation of input events, based on the web input events specification. This work is happening in the UI Events repository. This is not a Linebender project, but we're watching it with great interest.

We've also started thinking about how to make a renderer abstraction, allowing APIs which can use any of Vello's backends. The largest difficulty there is related to resources such as images. For example Vello Hybrid's image type would be a wgpu Texture, whereas Vello CPU should just use a heap-allocated buffer. We have some existing prototypes, see #vello > Rendering abstraction prototype for example. This work is likely to now continue after RustWeek.

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. We've also started a separate office hours time dedicated to the renderer collaboration, details also available at that link.