diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml
index a1558e0b..44e16249 100644
--- a/.github/workflows/check.yml
+++ b/.github/workflows/check.yml
@@ -25,4 +25,4 @@ jobs:
- uses: actions/checkout@v4
- name: check typos
- uses: crate-ci/typos@v1.30.1
+ uses: crate-ci/typos@v1.45.0
diff --git a/.typos.toml b/.typos.toml
index feb9fe24..f1453852 100644
--- a/.typos.toml
+++ b/.typos.toml
@@ -2,7 +2,11 @@
# https://github.com/crate-ci/typos/blob/master/docs/reference.md
[default]
-extend-ignore-re = ["colour-science"]
+extend-ignore-re = [
+ "colour-science",
+ # Ignore lines ending with
+ "(?Rm)^.*\\s*$",
+]
# Corrections take the form of a key/value pair. The key is the incorrect word
# and the value is the correct word. If the key and value are the same, the
@@ -14,6 +18,7 @@ extend-ignore-re = ["colour-science"]
LOD = "LOD"
relm = "relm"
Stoer = "Stoer"
+Canva = "Canva"
# Match Inside a Word - Case Insensitive
[default.extend-words]
diff --git a/content/blog/2025-01-13-tmil-12/index.md b/content/blog/2025-01-13-tmil-12/index.md
index 515e6d68..a58a0c4b 100644
--- a/content/blog/2025-01-13-tmil-12/index.md
+++ b/content/blog/2025-01-13-tmil-12/index.md
@@ -77,7 +77,7 @@ We plan for Kompari to standardise and improve the developer experience of snaps
It can generate reports which summarises failed snapshot tests, and will also contain functionality for interactive blessing of new snapshots.
This reporting can be integrated into a repository as an xtask:
-```commandline
+```bash
cargo xtask report
```
diff --git a/content/blog/2026-04-09-tmil-25/index.md b/content/blog/2026-04-09-tmil-25/index.md
new file mode 100644
index 00000000..c037a139
--- /dev/null
+++ b/content/blog/2026-04-09-tmil-25/index.md
@@ -0,0 +1,130 @@
++++
+title = "Linebender in 2026 Q1"
+authors = ["Raph Levien"]
++++
+
+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](https://github.com/linebender/vello/releases/tag/sparse-strips-v0.0.7) (encompassing both Vello CPU and Vello Hybrid) and [Vello 0.8.0](https://github.com/linebender/vello/releases/tag/v0.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.
+ * AnyRender, which is part of Blitz.
+ * Imaging, which is part of the Understory family of crates.
+
+
+These two crates are fairly similar in scope, but with different emphasis. AnyRender prioritizes ergonomics, while imaging is focused on performance, including handling external GPU-resident textures.
+
+
+### 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 [Glifo: A seperation of concerns](https://xi.zulipchat.com/#narrow/channel/197075-vello/topic/Glifo.3A.20A.20seperation.20of.20concerns/with/584192738).
+
+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 features.
+
+ * [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](https://xi.zulipchat.com/#narrow/channel/205635-parley/topic/Bevy.20now.20uses.20Parley.2FFontique.20for.20text/with/578693539)).
+
+CuTTY is a fork of Alacritty (a high performance terminal emulator) that has been ported to Vello and Parley ([Zulip thread](https://xi.zulipchat.com/#narrow/channel/205635-parley/topic/I.20forked.20and.20migrated.20Alacritty.20to.20Vello.2BParley/with/580875316)).
+
+Other projects which now use Parley but have not previously been mentioned are:
+ * [Gosub engine](https://gosub.io/)
+ * [drafft-ink](https://github.com/PatWie/drafft-ink) (infinite canvas whiteboard)
+
+It's gratifying to see all this adoption. It seems like recognition that Parley
+
+## Xilem and Masonry
+
+Masonry move to imaging ([xilem#1696]).
+
+A bunch of new widgets: Svg, Divider, CollapsePanel, StepInput, RadioButtons, Switch, Clip, Split (TODO: get complete list)
+
+New layout system ([xilem#1560]).
+
+Work to move towards ui_events and reduce dependency on winit.
+
+
+
+We're seeing some cool Xilem apps in the ecosystem, including a port of Runebender to Xilem ([Zulip thread](https://xi.zulipchat.com/#narrow/channel/197829-runebender/topic/Runebender.20Xilem/with/574012987)). That's especially gratifying to see, as it was the "hero app" for Druid for several years.
+
+
+
+
+A screenshot of Runebender Xilem.
+
+
+
+We've also gotten word of Boomaga-IPP, a refresh of a virtual printer project ([Zulip thread](https://xi.zulipchat.com/#narrow/channel/354396-xilem/topic/Boomaga-IPP.3A.20A.20new.20app.20using.20XILEM/with/576938266)).
+
+Another interesting app is [Scrolled Quran] by Muhammad Ragib Hasin.
+
+
+
+
+A screenshot of Scrolled Quran.
+
+
+
+## Related ecosystem projects
+
+### 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](https://github.com/raphlinus/raphlinus.github.io/issues/77).
+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](https://github.com/forest-rs/subduction) crate, with compelling examples.
+To learn more, see the [Subduction: System compositor integration](https://xi.zulipchat.com/#narrow/channel/197075-vello/topic/Subduction.3A.20System.20compositor.20integration/with/582293122) Zulip thread.
+
+
+
+
+
+A screenshot of the subduction sample app. There are AppKit widgets for text editing and a button, and geometric shapes.
+
+
+
+
+## RustWeek
+
+There are two talks from Linebender affiliated people: Nico Burns' [talk on Blitz](https://2026.rustweek.org/talks/nico/), and Taj Pereira and Alex Jakubowicz' [talk on WASM](https://2026.rustweek.org/talks/wasm/). In addition, Linebender is one of the [Unconference](https://2026.rustweek.org/unconf-intro/) tracks. If you are interested in participating in the latter, reach out to me, as I'm the designated community leader.
+
+[xilem#1560]: https://github.com/linebender/xilem/pull/1560
+[xilem#1696]: https://github.com/linebender/xilem/pull/1696
+
+
+[parley#536]: https://github.com/linebender/parley/pull/536
+[parley#540]: https://github.com/linebender/parley/pull/540
+[parley#551]: https://github.com/linebender/parley/pull/551
+[parley#563]: https://github.com/linebender/parley/pull/563
+
+
+[Scrolled Quran]: https://github.com/RagibHasin/scrolled-quran
+
diff --git a/content/blog/2026-04-09-tmil-25/rb-mar-16-2026.jpeg b/content/blog/2026-04-09-tmil-25/rb-mar-16-2026.jpeg
new file mode 100644
index 00000000..ed95b60f
Binary files /dev/null and b/content/blog/2026-04-09-tmil-25/rb-mar-16-2026.jpeg differ
diff --git a/content/blog/2026-04-09-tmil-25/scrolled_quran_index.png b/content/blog/2026-04-09-tmil-25/scrolled_quran_index.png
new file mode 100644
index 00000000..76cf7292
Binary files /dev/null and b/content/blog/2026-04-09-tmil-25/scrolled_quran_index.png differ
diff --git a/content/blog/2026-04-09-tmil-25/subduction_screenshot.png b/content/blog/2026-04-09-tmil-25/subduction_screenshot.png
new file mode 100644
index 00000000..1cf8eb48
Binary files /dev/null and b/content/blog/2026-04-09-tmil-25/subduction_screenshot.png differ
diff --git a/content/wiki/canonical_lints.md b/content/wiki/canonical_lints.md
index 12e48952..b5d71fe0 100644
--- a/content/wiki/canonical_lints.md
+++ b/content/wiki/canonical_lints.md
@@ -103,7 +103,7 @@ If you want to remove a lint, `#![allow]` or `#![expect]` it at the crate root.
As a lot of our code is research code, there are lints which we believe improve code quality, but don't need to validate in CI.
These lints can be run occasionally, such as when releases are near, to improve code quality asynchronously:
-```text
+```txt
let_underscore_drop
single_use_lifetimes
unit_bindings