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.
- xilem#420, xilem#833: Added emoji picker example.
- xilem#753, xilem#828: Added support for transforming widgets with
kurbo::Affine
. - xilem#806: Made
Pod
more flexible to allow creating a wider variety of wrapper widgets. - xilem#840: Updated to
vello
0.4.0.

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:
- xilem#737: Added
zstack
widget for composing widgets on top of each other. - xilem#753: Added support for transforming widgets with
kurbo::Affine
. - xilem#808:
AppDriver
now takes a reference toRenderRoot
for more flexibility. - xilem#820: Added a basic widget inspector for debugging.
- xilem#822: Now widget focus is cleared when a user clicks outside of that focused widget.
- xilem#823: When text of a text area is changed the cursor now gets moved to the end.
- xilem#827: Refactored
TreeArena
. - xilem#830: Improved handling of window focus.
- xilem#831: Applied
is
/has
naming convention more consistently across context method names. - xilem#834: Fixed crashing in
run_single_update_pass
. - xilem#837: Removed a bunch of redundant
Box
usage aroundWidget
. - xilem#841: Added features to help test
Textbox
. - xilem#848: Reorganized modules.
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.

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.
- kurbo#409: Added
turn_90
/rotate_scale
methods toVec2
, and fixed the docs ofVec2::cross
.
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.
- parley#238: Updated to
swash
0.2.0, which paves the way for futureno_std
support. - parley#239: Took another step towards supporting
no_std
by enabling further testing in CI. - parley#241: Allows configuring the behavior of alignment for lines that overflow the container width.
- parley#244: Added screenshots to selection area and cursor positioning tests.
- parley#245: Enabled detection of the base direction of text layouts (left-to-right or right-to-left).
- parley#249: Fixed issues related to line breaking around inline boxes, by new Linebender member Wim de With.
- parley#254: Now adhering to the CSS white space model in stripping leading white space following a new line in white space collapsing mode.
- parley#256: Corrected the calculation of trailing white space, also by Wim de With.
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
- velato#49: Updated to
vello
0.4.0.
Vello SVG
We released Vello SVG 0.6.0 which most notably includes:
- vello_svg#50: Added support for raster images to be completely disabled via a feature flag.
- vello_svg#53: Updated to
vello
0.4.0.
Kompari
Kompari is a tool for visual inspection of snapshot tests.
- kompari#13: Interactive review (in HTML).
- kompari#14: Rework of repository layout.
- kompari#16: Alternative diff views.
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
- tiny-skia#146: Added
scale_by
/scale_to
methods toSize
.
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.
- Daniel and Olivier's "office hours" appointments can still be booked by anyone for open-ended discussion of the ecosystem.