Skip to content

Commit ea49298

Browse files
DJMcNabraphlinus
andauthored
This Month in Linebender, June 2025 (#118)
[#linebender > This month in Linebender @ 💬](https://xi.zulipchat.com/#narrow/channel/419691-linebender/topic/This.20month.20in.20Linebender/near/526810031) --------- Co-authored-by: Raph Levien <[email protected]> Co-authored-by: Raph Levien <[email protected]>
1 parent beec196 commit ea49298

File tree

3 files changed

+173
-0
lines changed

3 files changed

+173
-0
lines changed
Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
+++
2+
title = "Linebender in June 2025"
3+
authors = ["Daniel McNab", "Raph Levien"]
4+
+++
5+
6+
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).
7+
8+
## Vello
9+
10+
Vello is our GPU vector renderer.
11+
It can draw large 2D scenes with high performance, using GPU compute shaders for most of the work.
12+
13+
- [vello#1062][]: Add smoke test for layer size, by sagudev.
14+
- [vello#1019][]: Add Kompari support.
15+
16+
This month we continued seeing a massive amount of activity on the sparse strips renderers, a collaborative evolution of Vello.
17+
18+
- [vello#1023][], [vello#1029][], [vello#1041][] (among others): Optimisations.
19+
- [vello#1044][], [vello#1047][]: Multithreading support.
20+
- [vello#1053][]: Add SIMD support (see below).
21+
- [vello#1060][]: Make glyph rendering optional in the CPU renderer.
22+
- [vello#1065][], [vello#1070][]: Improved automated testing.
23+
- [kurbo#427][] (in review): A new stroke expander with significant performance improvements.
24+
25+
This [working roadmap](https://docs.google.com/document/d/1ZquH-53j2OedTbgEKCJBKTh4WLE11UveM10mNdnVARY/edit?tab=t.0#heading=h.j3duh9pgdm94) outlines the planned timeline for work on the renderers over the next year.
26+
27+
### Fearless SIMD
28+
29+
Much of the recent work on sparse strip rendering has been SIMD-accelerated implementation of the parts running on CPU.
30+
Here, [vello#1053][] is something of the tip of the iceberg.
31+
Our [*A plan for SIMD*](@/blog/2025-06-06-a-plan-for-simd.md) blog post sketched out our plans to build an abstraction layer to write SIMD code in a safe, portable way, in contrast to the original prototyping which was all done in unsafe `core::arch` intrinsics.
32+
Since then, there has been rapid progress on the [Fearless SIMD] project, focusing on SIMD primitives needed to accelerate rendering.
33+
Support for WASM is particularly strong.
34+
35+
The crate has been moving fast and there are no stability guarantees yet, but we are very hopeful that it will be a solid foundation for other projects that can benefit from SIMD acceleration.
36+
We invite projects to start experimenting, and give us feedback.
37+
Discussion is in the [#simd channel] on the Linebender Zulip.
38+
39+
## Masonry
40+
41+
Masonry is the widget system developed by Linebender.
42+
It provides a non-opinionated retained widget tree, designed as a base layer for high-level GUI frameworks.
43+
44+
- [xilem#987][]: Route text events to the root widget if there is no focused widget.
45+
- [xilem#1038][]: Support multiple (top-level) desktop windows in Masonry, by Martin Fischer.
46+
- [xilem#1009][]: Add properties which only take effect when a widget is hovered/disabled/active.
47+
- [xilem#1043][], [xilem#1044][]: Split out a Masonry Core crate, which can increase parallelism in compilation.
48+
- [xilem#1048][]: Split testing into a Masonry Testing crate, allowing certainty that test code isn't inadvertently included in release binaries.
49+
- [xilem#1053][], [xilem#1054][], [xilem#1055][], [xilem#1056][]: Add properties to `Textbox`, `Checkbox`, `Flex`, `Grid`, and `SizedBox`.
50+
- [xilem#1086][]: Validate accessibility tree updates in tests.
51+
52+
<figure>
53+
54+
<img style="height: auto" width="1464" height="955" src="multiple_windows.png" alt="Three overlapping windows on a black background. The frontmost window is titled Second Window, has text displaying a count of 11, a plus button, and a minus button, stacked vertically. Behind it is First Window, which is the same with a count of 13. At the back is a window titled Multiple Windows, which shows a map from the aforementioned windows to their values above a textbox and Add button. The textbox contains the text Next Window.">
55+
56+
<figcaption>
57+
58+
As of [xilem#1038][] Masonry (and Xilem) support multiple windows.
59+
60+
</figcaption>
61+
</figure>
62+
63+
## Xilem
64+
65+
Xilem is our flagship GUI project, inspired by SwiftUI, which uses Masonry for its widgets.
66+
It lets you build user interfaces declaratively by composing lightweight views together, and will diff them to provide minimal updates to a retained layer.
67+
68+
- [xilem#608][]: A `ViewSequence` called `WithoutElements`, to allow including side-effects in lists of element children.
69+
- [xilem#992][]: Add support for multiple (top-level) desktop windows in Xilem, by Martin Fischer.
70+
- [xilem#1071][]: Split Xilem into modules.
71+
- [xilem#1079][], [xilem#1085][]: Provide the app's state to each `View` during more phases. This will allow many future architecture explorations.
72+
- [xilem#1078][]: Allow accessing the channel of new requests for a `worker` directly.
73+
- [xilem#1094][]: Refactor `lens` into its own view so that the state doesn't need to passed when constructing the view.
74+
- [xilem#1097][]: Small example to teach variable length lists, by Nils Martel.
75+
- [xilem#1102][]: Add a helper for flex rows, to improve readability of layout code.
76+
77+
In June, we started a new initiative for Xilem, a Mastodon client example.
78+
This is being developed alongside Xilem to focus its development.
79+
80+
- [xilem#1087][]: Display a single scrollable timeline.
81+
- [xilem#1089][], [xilem#1116][]: Add simple HTML processing to make posts more readable.
82+
- [xilem#1091][]: Load and display the avatar of post authors.
83+
- [xilem#1092][]: Improve the styling of posts.
84+
- [xilem#1108][]: Correctly display boosted posts.
85+
- [xilem#1114][]: Allow viewing replies to a post.
86+
87+
<figure>
88+
89+
<img style="height: auto" width="802" height="609" src="placehero.png" alt="A window vertically split into two panes, where the left pane is empty except for the text Connected to Mastodon. Two Mastodon Posts are visible in the right pane, each showing their author's avatar and name, the post's time and contents, and the number of interactions the post has had. Each post also has a button labelled View Replies.">
90+
91+
<figcaption>
92+
93+
The Hero app is currently hardcoded to show a subset of [Raph's timeline](https://mastodon.online/@raph).
94+
95+
</figcaption>
96+
</figure>
97+
98+
## Parley
99+
100+
Parley is a text layout library.
101+
It handles text layout, mostly at the level of line breaking and resolving glyph positions.
102+
103+
In June, we released Parley [0.5.0](https://github.com/linebender/parley/releases/tag/v0.5.0).
104+
This includes features we talked about in previous months, including restoring `Layout: Sync`, and improvements to line height handling.
105+
106+
- [parley#376][]: An initial version of `AttributedText`.
107+
- [parley#381][]: Select "hard lines" rather than soft lines when triple clicking.
108+
- [parley#382][]: Use ui-events-winit in the Vello Editor example.
109+
110+
## Android View
111+
112+
[Andrdoid View](https://github.com/rust-mobile/android-view) was handed over to the Rust Mobile organisation.
113+
114+
## Get Involved
115+
116+
We welcome collaboration on any of our crates.
117+
This can include improving the documentation, implementing new features, improving our test coverage, or using them within your own code.
118+
119+
We host an hour long office hours meeting each week where we discuss what's going on in our projects.
120+
We're also running a separate office hours time dedicated to the renderer collaboration, details also available at that link.
121+
See [#office hours in Zulip](https://xi.zulipchat.com/#narrow/channel/359642-office-hours) for details.
122+
123+
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.
124+
It really helps us to learn what aspects our users care about the most.
125+
126+
[kurbo#427]: https://github.com/linebender/kurbo/pull/427
127+
128+
[parley#376]: https://github.com/linebender/parley/pull/376
129+
[parley#381]: https://github.com/linebender/parley/pull/381
130+
[parley#382]: https://github.com/linebender/parley/pull/382
131+
132+
[vello#1019]: https://github.com/linebender/vello/pull/1019
133+
[vello#1023]: https://github.com/linebender/vello/pull/1023
134+
[vello#1029]: https://github.com/linebender/vello/pull/1029
135+
[vello#1041]: https://github.com/linebender/vello/pull/1041
136+
[vello#1044]: https://github.com/linebender/vello/pull/1044
137+
[vello#1047]: https://github.com/linebender/vello/pull/1047
138+
[vello#1053]: https://github.com/linebender/vello/pull/1053
139+
[vello#1060]: https://github.com/linebender/vello/pull/1060
140+
[vello#1062]: https://github.com/linebender/vello/pull/1062
141+
[vello#1065]: https://github.com/linebender/vello/pull/1065
142+
[vello#1070]: https://github.com/linebender/vello/pull/1070
143+
144+
[xilem#608]: https://github.com/linebender/xilem/pull/608
145+
[xilem#987]: https://github.com/linebender/xilem/pull/987
146+
[xilem#992]: https://github.com/linebender/xilem/pull/992
147+
[xilem#1009]: https://github.com/linebender/xilem/pull/1009
148+
[xilem#1038]: https://github.com/linebender/xilem/pull/1038
149+
[xilem#1043]: https://github.com/linebender/xilem/pull/1043
150+
[xilem#1044]: https://github.com/linebender/xilem/pull/1044
151+
[xilem#1048]: https://github.com/linebender/xilem/pull/1048
152+
[xilem#1053]: https://github.com/linebender/xilem/pull/1053
153+
[xilem#1054]: https://github.com/linebender/xilem/pull/1054
154+
[xilem#1055]: https://github.com/linebender/xilem/pull/1055
155+
[xilem#1056]: https://github.com/linebender/xilem/pull/1056
156+
[xilem#1071]: https://github.com/linebender/xilem/pull/1071
157+
[xilem#1078]: https://github.com/linebender/xilem/pull/1078
158+
[xilem#1079]: https://github.com/linebender/xilem/pull/1079
159+
[xilem#1085]: https://github.com/linebender/xilem/pull/1085
160+
[xilem#1086]: https://github.com/linebender/xilem/pull/1086
161+
[xilem#1087]: https://github.com/linebender/xilem/pull/1087
162+
[xilem#1089]: https://github.com/linebender/xilem/pull/1089
163+
[xilem#1091]: https://github.com/linebender/xilem/pull/1091
164+
[xilem#1092]: https://github.com/linebender/xilem/pull/1092
165+
[xilem#1094]: https://github.com/linebender/xilem/pull/1094
166+
[xilem#1097]: https://github.com/linebender/xilem/pull/1097
167+
[xilem#1102]: https://github.com/linebender/xilem/pull/1102
168+
[xilem#1108]: https://github.com/linebender/xilem/pull/1108
169+
[xilem#1114]: https://github.com/linebender/xilem/pull/1114
170+
[xilem#1116]: https://github.com/linebender/xilem/pull/1116
171+
172+
[Fearless SIMD]: https://github.com/linebender/fearless_simd
173+
[#simd channel]: https://xi.zulipchat.com/#narrow/channel/514230-simd
23.3 KB
Loading
80.8 KB
Loading

0 commit comments

Comments
 (0)