Skip to main content

max / quasi

0.10.0: Node takes #[non_exhaustive], and the third renderer stops panicking Node's next member was a breaking minor across three renderers, which is what makeover-layout took the attribute for on RowPart, Readiness and Region. The trade is the same: a node added upstream no longer stops a renderer compiling, and in exchange landing one is not a lockstep release. Each renderer's catch-all draws a muted line saying it does not know this node yet rather than drawing nothing, because a blank is indistinguishable from a screen that never carried the part. quasi-tui contributes no reach for one: a Reach says where a key press goes and this cannot know, so drawn-and-unreachable is the honest pair. quasi-immediate's leaf walk was a loaded panic. Its draw match was fixed yesterday for exactly this class -- Node::Image and Node::Timeline reached container's unreachable! and killed the frame -- but leaf's catch-all is also an unreachable! and a table cell ends its own match with other => leaf(..), so the third instance was already waiting. leaf now names its addressed members, keeping that assertion for the routing bug it is there to catch, and sends only unknown members to undrawn. Consumers forward-fixed in the same pass. MNW server and goingson were pinned 0.8, audiofiles and the scaffolder's own template 0.2 -- so every generated app shipped a pin that could not resolve.
Author: Max Johnson <me@maxj.phd> · 2026-08-15 19:02 UTC
Signed with PGP, not checked
Commit: bb5fbe8148cbf6a9c77d078211bdad1fff6b104a
Parent: ceb451a
17 files changed, +213 insertions, -68 deletions
M Cargo.lock +18 -18
@@ -3092,11 +3092,11 @@
3092 3092
3093 3093 [[package]]
3094 3094 name = "quasi"
3095 - version = "0.9.0"
3095 + version = "0.10.0"
3096 3096
3097 3097 [[package]]
3098 3098 name = "quasi-axum"
3099 - version = "0.9.0"
3099 + version = "0.10.0"
3100 3100 dependencies = [
3101 3101 "axum",
3102 3102 "http",
@@ -3110,7 +3110,7 @@
3110 3110
3111 3111 [[package]]
3112 3112 name = "quasi-basics"
3113 - version = "0.9.0"
3113 + version = "0.10.0"
3114 3114 dependencies = [
3115 3115 "makeover-layout",
3116 3116 "quasi-http",
@@ -3120,7 +3120,7 @@
3120 3120
3121 3121 [[package]]
3122 3122 name = "quasi-bench"
3123 - version = "0.9.0"
3123 + version = "0.10.0"
3124 3124 dependencies = [
3125 3125 "dhat",
3126 3126 "makeover",
@@ -3135,7 +3135,7 @@
3135 3135
3136 3136 [[package]]
3137 3137 name = "quasi-http"
3138 - version = "0.9.0"
3138 + version = "0.10.0"
3139 3139 dependencies = [
3140 3140 "form_urlencoded",
3141 3141 "http",
@@ -3144,7 +3144,7 @@
3144 3144
3145 3145 [[package]]
3146 3146 name = "quasi-immediate"
3147 - version = "0.9.0"
3147 + version = "0.10.0"
3148 3148 dependencies = [
3149 3149 "docengine",
3150 3150 "egui",
@@ -3154,7 +3154,7 @@
3154 3154
3155 3155 [[package]]
3156 3156 name = "quasi-router"
3157 - version = "0.9.0"
3157 + version = "0.10.0"
3158 3158 dependencies = [
3159 3159 "makeover-layout",
3160 3160 ]
@@ -3171,7 +3171,7 @@
3171 3171
3172 3172 [[package]]
3173 3173 name = "quasi-tauri"
3174 - version = "0.9.0"
3174 + version = "0.10.0"
3175 3175 dependencies = [
3176 3176 "http",
3177 3177 "quasi-http",
@@ -3182,7 +3182,7 @@
3182 3182
3183 3183 [[package]]
3184 3184 name = "quasi-tui"
3185 - version = "0.9.0"
3185 + version = "0.10.0"
3186 3186 dependencies = [
3187 3187 "docengine",
3188 3188 "makeover",
@@ -3194,7 +3194,7 @@
3194 3194
3195 3195 [[package]]
3196 3196 name = "quasi-webview"
3197 - version = "0.9.0"
3197 + version = "0.10.0"
3198 3198 dependencies = [
3199 3199 "docengine",
3200 3200 "makeover-layout",
@@ -5624,6 +5624,14 @@
5624 5624 source = "registry+https://github.com/rust-lang/crates.io-index"
5625 5625 checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b"
5626 5626
5627 + [[patch.unused]]
5628 + name = "synckit-client"
5629 + version = "0.8.0"
5630 +
5631 + [[patch.unused]]
5632 + name = "synckit-config"
5633 + version = "0.2.0"
5634 +
5627 5635 [[patch.unused]]
5628 5636 name = "kberg"
5629 5637 version = "0.1.0"
@@ -5639,11 +5647,3 @@
5639 5647 [[patch.unused]]
5640 5648 name = "tagtree"
5641 5649 version = "0.4.0"
5642 -
5643 - [[patch.unused]]
5644 - name = "synckit-client"
5645 - version = "0.8.0"
5646 -
5647 - [[patch.unused]]
5648 - name = "synckit-config"
5649 - version = "0.2.0"
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-axum"
3 - version = "0.9.0"
3 + version = "0.10.0"
4 4 description = "The axum host adapter for quasi-router: an HTTP request in, a rendered description out"
5 5 edition.workspace = true
6 6 rust-version.workspace = true
@@ -13,14 +13,14 @@
13 13 workspace = true
14 14
15 15 [dependencies]
16 - quasi-router = { path = "../quasi-router", version = "0.9.0" }
17 - quasi-http = { path = "../quasi-http", version = "0.9.0" }
16 + quasi-router = { path = "../quasi-router", version = "0.10.0" }
17 + quasi-http = { path = "../quasi-http", version = "0.10.0" }
18 18 axum = "0.8.8"
19 19 http = "1.3.1"
20 20 tokio = { version = "1.50.0", features = ["rt"] }
21 21
22 22 [dev-dependencies]
23 - quasi-webview = { path = "../quasi-webview", version = "0.9.0" }
23 + quasi-webview = { path = "../quasi-webview", version = "0.10.0" }
24 24 tokio = { version = "1.50.0", features = ["macros", "rt-multi-thread"] }
25 25 tower = { version = "0.5.3", features = ["util"] }
26 26 http-body-util = "0.1.3"
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-basics"
3 - version = "0.9.0"
3 + version = "0.10.0"
4 4 description = "The first-party widget set: named assemblies of primitives, shared across our apps"
5 5 edition.workspace = true
6 6 rust-version.workspace = true
@@ -13,12 +13,12 @@
13 13 workspace = true
14 14
15 15 [dependencies]
16 - quasi-router = { path = "../quasi-router", version = "0.9.0" }
16 + quasi-router = { path = "../quasi-router", version = "0.10.0" }
17 17 makeover-layout = "0.26.1"
18 18
19 19 [dev-dependencies]
20 20 # A widget's guarantees are claims about what a renderer draws, so they are
21 21 # tested against a real one rather than by walking the tree the assembly just
22 22 # built. The webview is the renderer that recognises names today.
23 - quasi-webview = { path = "../quasi-webview", version = "0.9.0" }
24 - quasi-http = { path = "../quasi-http", version = "0.9.0" }
23 + quasi-webview = { path = "../quasi-webview", version = "0.10.0" }
24 + quasi-http = { path = "../quasi-http", version = "0.10.0" }
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-bench"
3 - version = "0.9.0"
3 + version = "0.10.0"
4 4 description = "What a described screen costs to render, in time and in allocations"
5 5 edition.workspace = true
6 6 rust-version.workspace = true
@@ -22,13 +22,13 @@
22 22 count = ["dep:dhat"]
23 23
24 24 [dependencies]
25 - quasi-router = { path = "../quasi-router", version = "0.9.0" }
26 - quasi-webview = { path = "../quasi-webview", version = "0.9.0" }
27 - quasi-tui = { path = "../quasi-tui", version = "0.9.0" }
25 + quasi-router = { path = "../quasi-router", version = "0.10.0" }
26 + quasi-webview = { path = "../quasi-webview", version = "0.10.0" }
27 + quasi-tui = { path = "../quasi-tui", version = "0.10.0" }
28 28 # `Serves` is the trait carrying `screen` and `fragment`, which is what the
29 29 # webview is measured through. Taken directly rather than through quasi-webview
30 30 # because a bench calling a trait method should name the trait it calls.
31 - quasi-http = { path = "../quasi-http", version = "0.9.0" }
31 + quasi-http = { path = "../quasi-http", version = "0.10.0" }
32 32 makeover-layout = "0.26.1"
33 33 makeover-tui = { version = "0.24.0", features = ["theme"] }
34 34 # Only to load a bundled theme file. `makeover_tui::Theme` is `#[non_exhaustive]`,
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-http"
3 - version = "0.9.0"
3 + version = "0.10.0"
4 4 description = "The http-shaped seam quasi's webview host adapters share: decoding in, a rendered description out"
5 5 edition.workspace = true
6 6 rust-version.workspace = true
@@ -13,6 +13,6 @@
13 13 workspace = true
14 14
15 15 [dependencies]
16 - quasi-router = { path = "../quasi-router", version = "0.9.0" }
16 + quasi-router = { path = "../quasi-router", version = "0.10.0" }
17 17 http = "1.3.1"
18 18 form_urlencoded = "1.2.2"
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-immediate"
3 - version = "0.9.0"
3 + version = "0.10.0"
4 4 edition = "2024"
5 5 description = "The immediate-mode renderer for quasi-router: a described screen in, an egui frame out. Immediate mode is the constraint that matters, not the library."
6 6 license = "MIT"
@@ -12,7 +12,7 @@
12 12 categories = ["gui"]
13 13
14 14 [dependencies]
15 - quasi-router = { path = "../quasi-router", version = "0.9.0" }
15 + quasi-router = { path = "../quasi-router", version = "0.10.0" }
16 16 # The node drawing, which is the makeover layer's and not this crate's. Every
17 17 # widget here that is not a container comes from it: a screen walk that painted
18 18 # its own meter would be the divergence the suite exists to end, one copy per
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-router"
3 - version = "0.9.0"
3 + version = "0.10.0"
4 4 description = "Host-agnostic router: a request in, a renderer-agnostic description out"
5 5 edition.workspace = true
6 6 rust-version.workspace = true