Skip to content

Commit ae71451

Browse files
authored
This Month in Linebender, October 2025 (#130)
1 parent 048deff commit ae71451

File tree

2 files changed

+133
-0
lines changed

2 files changed

+133
-0
lines changed
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
+++
2+
title = "Linebender in October 2025"
3+
authors = ["Raph Levien"]
4+
+++
5+
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](https://rust-lang.org).
6+
7+
October saw steady progress on our core crates, including a number of releases.
8+
9+
## Vello
10+
11+
Vello is our GPU vector renderer.
12+
It can draw large 2D scenes with high performance, using GPU compute shaders for most of the work.
13+
14+
Laurenz Stampl has done his Masters degree at ETH Zurich on high performance CPU rendering of 2D graphics, particularly the techniques used in Vello CPU.
15+
The [masters thesis] is now published.
16+
It contains up-to-date background on 2D rendering, which is not well represented in the literature, as well as an explanation of the sparse strip method, and benchmarks.
17+
18+
<figure>
19+
20+
<img style="height: auto" width="1170" height="920" src="sparse_strip.png" alt="The tiling of a butterfly shape at four different levels of granularity. The top left shows many small tiles, while the bottom right shows fewer large ones, but also a much smaller fraction of space not covered by a tile.">
21+
22+
<!-- <img style="height: auto; width: 50%; margin-left: 25%;" width="666" height="673" src="hybrid-blending.png" alt="A series of overlapping shapes of various colours, variously composited."> -->
23+
24+
<figcaption>
25+
26+
An illustration from Laurenz Stampfl's Masters Thesis, showing the effect of tile size on rendering efficiency.
27+
28+
</figcaption>
29+
</figure>
30+
31+
We released version [0.0.4 of the sparse strips][sparse strips 0.0.4] versions of the renderer.
32+
It should be a solid version of [Vello CPU](https://crates.io/crates/vello_cpu), suitable for a wider range of applications where CPU-only rendering is appropriate.
33+
In addition, it is the initial release of Vello Hybrid, a newer approach that uses the GPU to do pixel compositing, but SIMD-accelerated geometry processing on the CPU.
34+
35+
Vello CPU now supports non-isolated blending ([vello#1159][] among others), which is important for HTML5 canvas compatibility.
36+
SVG and COLRv1 emoji, by contrast, which has set priorities for Vello in the past, only support isolated blending.
37+
There are also promising early results for supporting image filters including blurs.
38+
39+
A major development in Vello Hybrid is support for multiple image atlases ([vello#1252][]), which improves performance for image rendering.
40+
41+
Thomas Smith has been making excellent progress on rendering sparse strip alpha values in GPU compute shaders.
42+
This was the original motivation for the sparse strip work.
43+
You can follow the progress in [#vello > Thoughts on GPU sparse strips].
44+
45+
Work on Vello Classic focused on support for web standard compatibility, motivated by Servo integration.
46+
Those features include support for non-premultiplied alpha ([vello#1173][], [vello#1262][], [vello#1145][]).
47+
This has been released in [Vello v0.6.0], which also upgraded to wgpu v26 for compatibility with Bevy v0.17.
48+
49+
50+
## Masonry and Xilem
51+
52+
Masonry is the widget system developed by Linebender.
53+
It provides a non-opinionated retained widget tree, designed as a base layer for high-level GUI frameworks.
54+
55+
Xilem is our flagship GUI project, inspired by SwiftUI, which uses Masonry for its widgets.
56+
It lets you build user interfaces declaratively by composing lightweight views together, and will diff them to provide minimal updates to a retained layer.
57+
58+
We released [version 0.4][Xilem 0.4.0] of both Masonry and Xilem in October.
59+
This release comprises 7 crates, including Xilem Web.
60+
It is the first release to switch over to the new HarfRust library, developed by Google Fonts, for shaping, replacing Swash.
61+
62+
## Parley
63+
64+
Parley is a text layout library.
65+
It handles text layout, mostly at the level of line breaking and resolving glyph positions.
66+
67+
We released version [0.6 of Parley][parley 0.6.0].
68+
69+
Slint has moved from their hand-rolled text implementation to Parley, and released version [1.14][Slint 1.14].
70+
Linebender is thrilled to have other UI toolkits in the ecosystem adopt our crates.
71+
72+
Much of the development work on Parley is directed toward supporting HTML floats, particularly in Blitz.
73+
[parley#421][] is the main PR tracking this work, and references several other PRs.
74+
75+
There has also been some performance work, which especially impacts larger paragraphs.
76+
This work continues, and we hope to publish quantitative benchmark results (based on the benchmark suite in Cosmic Text) in November.
77+
78+
We're also in the process of migrating to ICU4X for Unicode primitives, replacing our own hand-rolled implementations ([parley#436][]).
79+
This change should improve maintainability.
80+
81+
## Fearless SIMD
82+
83+
Fearless SIMD is our SIMD infrastructure library.
84+
It provides a solid way for writing SIMD operations portably across Wasm, AArch64, x86, and x86_64.
85+
86+
We released [Fearless SIMD 0.3] in October.
87+
This release contains improvements in integer operations, particularly variable sized shifting, and better native support for fused multiply-add and multiply-subtract.
88+
89+
As development work, we are pursuing a new approach to using intrinsics safely inside `#[target_feature]` blocks: [fearless_simd#108].
90+
[Safe SIMD intrinsics](https://blog.rust-lang.org/2025/05/15/Rust-1.87.0/#safe-architecture-intrinsics) were added in Rust 1.87, and we encourage using them when writing architecture-specific code.
91+
An explicit design goal of Fearless SIMD is to allow portable code in cases where the functionality is reasonably common across architectures, but also facilitate "downcasting" to a specific SIMD level when those intrinsics offer higher performance than the portable choice.
92+
For more details on downcasting, see the [A plan for SIMD] blog post.
93+
94+
95+
## Get Involved
96+
97+
We welcome collaboration on any of our crates.
98+
This can include improving the documentation, implementing new features, improving our test coverage, or using them within your own code.
99+
100+
We host an hour long office hours meeting each week where we discuss what's going on in our projects.
101+
See [#office hours in Zulip](https://xi.zulipchat.com/#narrow/channel/359642-office-hours) for details.
102+
We're also running a separate office hours time dedicated to the renderer collaboration, details also available at that link.
103+
104+
If you wish to discuss the Linebender project individually, Daniel is offering ["office hours" appointments](https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ32eQYJ9DtZ_wJaYNtT36YioETiloZDIdImFpBFRo5-XsqGzpikgkg47LPsiHhpiwiQ1orOwwW2), which are free to book.
105+
It really helps us to learn what aspects our users care about the most.
106+
107+
[Xilem 0.4.0]: https://github.com/linebender/xilem/releases/tag/v0.4.0
108+
109+
[Vello v0.6.0]: https://github.com/linebender/vello/releases/tag/v0.6.0
110+
111+
[sparse strips 0.0.4]: https://github.com/linebender/vello/releases/tag/sparse-strips-v0.0.4
112+
113+
[parley 0.6.0]: https://github.com/linebender/parley/releases/tag/v0.6.0
114+
115+
[Fearless SIMD 0.3]: https://github.com/linebender/fearless_simd/releases/tag/v0.3.0
116+
117+
[Slint 1.14]: https://slint.dev/blog/slint-1.14-released
118+
[masters thesis]: https://ethz.ch/content/dam/ethz/special-interest/infk/inst-pls/plf-dam/documents/StudentProjects/MasterTheses/2025-Laurenz-Thesis.pdf
119+
[#vello > Thoughts on GPU sparse strips]: https://xi.zulipchat.com/#narrow/channel/197075-vello/topic/Thoughts.20on.20GPU.20sparse.20strips/near/543334092
120+
121+
[parley#436]: https://github.com/linebender/parley/pull/436
122+
123+
[vello#1173]: https://github.com/linebender/vello/pull/1173
124+
[vello#1262]: https://github.com/linebender/vello/pull/1262
125+
[vello#1145]: https://github.com/linebender/vello/pull/1145
126+
[vello#1159]: https://github.com/linebender/vello/pull/1159
127+
[vello#1252]: https://github.com/linebender/vello/pull/1252
128+
129+
[fearless_simd#108]: https://github.com/linebender/fearless_simd/pull/108
130+
131+
[A plan for SIMD]: https://linebender.org/blog/a-plan-for-simd/
132+
133+
[parley#421]: https://github.com/linebender/parley/pull/421
267 KB
Loading

0 commit comments

Comments
 (0)