Skip to main content

max / quasi

Retire Node::Select; a tab strip is a region showing one child Decided in quasicoherent e9f61b46 (Max): one way to describe a tab strip. Node::Select had one tenant left in the tree and one in this repo's own scaffolder template, and no renderer honoured the distinction between its three Selector kinds -- quasi-immediate drew Segmented, Tabs and Toggle identically. Every former site passed None on every option, so the per-option destination the member was ruled in for was unused everywhere. The move was not free, and the gap is what most of this commit is. quasi-immediate read neither Slot::showing nor Slot::label: region_body walked the whole body whatever the description said, so a described tab group came out as every panel stacked with no strip. audiofiles is the egui host and the last tenant, so converting it needed the renderer first. node::showing_body is that renderer's third derivation of the same three shapes quasi-webview and quasi-tui already make: a labelled strip, a summary line that opens, or previous/position/next. A child carrying Slot::fed_by is fetched when its tab is pressed; a child holding its content is moved to locally with no request. View gains `shown`, keyed by region id and cleared on navigation, as Option<usize> where quasi-tui's is a bare usize -- a summary line here can be shut again and a terminal's prev/next row cannot reach the closed state. The region module headers in both renderers still recorded the three findings that motivated Showing, Slot::label and Arrangement::share. All three have been answered for a while; they now say so. quasi-immediate declared its own [lints.clippy] carrying pedantic alone, which replaces the workspace table rather than adding to it, so the house allow-list never reached it. On the workspace table now, like its eleven siblings. Template pins were four minors stale at 0.77 and makeover-tui seven at 0.34.0. Both current.
Author: Max Johnson <me@maxj.phd> · 2026-08-30 19:22 UTC
Signed with PGP, not checked
Commit: 4580a96ca92c60885b2f3f0d1904e9965d4b0d41
Parent: 63991ba
30 files changed, +553 insertions, -551 deletions
M Cargo.lock +15 -15
@@ -3425,11 +3425,11 @@
3425 3425
3426 3426 [[package]]
3427 3427 name = "quasi"
3428 - version = "0.81.0"
3428 + version = "0.82.0"
3429 3429
3430 3430 [[package]]
3431 3431 name = "quasi-axum"
3432 - version = "0.81.0"
3432 + version = "0.82.0"
3433 3433 dependencies = [
3434 3434 "axum",
3435 3435 "http",
@@ -3443,7 +3443,7 @@
3443 3443
3444 3444 [[package]]
3445 3445 name = "quasi-basics"
3446 - version = "0.81.0"
3446 + version = "0.82.0"
3447 3447 dependencies = [
3448 3448 "makeover-layout",
3449 3449 "quasi-http",
@@ -3453,7 +3453,7 @@
3453 3453
3454 3454 [[package]]
3455 3455 name = "quasi-bench"
3456 - version = "0.81.0"
3456 + version = "0.82.0"
3457 3457 dependencies = [
3458 3458 "dhat",
3459 3459 "makeover",
@@ -3468,7 +3468,7 @@
3468 3468
3469 3469 [[package]]
3470 3470 name = "quasi-http"
3471 - version = "0.81.0"
3471 + version = "0.82.0"
3472 3472 dependencies = [
3473 3473 "form_urlencoded",
3474 3474 "http",
@@ -3477,7 +3477,7 @@
3477 3477
3478 3478 [[package]]
3479 3479 name = "quasi-immediate"
3480 - version = "0.81.0"
3480 + version = "0.82.0"
3481 3481 dependencies = [
3482 3482 "docengine",
3483 3483 "egui",
@@ -3488,7 +3488,7 @@
3488 3488
3489 3489 [[package]]
3490 3490 name = "quasi-notifs"
3491 - version = "0.81.0"
3491 + version = "0.82.0"
3492 3492 dependencies = [
3493 3493 "quasi-router",
3494 3494 "synckit-config",
@@ -3496,7 +3496,7 @@
3496 3496
3497 3497 [[package]]
3498 3498 name = "quasi-router"
3499 - version = "0.81.0"
3499 + version = "0.82.0"
3500 3500 dependencies = [
3501 3501 "makeover-layout",
3502 3502 ]
@@ -3513,7 +3513,7 @@
3513 3513
3514 3514 [[package]]
3515 3515 name = "quasi-tauri"
3516 - version = "0.81.0"
3516 + version = "0.82.0"
3517 3517 dependencies = [
3518 3518 "http",
3519 3519 "quasi-http",
@@ -3526,7 +3526,7 @@
3526 3526
3527 3527 [[package]]
3528 3528 name = "quasi-tui"
3529 - version = "0.81.0"
3529 + version = "0.82.0"
3530 3530 dependencies = [
3531 3531 "docengine",
3532 3532 "makeover",
@@ -3539,7 +3539,7 @@
3539 3539
3540 3540 [[package]]
3541 3541 name = "quasi-webview"
3542 - version = "0.81.0"
3542 + version = "0.82.0"
3543 3543 dependencies = [
3544 3544 "docengine",
3545 3545 "makeover-layout",
@@ -6211,6 +6211,10 @@
6211 6211 "winnow 1.0.4",
6212 6212 ]
6213 6213
6214 + [[patch.unused]]
6215 + name = "synckit-client"
6216 + version = "0.10.0"
6217 +
6214 6218 [[patch.unused]]
6215 6219 name = "quasi-type"
6216 6220 version = "0.1.3"
@@ -6230,7 +6234,3 @@
6230 6234 [[patch.unused]]
6231 6235 name = "tagtree"
6232 6236 version = "0.4.1"
6233 -
6234 - [[patch.unused]]
6235 - name = "synckit-client"
6236 - version = "0.10.0"
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-axum"
3 - version = "0.81.0"
3 + version = "0.82.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.81.0" }
17 - quasi-http = { path = "../quasi-http", version = "0.81.0" }
16 + quasi-router = { path = "../quasi-router", version = "0.82.0" }
17 + quasi-http = { path = "../quasi-http", version = "0.82.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.81.0" }
23 + quasi-webview = { path = "../quasi-webview", version = "0.82.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.81.0"
3 + version = "0.82.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.81.0" }
16 + quasi-router = { path = "../quasi-router", version = "0.82.0" }
17 17 makeover-layout = "0.41.0"
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.81.0" }
24 - quasi-http = { path = "../quasi-http", version = "0.81.0" }
23 + quasi-webview = { path = "../quasi-webview", version = "0.82.0" }
24 + quasi-http = { path = "../quasi-http", version = "0.82.0" }
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-bench"
3 - version = "0.81.0"
3 + version = "0.82.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.81.0" }
26 - quasi-webview = { path = "../quasi-webview", version = "0.81.0" }
27 - quasi-tui = { path = "../quasi-tui", version = "0.81.0" }
25 + quasi-router = { path = "../quasi-router", version = "0.82.0" }
26 + quasi-webview = { path = "../quasi-webview", version = "0.82.0" }
27 + quasi-tui = { path = "../quasi-tui", version = "0.82.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.81.0" }
31 + quasi-http = { path = "../quasi-http", version = "0.82.0" }
32 32 makeover-layout = "0.41.0"
33 33 makeover-tui = { version = "0.41.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.81.0"
3 + version = "0.82.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.81.0" }
16 + quasi-router = { path = "../quasi-router", version = "0.82.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.81.0"
3 + version = "0.82.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.81.0" }
15 + quasi-router = { path = "../quasi-router", version = "0.82.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
@@ -45,9 +45,16 @@
45 45 # renderer could assert only that drawing fires nothing.
46 46 egui = { version = "0.35", features = ["default_fonts"] }
47 47
48 - [lints.rust]
49 - unused = "warn"
50 - unreachable_pub = "warn"
51 -
52 - [lints.clippy]
53 - pedantic = { level = "warn", priority = -1 }
48 + # The workspace tables, taken by name rather than restated. This crate had its
49 + # own `[lints.clippy]` carrying `pedantic` alone, and a member's table
50 + # *replaces* the workspace one rather than adding to it, so the house allow-list
51 + # did not reach here: this was the only crate in the workspace warning on the
52 + # numeric casts its siblings allow. Found 2026-08-30 by `View::show_by`, a
53 + # verbatim copy of quasi-tui's that warned only here.
54 + #
55 + # `unused` and `unreachable_pub` went with it, which is what puts this crate on
56 + # the same footing as the other eleven: none of them declare either, `unused` is
57 + # a rustc default, and turning `unreachable_pub` on tree-wide is its own pass --
58 + # it has findings in `crates/quasi` that are not this change's business.
59 + [lints]
60 + workspace = true
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-notifs"
3 - version = "0.81.0"
3 + version = "0.82.0"
4 4 description = "Declared notification kinds and the registry that holds them: what a notification says and what it is for, apart from how it reaches a person"
5 5 edition.workspace = true
6 6 rust-version.workspace = true
@@ -24,5 +24,5 @@
24 24 describe = ["dep:quasi-router"]
25 25
26 26 [dependencies]
27 - quasi-router = { path = "../quasi-router", version = "0.81.0", optional = true }
27 + quasi-router = { path = "../quasi-router", version = "0.82.0", optional = true }
28 28 synckit-config = { git = "https://makenot.work/git/max/synckit.git", version = "0.2", optional = true }