Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
340 commits
Select commit Hold shift + click to select a range
a7825c5
Fix: Build the checksum file list with find so an absent file type do…
b-re-w Oct 25, 2026
5455f68
Chore: Format codegen.rs
b-re-w Oct 25, 2026
ef3264a
Fix: Merge develop and regenerate the protocol
b-re-w Oct 25, 2026
3df0af4
Merge origin/develop into feature/packager-macos
b-re-w Oct 25, 2026
0a8650c
Merge origin/develop into feature/packager-windows
b-re-w Oct 25, 2026
fe48506
Merge origin/develop into feature/packager-linux
b-re-w Oct 25, 2026
793527c
Test: Name the packager tests after the FR-22.6 criteria
b-re-w Oct 25, 2026
55ec447
Test: Name the packager tests after the FR-22.6 criteria
b-re-w Oct 25, 2026
b189007
Test: Name the packager tests after the FR-22.6 criteria
b-re-w Oct 25, 2026
6848f78
Feat: Make state handles Copy with an arena and generations (#278)
b-re-w Oct 25, 2026
301f11e
Fix: Make the Copy state handles compile and drop the now needless cl…
b-re-w Oct 25, 2026
6620652
Docs: Spell the composable attribute #[Composable] (#278)
b-re-w Oct 25, 2026
17a169a
Refactor: Rename #[composable] to #[Composable] (#278)
b-re-w Oct 25, 2026
399680a
Fix: Make the #[Composable] rename build
b-re-w Oct 25, 2026
4cc64be
Feat: Generate a call macro for every composable (FR-39.1.1, 39.1.2, …
b-re-w Oct 25, 2026
676a5f4
Fix: Make the generated call macros build and record their compile er…
b-re-w Oct 25, 2026
a4bcb9f
Docs: Call macro errors point at the offending argument (#278)
b-re-w Oct 25, 2026
6db5a73
Feat: Report call macro errors at the offending argument (#278)
b-re-w Oct 25, 2026
1d28cce
Merge origin/develop into feat/fr39-call-macro-spans
b-re-w Oct 25, 2026
8956c0c
Test: Regenerate call macro compile-fail expectations with argument s…
b-re-w Oct 25, 2026
91718fa
Docs: A missing required argument points at the last argument (#278)
b-re-w Oct 25, 2026
90db2a3
Feat: Link the Kotlin/Native static renderer on Windows by default
b-re-w Oct 25, 2026
3fd0196
Fix: Format the Windows renderer tests
b-re-w Oct 25, 2026
f4d3ad3
Test: Prove the Windows default resolution in the consumer check
b-re-w Oct 26, 2026
b8f04c4
Feat: add RequestFocus mutation and TextField composition notificatio…
b-re-w Nov 4, 2026
0a67311
Fix: A weighted Row or Column child keeps room for its longest word (…
b-re-w Nov 5, 2026
7d6ce4e
Merge develop into feat/focus-request-410
b-re-w Nov 5, 2026
b0ab225
Feat: Apply per-window color scheme on Linux (FR-53.3, #401)
b-re-w Nov 5, 2026
01adbc2
Fix: Match the Window record in the Linux color test (FR-53.3, #401)
b-re-w Nov 5, 2026
b99616b
Feat: Zoom each Linux window on its own (FR-53.3, #404)
b-re-w Nov 5, 2026
e39f327
Feat: Deliver window drag over to registered Linux drop targets (FR-5…
b-re-w Nov 5, 2026
c34637a
Chore: Regenerate the staged Android Kotlin copy for the weighted lay…
b-re-w Nov 5, 2026
2725ba0
Feat: Button text alignment, label size and a content slot (FR-66, #425)
b-re-w Nov 5, 2026
1791e0d
Test: Check the Start label position and FontSize in the FR-66 button…
b-re-w Nov 5, 2026
4994e3e
Feat: Accessibility modifier and accessible_name on any node (FR-68, …
b-re-w Nov 5, 2026
c75cf90
Fix: Bound the label table, drop the per-frame label allocation, name…
b-re-w Nov 5, 2026
d6341fe
Feat: Colour and size options for Switch, Slider and Checkbox (FR-67,…
b-re-w Nov 5, 2026
d828f22
Merge feat/fr68-semantics into feat/fr67-controls
b-re-w Nov 5, 2026
9a7ae3a
Merge develop into feat/focus-request-410
b-re-w Nov 5, 2026
49eb3c4
Feat: OnFocusGained and OnKeyUp node events (FR-45, #98, #100)
b-re-w Nov 5, 2026
e41e48d
Feat: Colour and size options for Switch, Slider and Checkbox, verifi…
b-re-w Nov 5, 2026
455d917
Chore: Refresh the staged Android Protocol.gen.kt
b-re-w Nov 5, 2026
311a0ab
Docs: FR-67 state-dependent track colour and removal back to defaults…
b-re-w Nov 5, 2026
5a434d8
Test: Removing the accessible name returns the default name (FR-68, #…
b-re-w Nov 5, 2026
ba50fdb
Test: Removing the colours and size returns the defaults (FR-67, #426…
b-re-w Nov 5, 2026
1e7a4ec
Merge feat/fr68-semantics into feat/fr67-controls
b-re-w Nov 5, 2026
e52fc60
Feat: Send every key to the Host with code, text and repeat (FR-12.1,…
b-re-w Nov 5, 2026
1f86714
Merge remote-tracking branch 'origin/develop' into feat/focus-request…
b-re-w Nov 5, 2026
5626b98
Docs: Add the disabled Button contrast fix to the v0.0.6 changelog
b-re-w Nov 5, 2026
1782e33
Merge pull request #459 from DarkPyonix/feat/spec-fr67-wording
b-re-w Nov 5, 2026
6623f0b
Merge remote-tracking branch 'origin/develop' into feat/fr70-box-row
b-re-w Nov 5, 2026
80ec681
Merge remote-tracking branch 'origin/develop' into feat/fr66-button
b-re-w Nov 5, 2026
4e6042b
Publish: develop 1782e33e to release
github-actions[bot] Nov 5, 2026
7e56578
Fix: A disabled Button with children draws and exposes them once (FR-…
b-re-w Nov 5, 2026
29f70cf
Merge pull request #462 from DarkPyonix/docs/changelog-0-0-6-447
b-re-w Nov 5, 2026
762c97b
Publish: develop 29f70cf2 to release
github-actions[bot] Nov 5, 2026
5f3ee9c
Merge pull request #423 from DarkPyonix/feat/focus-request-410
b-re-w Nov 5, 2026
53221c8
Publish: develop 5f3ee9c7 to release
github-actions[bot] Nov 5, 2026
da4a17d
Merge develop into feat/fr45-focus-keyup-98
b-re-w Nov 5, 2026
77e43ce
Merge remote-tracking branch 'origin/develop' into feat/fr70-box-row
b-re-w Nov 5, 2026
630234d
Feat: Package and check the Windows static renderer (NFR-15)
b-re-w Nov 5, 2026
9c135e2
Feat: Samples build against the released renderer (NFR-15)
b-re-w Nov 5, 2026
f4c8144
Fix: Say when the release lookup fails, and test it
b-re-w Nov 5, 2026
535ff62
Docs: Add FR-20.8, an opt-in for window dp size changes (#467)
b-re-w Nov 5, 2026
a20d292
Docs: Name the FR-20.8 tests without backticks until they exist
b-re-w Nov 5, 2026
20aa4c5
Feat: Opt-in WindowSizeChanged for every whole-dp size change (FR-20.…
b-re-w Nov 5, 2026
e5ebb54
Docs: Correct the report_size example and say the root window cannot …
b-re-w Nov 5, 2026
670c376
Merge pull request #448 from DarkPyonix/feat/fr70-box-row
b-re-w Nov 5, 2026
d38b2cf
Publish: develop 670c3762 to release
github-actions[bot] Nov 5, 2026
b3ed42a
Merge remote-tracking branch 'origin/develop' into feat/fr66-button
b-re-w Nov 5, 2026
0c38ebc
Test: Cover removing report_size, the host path and rounding; keep de…
b-re-w Nov 6, 2026
ed4651f
Merge pull request #469 from DarkPyonix/docs/spec-fr19-report-size
b-re-w Nov 6, 2026
112f305
Merge remote-tracking branch 'origin/develop' into feat/window-dp-rep…
b-re-w Nov 6, 2026
ad58df2
Merge develop into feat/window-dp-reports-467 and name the FR-20.8 te…
b-re-w Nov 6, 2026
8345185
Chore: Pin the window modules at the fork's caption re-measure (#468)
b-re-w Nov 6, 2026
68912db
Merge pull request #453 from DarkPyonix/feat/fr66-button
b-re-w Nov 6, 2026
8d26408
Publish: develop 68912db1 to release
github-actions[bot] Nov 6, 2026
4443a7d
Merge remote-tracking branch 'origin/develop' into feat/window-dp-rep…
b-re-w Nov 6, 2026
59ab468
Chore: Format the FR-20.8 tests with rustfmt
b-re-w Nov 6, 2026
cd68f50
Merge remote-tracking branch 'origin/develop' into feat/fr68-semantics
b-re-w Nov 6, 2026
79374c2
Docs: Add FR-38 criterion 16, change-marker bars in the editor gutter…
b-re-w Nov 6, 2026
cd502ec
Chore: Skip the macOS jobs of the Test workflow for changes they cann…
b-re-w Nov 6, 2026
5e03fd6
Fix: Build the Test matrices from the changed job instead of reading …
b-re-w Nov 6, 2026
afe14cd
Chore: Leave the macOS jobs of the native renderer test out for other…
b-re-w Nov 6, 2026
0a0144c
Feat: Change-marker bars in the editor gutter (FR-38 criterion 16)
b-re-w Nov 6, 2026
81bbba0
Docs: Add FR-71, the roles, states and actions of node accessibility …
b-re-w Nov 6, 2026
4a6cb15
Fix: Keep the macOS rule test from naming the planning documents
b-re-w Nov 6, 2026
659a9b5
Merge pull request #470 from DarkPyonix/feat/window-dp-reports-467
b-re-w Nov 6, 2026
2d8fb63
Publish: develop 659a9b58 to release
github-actions[bot] Nov 6, 2026
72b600f
Merge pull request #478 from DarkPyonix/docs/spec-fr71-a11y
b-re-w Nov 6, 2026
879b838
Fix: Make the gutter change-bar draw path allocation free (FR-38 crit…
b-re-w Nov 6, 2026
da1a417
Merge remote-tracking branch 'origin/develop' into feat/fr68-semantics
b-re-w Nov 6, 2026
d3ab6e6
Merge pull request #475 from DarkPyonix/feat/test-skip-macos
b-re-w Nov 6, 2026
b7b0735
Publish: develop d3ab6e6e to release
github-actions[bot] Nov 6, 2026
321e88e
Chore: Do not start the macOS Kotlin/Native test for the Windows buil…
b-re-w Nov 6, 2026
74d55e3
Merge pull request #474 from DarkPyonix/feat/spec-gutter-diff-bar
b-re-w Nov 6, 2026
775312b
Merge feat/fr68-semantics into feat/fr67-controls
b-re-w Nov 6, 2026
6175117
Merge remote-tracking branch 'origin/develop' into feat/fr67-controls
b-re-w Nov 6, 2026
220958b
Docs: FR-20.8 lets the implicit root window opt in through its window…
b-re-w Nov 6, 2026
b965e82
Chore: Regenerate the protocol files after merging FR-68 and develop …
b-re-w Nov 6, 2026
b508096
Merge remote-tracking branch 'origin/develop' into feat/root-report-s…
b-re-w Nov 6, 2026
6fa3a69
Merge remote-tracking branch 'origin/develop' into feat/node-a11y-473
b-re-w Nov 6, 2026
9c5e067
Merge pull request #481 from DarkPyonix/docs/spec-fr20-8-root
b-re-w Nov 6, 2026
73f428d
Feat: The implicit root window opts in to whole-dp size reports (FR-2…
b-re-w Nov 6, 2026
76f61d8
Feat: Node accessibility roles, state bits and click action (FR-71, #…
b-re-w Nov 6, 2026
60dec3b
Merge branch 'feat/root-report-size-479' into feat/node-a11y-473
b-re-w Nov 6, 2026
df7636a
Chore: Regenerate the protocol and fix tests for the new Semantics bi…
b-re-w Nov 6, 2026
ba4d0fd
Docs: Add FR-72, native file open and save dialogs (#483)
b-re-w Nov 6, 2026
6a14af5
Docs: Cap file dialog results at 10000 paths and stage the platforms …
b-re-w Nov 6, 2026
cea1d02
Docs: Record the FR-72 wire tags and the empty Chosen rule (#483)
b-re-w Nov 6, 2026
345e83c
Feat: ShowFileDialog command and FileDialogResult event, stage 1 (FR-72)
b-re-w Nov 6, 2026
0f05f17
Fix: A window that only crosses a height class boundary reports its s…
b-re-w Nov 6, 2026
a75ebf6
Merge pull request #484 from DarkPyonix/feat/spec-file-dialogs
b-re-w Nov 6, 2026
d6575e4
Chore: Delete a pull request's Actions caches when it is merged or cl…
b-re-w Nov 6, 2026
7047688
Fix: Import WindowHeightClass in ComposeRustHost
b-re-w Nov 6, 2026
7ee11d3
Docs: One path that is not UTF-8 makes a file dialog choice unavailab…
b-re-w Nov 6, 2026
567480a
Fix: A non-UTF-8 path makes the whole file dialog choice unavailable …
b-re-w Nov 6, 2026
c7e1bb1
WIP: PR runs restore caches only; saves happen on push, schedule and …
b-re-w Nov 6, 2026
8543197
Chore: Harden the cache cleanup test and list up to 1000 caches
b-re-w Nov 6, 2026
855aa2c
Chore: Pull request runs only restore caches; the nightly on main sav…
b-re-w Nov 6, 2026
5b22c81
Merge pull request #455 from DarkPyonix/feat/fr68-semantics
b-re-w Nov 6, 2026
01d2748
Publish: develop 5b22c81a to release
github-actions[bot] Nov 6, 2026
5eddb92
Merge remote-tracking branch 'origin/develop' into feat/fr67-controls
b-re-w Nov 6, 2026
e99d052
Merge remote-tracking branch 'origin/develop' into feat/node-a11y-473
b-re-w Nov 6, 2026
a7b1517
Test: Every cache restore needs a save with both guards and its own p…
b-re-w Nov 6, 2026
527ab6f
Docs: Say why one unreadable path fails the whole file dialog choice,…
b-re-w Nov 6, 2026
7091a75
Docs: A file dialog filter that keeps no extension is dropped (FR-72,…
b-re-w Nov 6, 2026
1739b78
Fix: Drop a file dialog filter whose extensions all clean to nothing …
b-re-w Nov 6, 2026
2bb2f02
Test: Read the workflows as text so the cache and macOS rule tests ru…
b-re-w Nov 6, 2026
bec7609
Test: Read the native workflow as text so the wiring check runs on ma…
b-re-w Nov 6, 2026
c0a5ee9
Fix: The accessibility click action ignores disabled and not enabled …
b-re-w Nov 6, 2026
fa0a613
Fix: A WindowDrag(false) child excludes its press from the WindowDrag…
b-re-w Nov 6, 2026
a849169
Merge pull request #487 from DarkPyonix/feat/pr-cache-cleanup
b-re-w Nov 6, 2026
218e6b9
Publish: develop a8491697 to release
github-actions[bot] Nov 6, 2026
5155921
Fix: Remember the control look, reset the drag exclusion on release, …
b-re-w Nov 6, 2026
d9cd4f7
Merge develop into feat/fr45-focus-keyup-98
b-re-w Nov 6, 2026
58a50ae
Merge pull request #489 from DarkPyonix/feat/node-a11y-473
b-re-w Nov 6, 2026
eead94f
Publish: develop 58a50ae8 to release
github-actions[bot] Nov 6, 2026
359b3e4
Merge remote-tracking branch 'origin/develop' into feat/cache-restore…
b-re-w Nov 6, 2026
36865d7
Merge remote-tracking branch 'origin/develop' into feat/fr67-controls
b-re-w Nov 6, 2026
37e3a68
Merge remote-tracking branch 'origin/develop' into feat/gutter-diff-bar
b-re-w Nov 6, 2026
ee22fe2
Merge develop into feat/fr45-focus-keyup-98
b-re-w Nov 6, 2026
1bf8fc6
Docs: Add FR-73, writing text to the clipboard from application code …
b-re-w Nov 6, 2026
5dbfa6d
Chore: Regenerate the protocol files after merging develop (FR-67)
b-re-w Nov 6, 2026
08b15d7
Test: Make four Kotlin tests independent of the machine's language an…
b-re-w Nov 6, 2026
46d3efa
Merge pull request #491 from DarkPyonix/docs/spec-fr73-clipboard-write
b-re-w Nov 6, 2026
65bf56f
Merge pull request #488 from DarkPyonix/feat/cache-restore-only
b-re-w Nov 6, 2026
b63cc63
Publish: develop 65bf56f1 to release
github-actions[bot] Nov 6, 2026
71e22c1
Merge remote-tracking branch 'origin/develop' into feat/fr67-controls
b-re-w Nov 6, 2026
7146101
Merge pull request #458 from DarkPyonix/feat/fr67-controls
b-re-w Nov 6, 2026
f390b60
Publish: develop 71461018 to release
github-actions[bot] Nov 6, 2026
cc8efb7
Merge remote-tracking branch 'origin/develop' into feat/gutter-diff-bar
b-re-w Nov 6, 2026
db73216
Merge remote-tracking branch 'origin/develop' into feat/file-dialog-s…
b-re-w Nov 6, 2026
0a72eaa
Docs: Note the file dialog request in the changelog (#483)
b-re-w Nov 6, 2026
0d9f830
Chore: Regenerate the protocol files after merging develop (FR-72)
b-re-w Nov 6, 2026
3b01e6f
Merge remote-tracking branch 'origin/develop' into feat/win-static-pa…
b-re-w Nov 6, 2026
6ef1a12
Merge remote-tracking branch 'origin/develop' into feat/native-skip-m…
b-re-w Nov 6, 2026
87ba628
Merge pull request #477 from DarkPyonix/feat/gutter-diff-bar
b-re-w Nov 6, 2026
81cb338
Publish: develop 87ba628a to release
github-actions[bot] Nov 6, 2026
7533600
Docs: Record the verified status of FR-66 to FR-70
b-re-w Nov 6, 2026
63155d0
Docs: Changelog entries for the editor change-marker bars and the Win…
b-re-w Nov 6, 2026
bf2ecfb
Revert "Docs: Changelog entries for the editor change-marker bars and…
b-re-w Nov 6, 2026
1c79a46
Docs: Add FR-38 criterion 17, Host edits of one batch are one undo st…
b-re-w Nov 6, 2026
42e4e8f
Docs: Add FR-21 section 21.3.2, Esc dismisses an open Dialog or Sheet…
b-re-w Nov 6, 2026
1721ef6
Docs: Rewrite the FR-38 group edit as an atomic EditCodeGroup (#496)
b-re-w Nov 6, 2026
cf6dd87
Docs: FR-38 group edit, semantic errors answer only with the result, …
b-re-w Nov 6, 2026
2e996f1
Merge pull request #498 from DarkPyonix/docs/status-after-ui-fixes
b-re-w Nov 7, 2026
19f8973
Merge pull request #499 from DarkPyonix/docs/spec-edit-group-496
b-re-w Nov 7, 2026
b150303
Merge pull request #465 from DarkPyonix/feat/win-static-package
b-re-w Nov 7, 2026
b0c1ba9
Publish: develop b1503031 to release
github-actions[bot] Nov 7, 2026
1926a08
Merge pull request #333 from DarkPyonix/feat/windows-static-default
b-re-w Nov 7, 2026
8121698
Publish: develop 1926a086 to release
github-actions[bot] Nov 7, 2026
d5ac28c
Merge remote-tracking branch 'origin/develop' into docs/spec-esc-dism…
b-re-w Nov 7, 2026
660d375
Chore: Merge origin/develop into feat/native-skip-macos
b-re-w Nov 7, 2026
763ab2a
Merge pull request #501 from DarkPyonix/docs/spec-esc-dismiss-476
b-re-w Nov 7, 2026
8a3e492
Feat: Dismiss open Dialog and Sheet with Escape and restore focus (FR…
b-re-w Nov 7, 2026
6e0b8f9
Merge branch 'feat/file-dialog-stage1' into feat/file-dialog-483
b-re-w Nov 7, 2026
fcaae43
Chore: Pin the window modules at the fork's macOS file dialog sheets …
b-re-w Nov 7, 2026
07fe2a5
Feat: Show file dialogs as sheets on macOS (FR-72)
b-re-w Nov 7, 2026
2e52946
Docs: State which platforms show a file dialog after stage 1 (FR-72, …
b-re-w Nov 7, 2026
ad628e6
Fix: Write the file dialog reasons out instead of citing the SPEC in …
b-re-w Nov 7, 2026
eafb834
Merge #486: Feat: ShowFileDialog and FileDialogResult, common part of…
b-re-w Nov 7, 2026
017ce33
Merge #503: Feat: macOS file open and save sheets, FR-72 stage 1 (#483)
b-re-w Nov 7, 2026
55eb292
Fix: Report the dialog result's filter as the position in the list th…
b-re-w Nov 7, 2026
bde2077
Merge #502: Feat: Dismiss open Dialog and Sheet with Escape and resto…
b-re-w Nov 7, 2026
64dbd03
Merge #480: Chore: Leave macOS jobs of the native renderer test out f…
b-re-w Nov 7, 2026
7239c3e
Merge #457: Feat: OnFocusGained and OnKeyUp node events (FR-45)
b-re-w Nov 7, 2026
7a7788d
Merge #461: Feat: Send every key to the Host (FR-12.1)
b-re-w Nov 7, 2026
08d304f
Merge #466: Feat: Samples build against the released renderer
b-re-w Nov 7, 2026
0faf46a
Merge #451: Feat: Linux per-window zoom (FR-53, #404)
b-re-w Nov 7, 2026
42102f7
Merge #450: Feat: Linux per-window color scheme (FR-53, #401)
b-re-w Nov 7, 2026
40aecb0
Merge #452: Feat: Linux drag delivery to the Host (FR-53, #409)
b-re-w Nov 7, 2026
32e7aaa
Merge #286: Refactor: Rename #[composable] to #[Composable] (#278)
b-re-w Nov 7, 2026
bdd4232
Fix: Spell the composable attribute #[Composable] in the tests added …
b-re-w Nov 7, 2026
d9b7aac
Merge #289: Feat: Generate a call macro for every composable (#278)
b-re-w Nov 7, 2026
2a9b87d
Merge #290: Feat: Report call macro errors at the offending argument …
b-re-w Nov 7, 2026
1bf30c0
Merge #285: Feat: Make state handles Copy with an arena and generatio…
b-re-w Nov 7, 2026
64da7c7
Merge #263: Fix: A focused box receives its own key events (#101)
b-re-w Nov 7, 2026
22e1c4d
Merge #270: Refactor: Share one span style function and a side-table …
b-re-w Nov 7, 2026
8d1cd7c
Merge #274: Feat: Transform3D, CSS 3D transforms (FR-41.3, FR-41.5 Dr…
b-re-w Nov 7, 2026
ecdda15
Merge #114: Feat: Linux packager and sample release to samples-latest…
b-re-w Nov 7, 2026
eb3704e
Merge #115: Feat: macOS ad hoc signing and update rehearsal (FR-35)
b-re-w Nov 7, 2026
d17ca0d
Merge #116: Feat: Windows packager, DPI manifest and WACK findings (F…
b-re-w Nov 7, 2026
adbb462
Merge #276: Feat: Sample release packaging (.app/.dmg, AppImage, .zip…
b-re-w Nov 7, 2026
52b1ab4
Fix: Refresh the generated files and Cargo.lock from the merged schema
b-re-w Nov 7, 2026
3632783
Fix: Format the new key events code and state the call macro test wit…
b-re-w Nov 7, 2026
f68dcbe
Fix: Copy the scroll state handles instead of cloning them
b-re-w Nov 7, 2026
633bd0d
Fix: Spell the composable attribute #[Composable] in the state handle…
b-re-w Nov 7, 2026
ed98b89
Fix: Give the semantics decode tests the ten modifier words Transform…
b-re-w Nov 7, 2026
e834550
Fix: Tags 28 to 30 are the unused ones now that Transform3D has 27
b-re-w Nov 7, 2026
67a39b3
Fix: Read the animation events at their offsets after the longer KeyD…
b-re-w Nov 7, 2026
300b1ec
Fix: Restore the modifier chain of RenderNode that the key handler me…
b-re-w Nov 7, 2026
78b3567
Fix: Give the Linux window tests a Host of their own and the window s…
b-re-w Nov 7, 2026
11c9478
Fix: Allow the focus-gained and key-up events on pickers, and opt in …
b-re-w Nov 7, 2026
000b99a
Fix: Build the Flatpak against runtime 25.08, the newest one flathub …
b-re-w Nov 7, 2026
8f7ae17
Fix: Check the samples against the head's own renderer when the relea…
b-re-w Nov 7, 2026
a0004f2
Fix: Install the Flatpak runtimes in the system installation too, whe…
b-re-w Nov 7, 2026
9d9e96e
Fix: Link UniformTypeIdentifiers for the macOS file dialogs and run t…
b-re-w Nov 7, 2026
3c079a0
Fix: Build the Flatpaks with the host flatpak-builder, which sees the…
b-re-w Nov 7, 2026
740588a
Fix: Let the Flathub builder sandbox see the user installation's runt…
b-re-w Nov 7, 2026
d1525b9
Fix: Run the 1.0.1 builder call under a session bus like the others
b-re-w Nov 7, 2026
fb45f87
Fix: Give the sample build four hours, the Windows leg used up two
b-re-w Nov 7, 2026
4cbd859
Merge pull request #505 from DarkPyonix/integrate/2026-11-07
b-re-w Nov 7, 2026
dfc5150
Publish: develop 4cbd8598 to release
github-actions[bot] Nov 7, 2026
1c14be2
Chore: bump version to 0.0.7
b-re-w Nov 7, 2026
19b63e3
Merge pull request #508 from DarkPyonix/chore/bump-0.0.7
b-re-w Nov 7, 2026
053b48c
Publish: develop 19b63e3f to release
github-actions[bot] Nov 7, 2026
88b6d48
Feat: allow explicit text field typography and icon button layout (FR…
b-re-w Nov 7, 2026
2301bf6
Feat: allow theme overrides for overlay geometry and effects (FR-74, …
b-re-w Nov 7, 2026
ca5f24d
Chore: format Rust files with rustfmt (FR-74)
b-re-w Nov 7, 2026
b7c89cc
Chore: format Rust files with rustfmt (FR-75)
b-re-w Nov 7, 2026
40f1770
Fix: pass f64 to OwnedAttr::Float in TextFieldScope attrs (FR-75)
b-re-w Nov 7, 2026
b9daae0
Fix: resolve rustfmt ordering and remove planning doc citation (FR-75)
b-re-w Nov 7, 2026
d7feb5c
Fix: resolve rustfmt ordering and remove planning doc citation (FR-74)
b-re-w Nov 7, 2026
0a39fef
Fix: sort ComposeHost import in test (FR-75)
b-re-w Nov 7, 2026
adabb59
Fix: use BatchEncoder default and drop unused import (FR-74)
b-re-w Nov 7, 2026
fb0c2d1
Fix: use TextField text builder method in test (FR-75)
b-re-w Nov 7, 2026
5a970e5
Fix: unwrap encoder finish in test (FR-74)
b-re-w Nov 7, 2026
ff06fc2
Fix: assert paint bits integer in typography test (FR-75)
b-re-w Nov 7, 2026
13f2593
Fix: add PropertyKind.Scrim arm to NodeTable supportsProperty (FR-74)
b-re-w Nov 7, 2026
b7a2eb5
Fix: import androidx.compose.ui.unit.dp in HostButton (FR-75)
b-re-w Nov 7, 2026
9f017bf
Fix: import OverlayTokens and avoid shadowing in HostSheet and HostDr…
b-re-w Nov 7, 2026
8ea8d6a
Fix: import paintProp in HostOverlay and use ContainerRole.Menu in Ho…
b-re-w Nov 7, 2026
67b4ec1
Merge pull request #511 from DarkPyonix/feat/507-composer-tokens
b-re-w Nov 7, 2026
6b69c07
Publish: develop 67b4ec10 to release
github-actions[bot] Nov 7, 2026
478c730
Merge branch 'origin/develop' into feat/506-overlay-tokens
b-re-w Nov 7, 2026
f71fccb
Fix: handle SetOverlayTokens in ProtocolVectorsTest and fix HostOverl…
b-re-w Nov 7, 2026
00274b7
Fix: tag dialog container box with dialogTestTag
b-re-w Nov 7, 2026
a2754f1
Merge pull request #512 from DarkPyonix/feat/506-overlay-tokens
b-re-w Nov 7, 2026
27dc4d5
Publish: develop a2754f1e to release
github-actions[bot] Nov 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
129 changes: 117 additions & 12 deletions .github/scripts/check-single-executable.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,13 @@
#
# Needs a display. On Linux run it under `xvfb-run -a`; a macOS runner has one.
#
# On Windows (Git Bash, with the Visual Studio C++ tools installed) the tarball is the static
# kit build-windows.sh writes, packaged by package-static-renderer.sh. The build script has no
# download route for it yet, so the kit is unpacked into the scratch directory and handed to
# the build as DXC_WINDOWS_NATIVE_LIB, which links exactly what a consumer's build would.
# dumpbin (or llvm-readobj, or objdump) must then show Windows' own DLLs only; a hosted
# runner has no graphics card, so the window draws with Windows' software adapter.
#
# What it prints is the evidence: the executable's size, before and after stripping, and
# every library it names.
set -euo pipefail
Expand All @@ -44,9 +51,11 @@ fail() {
}

os="$(uname -s)"
exe=""
case "$os" in
Darwin|Linux) ;;
*) fail "this checks macOS and Linux executables; $os is not one" ;;
MINGW*|MSYS*|CYGWIN*) os=Windows exe=.exe ;;
*) fail "this checks macOS, Linux and Windows executables; $os is not one" ;;
esac
if [[ "$os" == Linux && -z "${DISPLAY:-}" ]]; then
fail "DISPLAY is not set" "Run it under xvfb-run -a."
Expand All @@ -69,13 +78,15 @@ esac
# Listed into a variable first: grep -q stops reading early, and under pipefail the tar it
# cut off would fail the check.
contents="$(tar -tzf "$artifact")"
grep -qE '^(\./)?lib/libcompose_rust_renderer\.a$' <<< "$contents" ||
fail "$(basename "$artifact") does not carry lib/libcompose_rust_renderer.a" \
archive_pattern='^(\./)?lib/libcompose_rust_renderer\.a$'
[[ "$os" != Windows ]] || archive_pattern='^(\./)?libcompose_rust_renderer\.a$'
grep -qE "$archive_pattern" <<< "$contents" ||
fail "$(basename "$artifact") does not carry the static renderer archive" \
"Only the static renderer makes an application one executable."

# A workspace build in this checkout would be found before the cache, and then this would
# test that instead of the artifact.
for built in renderer/build/macos renderer/build/linux \
for built in renderer/build/macos renderer/build/linux renderer/build/windows \
renderer/build/linux-arm64 renderer/build/native-image/dist/lib; do
[[ ! -e "$repo_root/$built" ]] || fail "$built exists in this checkout" \
"The build script would link that instead of the artifact. Run this in a clean checkout."
Expand All @@ -93,6 +104,7 @@ cp "$artifact" "$artifact.sha256" "$scratch/cache/downloads/"

# Nothing may point the build anywhere else.
unset COMPOSE_RUST_RENDERER_DIR DIOXUS_COMPOSE_RENDERER_DIR DXC_MACOS_NATIVE_LIB DXC_LINUX_NATIVE_LIB
unset DXC_WINDOWS_NATIVE_LIB DXC_WINDOWS_CRT RUSTFLAGS CARGO_ENCODED_RUSTFLAGS CARGO_BUILD_RUSTFLAGS
# The Kotlin/Native renderer cannot close its own window, so the self-check ends the
# process once the frames are in.
unset COMPOSE_RUST_AUTOEXIT_MS
Expand All @@ -106,9 +118,40 @@ export COMPOSE_RUST_TEXT_SELF_CHECK=1
# No ICU data file anywhere an application could be pointed at one. The executable must find
# words and line breaks with what is linked into it. A runner that ships one (a browser
# carries icudtl.dat) has to have it removed before this runs.
icu_files="$(find /usr /opt /Library /Applications /home /Users -name 'icudtl.dat' 2>/dev/null || true)"
if [[ "$os" == Windows ]]; then
# Git Bash sees the drives as /c, /d. The system and program directories are where a
# browser or a runtime keeps one; the checkout and the scratch directory are not searched,
# because the kit's own skia/icudtl.dat is not in the tarball and must not be.
icu_roots=()
for root in "/c/Program Files" "/c/Program Files (x86)" "/c/ProgramData" "/c/Users" \
"/c/Windows" "/c/hostedtoolcache" "/c/msys64" "/d/a/_tool" "/d/a/_temp"; do
[[ ! -d "$root" ]] || icu_roots+=("$root")
done
icu_files="$(find "${icu_roots[@]}" -name 'icudtl.dat' 2>/dev/null || true)"
else
icu_files="$(find /usr /opt /Library /Applications /home /Users -name 'icudtl.dat' 2>/dev/null || true)"
fi
[[ -z "$icu_files" ]] || fail "an ICU data file is on this machine, so the text check would not prove anything" \
$icu_files
"$icu_files"

if [[ "$os" == Windows ]]; then
# The tarball root is the kit root, as build-windows.sh writes it and build.rs reads it.
kit="$scratch/kit"
mkdir -p "$kit"
tar -xzf "$artifact" -C "$kit"
[[ -f "$kit/libcompose_rust_renderer.a" ]] || fail "the unpacked kit has no libcompose_rust_renderer.a at its root"
for piece in gcc/libstdc++.a native/dxc-windows-native.lib native/dxc-windows-static-ucrt.lib \
skiko/skiko-bridges.lib skiko/skia.lib; do
[[ -f "$kit/$piece" ]] || fail "the kit has no $piece" \
"package-static-renderer.sh packs the whole kit build-windows.sh writes for windows-x64."
done
find "$kit" -name 'icudtl.dat' | grep . && fail "the kit carries an icudtl.dat" \
"The ICU data is to be inside the renderer's object, not beside it."
DXC_WINDOWS_NATIVE_LIB="$(cygpath -w "$kit")"
export DXC_WINDOWS_NATIVE_LIB
# A hosted runner has no card: Windows' software adapter draws instead.
export DXC_D3D12_WARP="${DXC_D3D12_WARP:-1}"
fi

# What every system the application may name lives under. Anything else is a file that
# would have to travel with it.
Expand All @@ -119,9 +162,59 @@ system_library() {
esac
}

# Visual Studio's tools, on PATH inside a developer prompt and found through vswhere otherwise.
# Prints nothing when there is none.
vs_tool() {
local name="$1" found vswhere
found="$(command -v "$name" || true)"
if [[ -z "$found" ]]; then
vswhere="/c/Program Files (x86)/Microsoft Visual Studio/Installer/vswhere.exe"
[[ -f "$vswhere" ]] || return 0
found="$("$vswhere" -latest -products '*' -find "VC/Tools/MSVC/**/bin/Hostx64/x64/$name" | tr -d '\r' | head -1)"
[[ -z "$found" ]] || found="$(cygpath -u "$found")"
fi
echo "$found"
}

# The DLLs a Windows executable asks the loader for, listed by dumpbin. The rules are those of
# scripts/check-windows-consumer.sh: Windows' own DLLs only.
check_windows_libraries() {
local binary="$1" dumpbin dlls dll lower system not_ours=()
dumpbin="$(vs_tool dumpbin.exe)"
[[ -n "$dumpbin" ]] || fail "no dumpbin to list the executable's DLLs with" \
"Install the Visual Studio C++ build tools."
echo "-- dumpbin -dependents $(basename "$binary")"
"$dumpbin" -nologo -dependents "$(cygpath -w "$binary")" | tr -d '\r' |
sed -n '/Image has the following dependencies/,/Summary/p'
dlls="$("$dumpbin" -nologo -dependents "$(cygpath -w "$binary")" | tr -d '\r' |
sed -n 's/^ *\([A-Za-z0-9_.-]*\.[dD][lL][lL]\)$/\1/p' | sort -fu)"
[[ -n "$dlls" ]] || fail "dumpbin named no DLL at all, which is not a Windows executable that opens a window"
system="$(cygpath -u "${SystemRoot:-C:\\Windows}")/System32"
for dll in $dlls; do
lower="$(echo "$dll" | tr '[:upper:]' '[:lower:]')"
case "$lower" in
vcruntime*|msvcp*|concrt*|libgcc*|libstdc++*|libwinpthread*|*mingw*|\
libcompose_rust_renderer*|*jvm*|*java*|awt*|skiko*|icu*)
fail "$(basename "$binary") needs $dll, which is not part of Windows" \
"The runtime and the renderer are to be linked into the executable." ;;
api-ms-win-*|ext-ms-win-*) ;;
*) [[ -f "$system/$dll" || -f "$system/$lower" ]] || not_ours+=("$dll") ;;
esac
done
[[ "${#not_ours[@]}" -eq 0 ]] || fail "$(basename "$binary") needs DLLs Windows does not ship: ${not_ours[*]}"
# A statically linked JNI library announces itself with JNI_OnLoad_<name>.
! grep -aq 'JNI_OnLoad' "$binary" ||
fail "the executable carries a JNI library, so a Java runtime is linked into it"
echo "-- $(wc -w <<< "$dlls" | tr -d ' ') DLLs, every one part of Windows: $(echo $dlls)"
}

# Prints what the executable names and fails on anything that is not the system's.
check_libraries() {
local binary="$1" failures=0 library resolved
if [[ "$os" == Windows ]]; then
check_windows_libraries "$binary"
return
fi
if [[ "$os" == Darwin ]]; then
echo "-- otool -L $(basename "$binary")"
otool -L "$binary" | tail -n +2
Expand Down Expand Up @@ -185,7 +278,7 @@ check_libraries() {
}

size_of() {
if [[ "$os" == Darwin ]]; then stat -f %z "$1"; else stat -c %s "$1"; fi
if [[ "$os" == Darwin ]]; then stat -f %z "$1"; else wc -c < "$1" | tr -d ' '; fi
}

megabytes() {
Expand All @@ -207,28 +300,34 @@ build() {
grep -q "unpacked the renderer for v$crate_version" "$log" ||
grep -q "$scratch/cache/renderer" "$log" ||
echo "note the build log does not say it unpacked the artifact (a cached build replays nothing)" >&2
echo "$repo_root/target/single-executable/$name/release/consumer"
echo "$repo_root/target/single-executable/$name/release/consumer$exe"
}

run_alone() {
local binary="$1" name="$2"
local directory="$scratch/run/$name"
rm -rf "$directory"
mkdir -p "$directory"
cp "$binary" "$directory/consumer"
cp "$binary" "$directory/consumer$exe"
echo "-- ls -la $directory"
ls -la "$directory"
[[ "$(ls -A "$directory")" == "consumer" ]] || fail "something other than the executable is in $directory"
[[ "$(ls -A "$directory")" == "consumer$exe" ]] || fail "something other than the executable is in $directory"
echo "== running it alone in $directory"
local log="$scratch/run-$name.log" status=0
( cd "$directory" && ./consumer --self-check ) > "$log" 2>&1 || status=$?
( cd "$directory" && "./consumer$exe" --self-check ) > "$log" 2>&1 || status=$?
cat "$log"
grep -q "compose-rust text self-check: ok" "$log" ||
fail "the renderer did not lay Korean text out correctly with no ICU data file" \
"Its own report is above."
[[ "$status" -eq 0 ]] || fail "the executable did not draw on its own (exit $status)"
# And the renderer said so itself: its window opened, its scene was made on the main
# dispatcher this platform has, and a frame reached the window.
if [[ "$os" == Windows ]]; then
# The Windows renderer's start lines are not the ones the other two print (it has no
# main dispatcher of the platform's), so what proves it drew is the exit status of the
# self-check, which the executable returns only once frames went through.
return 0
fi
local dispatcher="$smoke_main_dispatcher_kn_linux"
[[ "$os" != Darwin ]] || dispatcher="$smoke_main_dispatcher_kn_macos"
check_window_start "$(cat "$log")" "$status" "$dispatcher" ||
Expand All @@ -237,6 +336,12 @@ run_alone() {

report() {
local binary="$1" stripped="$scratch/consumer.stripped"
if [[ "$os" == Windows ]]; then
# A release MSVC executable keeps its symbols in a .pdb beside it, so it is as small
# as it gets.
echo "-- size: $(megabytes "$(size_of "$binary")")"
return
fi
cp "$binary" "$stripped"
if [[ "$os" == Darwin ]]; then strip -x "$stripped"; else strip "$stripped"; fi
echo "-- size: $(megabytes "$(size_of "$binary")"), stripped $(megabytes "$(size_of "$stripped")")"
Expand All @@ -245,7 +350,7 @@ report() {

binary="$(build default "")"
[[ -x "$binary" ]] || fail "the build produced no $binary"
ls "$scratch/cache/renderer"/v"$crate_version"/* >/dev/null 2>&1 ||
[[ "$os" == Windows ]] || ls "$scratch/cache/renderer"/v"$crate_version"/* >/dev/null 2>&1 ||
fail "the build did not unpack the artifact into $scratch/cache/renderer" \
"It found a renderer somewhere else, so this did not test the artifact."
check_libraries "$binary"
Expand Down
34 changes: 34 additions & 0 deletions .github/scripts/delete-pr-caches.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#!/usr/bin/env bash
# Usage: delete-pr-caches.sh <pull request number>
#
# Deletes the Actions caches that runs of one pull request saved (ref refs/pull/<n>/merge).
# A pull request's caches can only be read by that pull request, so once it is merged or
# closed they are dead weight against the repository's 10 GB limit, and they push out the
# caches that other runs could use.
#
# It deletes nothing but that one ref, and it never fails the run: a cache that is already
# gone or a listing that errors is reported as a warning.
set -uo pipefail

number="${1:-}"
if [[ ! "$number" =~ ^[0-9]+$ ]]; then
echo "::warning title=No cache cleanup::'$number' is not a pull request number"
exit 0
fi
ref="refs/pull/$number/merge"

if ! ids="$(gh cache list --ref "$ref" --limit 1000 --json id --jq '.[].id' 2>&1)"; then
echo "::warning title=Could not list caches::$ids"
exit 0
fi
[[ -n "$ids" ]] || { echo "no caches under $ref"; exit 0; }

count="$(wc -l <<< "$ids" | tr -d ' ')"
[[ "$count" -lt 1000 ]] || echo "::warning title=More caches may remain::listed $count caches, the most the listing returns; run again to delete the rest"

for id in $ids; do
[[ "$id" =~ ^[0-9]+$ ]] || continue
if gh cache delete "$id" >/dev/null 2>&1; then echo "deleted cache $id of $ref"
else echo "::warning title=Cache not deleted::cache $id of $ref"; fi
done
exit 0
38 changes: 38 additions & 0 deletions .github/scripts/find-released-renderer.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/usr/bin/env bash
# Usage: find-released-renderer.sh <crate version>
#
# Prints "released=true" or "released=false" for GITHUB_OUTPUT. true means the release
# v<version> carries the renderer tarball and its checksum for every desktop target.
#
# "The release has no such asset" and "gh failed" are different answers. A missing release
# or missing asset is false, which sends the build to building the renderer itself. Any
# other gh failure (authentication, rate limit, network) is reported as a warning and also
# false, but it is said, because otherwise a broken token turns into a silent rebuild that
# takes hours.
set -uo pipefail

version="${1:?usage: $0 <crate version>}"
repo="${GITHUB_REPOSITORY:-}"

err="$(mktemp)"
trap 'rm -f "$err"' EXIT
if names="$(gh release view "v$version" ${repo:+-R "$repo"} --json assets -q '.assets[].name' 2>"$err")"; then
:
else
if grep -qiE 'release not found|not found' "$err"; then
echo "no release v$version yet" >&2
else
echo "::warning title=Could not read the release::gh failed: $(tr '\n' ' ' < "$err")"
fi
echo "released=false"
exit 0
fi

released=true
for target in macos-aarch64 linux-x64 linux-arm64 windows-x64; do
asset="compose-rust-renderer-v$version-$target.tar.gz"
for n in "$asset" "$asset.sha256"; do
grep -qxF "$n" <<<"$names" || { echo "missing $n" >&2; released=false; }
done
done
echo "released=$released"
2 changes: 2 additions & 0 deletions .github/scripts/heavy-checks.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,10 +53,12 @@
KNOWN_HEAVY = [
"test-compose-from-fork.yml",
"test-kn-desktop-renderer.yml",
"packager-linux.yml",
"test-native-renderer.yml",
"test-samples.yml",
"test-windows-resize-metrics.yml",
"test-windows-resize-probe.yml",
"package-windows-host.yml",
]

REPO_ROOT = Path(__file__).resolve().parents[2]
Expand Down
37 changes: 37 additions & 0 deletions .github/scripts/native-needs-macos.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
#!/usr/bin/env bash
# Usage: git diff --no-renames --name-only <base> <head> | native-needs-macos.sh
#
# Reads the changed file names on stdin and prints "macos=true" or "macos=false" for
# GITHUB_OUTPUT. test-native-renderer.yml builds the macOS static renderer, checks the macOS
# single executable and builds the iOS renderer on macOS runners; false means every changed
# file is one of the other platforms' own, so those jobs are left out. It fails open: an empty
# list, an unreadable list or any file not named below prints true.
#
# The other platforms' own files (they feed no macOS job of this workflow):
# renderer/windows/, renderer/staticlib-windows/, renderer/linux/, renderer/staticlib-linux/
# renderer/desktop/scripts/*.ps1, build-windows.sh, build-linux.sh,
# renderer/desktop/scripts/windows-build-contract.test.sh, windows-metadata/
# scripts/check-windows-consumer.sh, .github/scripts/check-linux-input-access.sh,
# .github/scripts/atspi-walk.py, .github/workflows/windows-static.yml
#
# Everything else counts as macOS-relevant: the shared renderer sources, the build scripts,
# package-static-renderer.sh and check-single-executable.sh (the macOS legs run them),
# compose-rust/build*, parity scripts and the workflows themselves.
set -uo pipefail

files="$(cat 2>/dev/null)" || { echo "macos=true"; exit 0; }
[[ -n "$files" ]] || { echo "macos=true"; exit 0; }

while IFS= read -r file; do
[[ -n "$file" ]] || continue
case "$file" in
renderer/windows/*|renderer/staticlib-windows/*|renderer/linux/*|renderer/staticlib-linux/*) ;;
renderer/desktop/scripts/windows-metadata/*|renderer/desktop/scripts/*.ps1) ;;
renderer/desktop/scripts/build-windows.sh|renderer/desktop/scripts/build-linux.sh) ;;
renderer/desktop/scripts/windows-build-contract.test.sh) ;;
scripts/check-windows-consumer.sh|.github/scripts/check-linux-input-access.sh) ;;
.github/scripts/atspi-walk.py|.github/workflows/windows-static.yml) ;;
*) echo "macos=true"; exit 0 ;;
esac
done <<< "$files"
echo "macos=false"
Loading