Skip to content

Commit 7c1cf16

Browse files
committed
This Month in Linebender, December 2025
1 parent ee32016 commit 7c1cf16

2 files changed

Lines changed: 232 additions & 0 deletions

File tree

35.1 KB
Loading
Lines changed: 232 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,232 @@
1+
+++
2+
title = "Linebender in December 2025"
3+
authors = ["Kaur Kuut"]
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 vector renderer with three different implementations.
11+
There is the fully GPU compute based Vello, the fully CPU based Vello CPU, and the hybrid GPU/CPU one called Vello Hybrid.
12+
They can draw large 2D scenes with high performance.
13+
14+
- [vello#1293][]: Added tile intersection checking.
15+
- [vello#1294][]: Added features to Vello CPU to switch between `u8` and `f32` pipelines.
16+
- [vello#1303][]: Fixed filter expansion logic for transforms with scale/skew and for clipped layers.
17+
- [vello#1313][]: Fixed gradients within a clip layer in Vello Hybrid.
18+
- [vello#1315][]: Use `naga` from wgpu 27.
19+
- [vello#1320][]: Made changes in preparation for `fearless_simd`.
20+
- [vello#1323][]: Fixed non-deterministic GPU stroke artifacts.
21+
- [vello#1325][]: Reduced the memory usage of wide tile commands.
22+
- [vello#1327][]: Eliminated overdraw for opaque image fills.
23+
- [vello#1336][]: Now using SIMD dispatch for flattening.
24+
25+
<figure>
26+
<img style="height: auto;" width="1280" height="960" src="image_overdraw.jpg" alt="A photo of a flower being layered on top of itself at decreasing size.">
27+
<figcaption>
28+
30% performance improvement in this flower's case with the new overdraw handling in Vello CPU / Vello Hybrid.
29+
</figcaption>
30+
</figure>
31+
32+
## Masonry and Xilem
33+
34+
Masonry is the widget system developed by Linebender.
35+
It provides a non-opinionated retained widget tree, designed as a base layer for high-level GUI frameworks.
36+
37+
Xilem is our flagship GUI project, inspired by SwiftUI, which uses Masonry for its widgets.
38+
It lets you build user interfaces declaratively by composing lightweight views together, and will diff them to provide minimal updates to a retained layer.
39+
40+
- [xilem#1484][]: Split Android examples into separate files.
41+
- [xilem#1488][]: Renamed `map_message` to `map_message_result`.
42+
- [xilem#1500][]: Removed `ViewCtx::state_changed`.
43+
- [xilem#1503][]: Split some Xilem code into new a new `xilem_masonry` package.
44+
- [xilem#1504][]: Fixed `TextInput` placeholder alignment.
45+
- [xilem#1507][]: Wrote guidelines for writing Xilem doc examples.
46+
- [xilem#1510][]: Added a new `CollectionWidget` trait to unify collection widget method naming.
47+
- [xilem#1513][]: Added `WidgetMut::id`.
48+
- [xilem#1519][]: Added `Canvas` widget.
49+
- [xilem#1520][]: Fixed `Portal` view.
50+
- [xilem#1526][]: Implemented `Into<BrushRef>` for `BorderColor`.
51+
- [xilem#1527][]: Added `Gap` property to `Flex` and `Grid`.
52+
- [xilem#1528][]: Added alternative text to `Image` widget.
53+
- [xilem#1529][]: Added `WidgetTag::unique`.
54+
- [xilem#1533][]: Renamed `Grid` attributes from `width` / `height` to `row_count`, `column_count`.
55+
- [xilem#1534][]: Migrated to Kurbo's `Axis`.
56+
- [xilem#1537][]: Fixed `ScrollBar` behavior with large content sizes.
57+
- [xilem#1540][]: Improved `Flex` child constraint accuracy.
58+
- [xilem#1544][]: Documented node non-persistence in accessibility method.
59+
- [xilem#1545][]: Now using third person more consistently in docs.
60+
61+
## Parley
62+
63+
Parley is a text layout library.
64+
It handles text layout, mostly at the level of line breaking and resolving glyph positions.
65+
66+
- [parley#436][]: Migrated text analysis and internationalization to ICU4X.
67+
- [parley#473][]: Now baking composite properties data.
68+
- [parley#475][]: Now using ICU4X `Script` type in `fontique`.
69+
- [parley#479][], [parley#481]: Started work on a dedicated glyph rendering crate.
70+
- [parley#487][]: Exposed `Tag`.
71+
- [parley#490][]: Fixed bidi state leaking across layouts.
72+
- [parley#493][]: Fixed crash with empty layout.
73+
- [parley#498][]: Updated to `ui-events` 0.2.
74+
75+
## Kurbo
76+
77+
Kurbo provides data structures and algorithms for curves and vector paths.
78+
79+
- [kurbo#533][]: Clarified the order of `PathEl` points.
80+
- [kurbo#534][]: Optimized `RoundedRect::winding`.
81+
82+
## Peniko
83+
84+
Peniko is a 2D graphics type library which provides a set of generic types that define styles for rendering and composition.
85+
86+
- [peniko#155][]: Updated to Kurbo 0.13.
87+
88+
## Fearless SIMD
89+
90+
Fearless SIMD is our SIMD infrastructure library.
91+
It provides a solid way for writing SIMD operations portably across Wasm, AArch64, x86, and x86_64.
92+
93+
- [fearless_simd#141][]: Added `any_true`, `all_true`, `any_false`, and `all_false` methods for mask types.
94+
- [fearless_simd#149][]: Reworked the API.
95+
- [fearless_simd#154][]: Added documentation for operations and vector types.
96+
- [fearless_simd#155][]: Added a vectored shift left operation.
97+
- [fearless_simd#158][]: Renamed `madd` / `msub` to `mul_add` / `mul_sub` for consistency with `std`.
98+
- [fearless_simd#159][]: Now using native vector types to back SIMD types.
99+
- [fearless_simd#167][]: Added precise float-to-integer conversions, which saturate out-of-bounds results and convert `NaN` to `0` on all platforms.
100+
- [fearless_simd#168][]: Added `Level::is_fallback`, which states whether the current SIMD level is the scalar fallback.
101+
- [fearless_simd#170][]: Made `Element` an associated type on `SimdBase`.
102+
- [fearless_simd#180][]: `SimdFrom::simd_from` now takes the SIMD token as the first argument instead of the second.
103+
104+
## Velato
105+
106+
Velato is our Lottie render library.
107+
The goal is to provide coverage of the large Lottie spec, up to what Vello can render, for use in interactive graphics.
108+
109+
We released [Velato 0.8][] and [0.8.1][Velato 0.8.1]. 🎉
110+
111+
## Bevy Vello
112+
113+
Bevy Vello is our Bevy integration for Vello.
114+
The goal is to provide support for rendering scenes, text, SVGs, and Lotties in the Bevy game engine.
115+
116+
We released [Bevy Vello 0.11][], [0.12][Bevy Vello 0.12], and [0.12.1][Bevy Vello 0.12.1]. 🎉
117+
118+
- [bevy_vello#185][]: Added support for `UiTransform` for raw Vello scenes.
119+
- [bevy_vello#188][]: Finished adding Bevy 0.17 support.
120+
- [bevy_vello#191][]: Renamed `SSRenderTarget` to `VelloRenderTarget`.
121+
- [bevy_vello#195][], [bevy_vello#196][]: Fixed AABBs not being correctly calculated.
122+
123+
## Resvg
124+
125+
Resvg is our fast, small, portable SVG library.
126+
127+
- [resvg#980][], [resvg#981][]: No longer writing empty `<defs />`.
128+
- [resvg#987][]: Now using checked arithmetic when computing bounding box.
129+
- [resvg#990][]: Fixed panicking during pixmap creation.
130+
131+
## SimpleCSS
132+
133+
SimpleCSS is a basic CSS 2.1 parser and selector.
134+
135+
- [simplecss#39][]: Added support for parsing `@font-face`.
136+
137+
## Druid
138+
139+
Druid is a GUI library which was a predecessor to Xilem, and an ancestor of Masonry.
140+
141+
- [druid#2410][]: Updated to Piet 0.7, which is going to be the final Piet version compatible with Druid.
142+
143+
## Get Involved
144+
145+
We welcome collaboration on any of our crates.
146+
This can include improving the documentation, implementing new features, improving our test coverage, or using them within your own code.
147+
148+
We host an hour long office hours meeting each week where we discuss what's going on in our projects.
149+
See [#office hours in Zulip](https://xi.zulipchat.com/#narrow/channel/359642-office-hours) for details.
150+
We're also running a separate office hours time dedicated to the renderer collaboration, details also available at that link.
151+
152+
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.
153+
It really helps us to learn what aspects our users care about the most.
154+
155+
[vello#1293]: https://github.com/linebender/vello/pull/1293
156+
[vello#1294]: https://github.com/linebender/vello/pull/1294
157+
[vello#1303]: https://github.com/linebender/vello/pull/1303
158+
[vello#1313]: https://github.com/linebender/vello/pull/1313
159+
[vello#1315]: https://github.com/linebender/vello/pull/1315
160+
[vello#1320]: https://github.com/linebender/vello/pull/1320
161+
[vello#1323]: https://github.com/linebender/vello/pull/1323
162+
[vello#1325]: https://github.com/linebender/vello/pull/1325
163+
[vello#1327]: https://github.com/linebender/vello/pull/1327
164+
[vello#1336]: https://github.com/linebender/vello/pull/1336
165+
166+
[xilem#1484]: https://github.com/linebender/xilem/pull/1484
167+
[xilem#1488]: https://github.com/linebender/xilem/pull/1488
168+
[xilem#1500]: https://github.com/linebender/xilem/pull/1500
169+
[xilem#1503]: https://github.com/linebender/xilem/pull/1503
170+
[xilem#1504]: https://github.com/linebender/xilem/pull/1504
171+
[xilem#1507]: https://github.com/linebender/xilem/pull/1507
172+
[xilem#1510]: https://github.com/linebender/xilem/pull/1510
173+
[xilem#1513]: https://github.com/linebender/xilem/pull/1513
174+
[xilem#1519]: https://github.com/linebender/xilem/pull/1519
175+
[xilem#1520]: https://github.com/linebender/xilem/pull/1520
176+
[xilem#1526]: https://github.com/linebender/xilem/pull/1526
177+
[xilem#1527]: https://github.com/linebender/xilem/pull/1527
178+
[xilem#1528]: https://github.com/linebender/xilem/pull/1528
179+
[xilem#1529]: https://github.com/linebender/xilem/pull/1529
180+
[xilem#1533]: https://github.com/linebender/xilem/pull/1533
181+
[xilem#1534]: https://github.com/linebender/xilem/pull/1534
182+
[xilem#1537]: https://github.com/linebender/xilem/pull/1537
183+
[xilem#1540]: https://github.com/linebender/xilem/pull/1540
184+
[xilem#1544]: https://github.com/linebender/xilem/pull/1544
185+
[xilem#1545]: https://github.com/linebender/xilem/pull/1545
186+
187+
[parley#436]: https://github.com/linebender/parley/pull/436
188+
[parley#473]: https://github.com/linebender/parley/pull/473
189+
[parley#475]: https://github.com/linebender/parley/pull/475
190+
[parley#479]: https://github.com/linebender/parley/pull/479
191+
[parley#481]: https://github.com/linebender/parley/pull/481
192+
[parley#487]: https://github.com/linebender/parley/pull/487
193+
[parley#490]: https://github.com/linebender/parley/pull/490
194+
[parley#493]: https://github.com/linebender/parley/pull/493
195+
[parley#498]: https://github.com/linebender/parley/pull/498
196+
197+
[kurbo#533]: https://github.com/linebender/kurbo/pull/533
198+
[kurbo#534]: https://github.com/linebender/kurbo/pull/534
199+
200+
[peniko#155]: https://github.com/linebender/peniko/pull/155
201+
202+
[fearless_simd#141]: https://github.com/linebender/fearless_simd/pull/141
203+
[fearless_simd#149]: https://github.com/linebender/fearless_simd/pull/149
204+
[fearless_simd#154]: https://github.com/linebender/fearless_simd/pull/154
205+
[fearless_simd#155]: https://github.com/linebender/fearless_simd/pull/155
206+
[fearless_simd#158]: https://github.com/linebender/fearless_simd/pull/158
207+
[fearless_simd#159]: https://github.com/linebender/fearless_simd/pull/159
208+
[fearless_simd#167]: https://github.com/linebender/fearless_simd/pull/167
209+
[fearless_simd#168]: https://github.com/linebender/fearless_simd/pull/168
210+
[fearless_simd#170]: https://github.com/linebender/fearless_simd/pull/170
211+
[fearless_simd#180]: https://github.com/linebender/fearless_simd/pull/180
212+
213+
[Velato 0.8]: https://github.com/linebender/velato/releases/tag/v0.8.0
214+
[Velato 0.8.1]: https://github.com/linebender/velato/releases/tag/v0.8.1
215+
216+
[Bevy Vello 0.11]: https://github.com/linebender/bevy_vello/releases/tag/v0.11.0
217+
[Bevy Vello 0.12]: https://github.com/linebender/bevy_vello/releases/tag/v0.12.0
218+
[Bevy Vello 0.12.1]: https://github.com/linebender/bevy_vello/releases/tag/v0.12.1
219+
[bevy_vello#185]: https://github.com/linebender/bevy_vello/pull/185
220+
[bevy_vello#188]: https://github.com/linebender/bevy_vello/pull/188
221+
[bevy_vello#191]: https://github.com/linebender/bevy_vello/pull/191
222+
[bevy_vello#195]: https://github.com/linebender/bevy_vello/pull/195
223+
[bevy_vello#196]: https://github.com/linebender/bevy_vello/pull/196
224+
225+
[resvg#980]: https://github.com/linebender/resvg/pull/980
226+
[resvg#981]: https://github.com/linebender/resvg/pull/981
227+
[resvg#987]: https://github.com/linebender/resvg/pull/987
228+
[resvg#990]: https://github.com/linebender/resvg/pull/990
229+
230+
[simplecss#39]: https://github.com/linebender/simplecss/pull/39
231+
232+
[druid#2410]: https://github.com/linebender/druid/pull/2410

0 commit comments

Comments
 (0)