-
Notifications
You must be signed in to change notification settings - Fork 10
Initial rough draft of TMIL 25 #138
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Draft
raphlinus
wants to merge
2
commits into
main
Choose a base branch
from
tmil-25
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
Changes from all commits
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -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 | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -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). <!-- typos:disable-line --> | ||
|
|
||
| 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. | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. "towards doing more, like IME, via |
||
|
|
||
| <!-- Should we mention that work on Placehero has stalled out now that it's no longer funded?--> | ||
|
|
||
| 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. | ||
|
|
||
| <figure> | ||
| <img style="height: auto;" width="1280" height="720" src="rb-mar-16-2026.jpeg" alt="A screenshot of Runebender. On the left is a Bézier path of a lowercase n being edited in a string, and on the right is an image showing many weights of the Instrument Serif font."> | ||
| <figcaption> | ||
| A screenshot of Runebender Xilem. | ||
| </figcaption> | ||
| </figure> | ||
|
|
||
| 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. | ||
|
|
||
| <figure> | ||
| <img style="height: auto;" width="802" height="639" src="scrolled_quran_index.png" alt="A screenshot of the Scrolled Quran app, showing an index page of recently read surahs"> | ||
| <figcaption> | ||
| A screenshot of Scrolled Quran. | ||
| </figcaption> | ||
| </figure> | ||
|
|
||
| ## 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. | ||
|
|
||
| <!-- TODO: better screenshot? The web one may be visually more interesting --> | ||
| <figure> | ||
| <img style="height: auto;" width="912" height="744" src="subduction_screenshot.png" alt="A screenshot of subduction, showing native mac widgets"> | ||
| <figcaption> | ||
| A screenshot of the subduction sample app. There are AppKit widgets for text editing and a button, and geometric shapes. | ||
| </figcaption> | ||
| </figure> | ||
|
|
||
|
|
||
| ## 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 | ||
|
|
||
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
missing end of sentence.