This Month in Xilem, August 2024
Daniel McNab, September 11, 2024
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.
Linebender has a new logo, which was contributed by Markus Siglreithmaier. We're seeking feedback on Zulip in #linebender>logo.
Xilem
Xilem is our flagship GUI project, inspired by SwiftUI.
- We integrated basic animated variable font rendering (xilem#507).
- Philipp Mildenberger moved us back to using
ViewMarker
in xilem#472. This restores the ability to returnViewSequence
s, by making a tradeoff to work around Rust's faulty trait ambiguity rules. - We added Views for some existing and new widgets:
Xilem Web is a community managed experimental DOM implementation of the Xilem pattern. This month, the updates include:
- Support for returning multiple views from the main logic (xilem#482).
- Support for DOM templating, for efficient repeated creation of similar views (xilem#495).

Jared O'Connell additionally contributed a stopwatch example in xilem#492.
Masonry
Masonry is the widget system used by Xilem. This month has been dominated by Olivier's implementation of pass specification (rfcs#7):
- xilem#512: The new compose pass, which is used to minimise redraw when scrolling.
- xilem#510: Adds the mutate pass, which allows later passes to assume the tree structure is stable by limiting when tree mutation can occur.
- xilem#522: Implements paint and accessibility as passes, with follow-up by Tom Churchman in xilem#557.
- xilem#488 and xilem#540: updated event and pointer handling, and disabled handling respectively.
- In progress work includes layout in xilem#529, focus in xilem#538, animation in xilem#539 and scroll requests in xilem#550.
We also had some great community contributions, such as:
- Richard Dodd added a new progress Bar widget (xilem#513).
- Fixes for Portal scrolling, by Tom Churchman (xilem#563).

The progress bar widget was contributed by Richard Dodd in xilem#513.
We continue to make progress on other key features.
- Snapshot tests now are cross-platform and run in CI (xilem#233).
- Pan/flick gestures are being developed in xilem#562.
- Progress continues on text input for Android. This involves creating our own
Activity
, with support for both text input and accessibility. This newActivity
will useSurfaceView
like other modern native code based activities (GameActivity
,MakepadActivity
, etc.), and our aim is that it won't require a Java toolchain to build a simple application. - Progress continues on the Accessibility integration for Android. You can try this in xilem#575, or see it in the below video.
The Xilem to_do_mvc
example running with TalkBack integration.
Video provided by Matt Campbell.
Vello
Vello is our GPU vector renderer. We have made some really great progress in August.
- We now support blurred rounded rectangles, contributed by Markus Siglreithmaier (vello#665)
- Blend stack spilling was implemented, which allows blends more than four layers deep (vello#661).
- Fixes for some visual artifacts in vello#651, vello#659 and vello#673.
- Embedding existing wgpu textures is now supported (vello#636).
- We now support bitmap glyphs (i.e. emoji), in addition to our previous COLR support (vello#641).
- Work has begun on sparse strips, which is tracked in vello#670.
- Frame pacing for Android is being investigated and developed in vello#674.
- Thomas Smith has been doing some deep-dives into parallel scan, which is the core operation in Vello. This work can be found in #gpu>Progress for GPU's Without Forward Progress Guarantees.

Vello now supports blurred rounded rectangles, based on the maths from Raph's blog.
Left: Vello's blurred rounded rectangles test scene.
Right: Blitz's servo
example which renders box shadows using this feature.
Parley
Parley is a text layout library.
- Primitives required for robust text editing were added in parley#106.
Others
- Bruce Mitchener has started work on Interpoli, an animation support library.
- We have performed a retrospective on our last roadmap.
- Daniel and Olivier's "office hours" appointments can still be booked by anyone for open-ended time-limited discussion of the ecosystem.