Linebender in 2026 Q1
Raph Levien, April 19, 2026
Apologies for the delay in the update, as the past three months have been a hectic time. Two of the core Linebender team members, myself and Daniel McNab, have moved across the world and started full-time jobs at Canva. Getting onboarded has taken a lot of time and energy, but fortunately, work on Linebender crates remains a core part of our responsibilities. And in the meantime, the community has been pushing forward.
Vello
We've made big improvements to Vello Hybrid, both in capabilities and in performance.
Several releases, most recently sparse strips 0.0.7 (encompassing both Vello CPU and Vello Hybrid) and Vello 0.8.0.
Optimizations:
- Fast paths to bypass full coarse rasterization.
- Special case drawing rectangles (as opposed to general Bézier paths)
- First cut at glyph caching – more work is needed.
- TODO fill out more
Vello Hybrid is currently at roughly beta quality; there are some rough edges still and performance work to be done, but it should be usable.
While we were hoping for a project called Vello API to provide a unified, low level API encompassing both Vello CPU and Vello Hybrid, we ran into more complexity and difficulty than intended. There are two abstraction layers that can be used for a variety of renderers, both Vello and other renderers including Skia.
These two crates are fairly similar in scope, but with different emphasis. AnyRender prioritizes ergonomics, in general closely following the traditional canvas API, while imaging is focused on performance and a more complete set of operations.
Glifo
Until recently, all three manifestations of Vello each had their own copy of code to extract font outlines and render them. For ordinary fonts, this isn't a lot of logic on top of Skrifa. But for color emoji, it's more complicated and involves wiring up a lot more of the imaging model. We've also been finding scope for more operations at the layer between simple rendering and low-level font parsing, including ink skipping for underlines. To handle these functions, we created a crate called "parley_draw" inside the Parley repo, but that wasn't the right name or the right place for it, as these functions aren't really related to text layout. The crate has now been renamed to "Glifo," and has moved into the Vello repo. The new location is to reduce the friction to iterate on the implementation of atlas-based glyph caching.
For a more recent discussion of the scope and goals of Glifo, see the thread #vello > Glifo: A separation of concerns.
In the longer term, we would like to see Glifo become independent of Vello rendering and be adopted by other projects in the ecosystem, but for the time being it should be considered in development.
Parley
Parley has seen slow but steady improvements in features, including:
- parley#536 enumerate system fonts on mac using CoreText
- parley#540 Load fonts from system, and provided paths
- parley#551 CSS text-indent support
- parley#563 Implement all possible AccessKit text properties
Bevy has switched to Parley (Zulip thread).
CuTTY is a fork of Alacritty (a high performance terminal emulator) that has been ported to Vello and Parley (Zulip thread).
Other projects which now use Parley but have not previously been mentioned are:
- Gosub engine (browser engine)
- drafft-ink (infinite canvas whiteboard)
- Takumi (renders HTML/JSX/etc into images)
It's gratifying to see all this adoption. It seems like recognition that Parley is a viable text layout library for a broad range of applications.
Xilem and Masonry
Masonry has moved to imaging as an abstraction over the 2D rendering engine (xilem#1696). Previously it had been hardcoded to use Vello classic. Because imaging supports a wide variety of back-ends, Masonry can now operate in a wider variety of environments, including Vello CPU for rendering not requiring a GPU.
Masonry has bunch of new widgets, including Svg, Divider, CollapsePanel, StepInput, RadioButtons, Switch, Clip, Split.
Masonry now has a new layout system (xilem#1560).
Masonry is using ui-events for more of the integration with system capabilities, including IME (input method editing).
This reduces the dependency on winit, and opens the door to deployments not dependent on winit.
In the #masonry > Embeddable GUI backend Zulip thread, there is discussion of embedding Masonry in a VST plugin, using baseview instead of winit.
We're seeing some cool Xilem apps in the ecosystem, including a port of Runebender to Xilem (Zulip thread). That's especially gratifying to see, as it was the "hero app" for Druid for several years.
We've also gotten word of Boomaga-IPP, a refresh of a virtual printer project (Zulip thread).
Another interesting app is Scrolled Quran by Muhammad Ragib Hasin.
Related ecosystem projects
There's a lot of interesting activity surrounding Linebender, including projects that use Linebender crates, and adjacent bits of infrastructure.
Subduction
It's long been clear there is value in more fully exploiting system compositor capabilities, but it's a hard problem and Linebender projects have so far just been using plain windows and swapchains. I've had a blog post stuck in rough draft for over four years — How to think about the compositor in 2022. Compositor integration is needed for efficient video playback, and is also the best way to stitch native widgets into a GPU-accelerated rendering surface. Bruce Mitchener got tired of waiting and has started the subduction crate, with compelling examples. To learn more, see the Subduction: System compositor integration Zulip thread.
RustWeek
There are two talks from Linebender affiliated people: Nico Burns' talk on Blitz, and Taj Pereira and Alex Jakubowicz' talk on WASM. In addition, Linebender is one of the Unconference tracks. If you are interested in participating in the latter, reach out to me, as I'm the designated community leader.
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're also running a separate office hours time dedicated to the renderer collaboration, details also available at that link. Note that office hours are on a break for the remainder of the year. They are expected to continue in January, keep an eye on Zulip for details.