Skip to main content

max / quasi

0.29.0: an upload, said through the router Task f7261a5a's router half. Accepted is the owned mirror of layout::Accepted, the same split Choice makes and for the same reason: a screen is built by a handler and outlives the strings it was built from. layout::Family is used directly rather than mirrored, because it borrows nothing and a second spelling would only be a second place to add the fourth family to. Field::upload, Field::many and Field::accepts_media, and with_layout carries the two new members across the seam. Nothing else was needed for the other two axes of an upload: where the bytes go is Field::changes, which a field that writes on its own already carries, and how far along it is is that action's Awaiting, which has named an upload's file length since 0.29.1 of the description layer. Takes makeover-layout 0.31, makeover-webview 0.51, makeover-tui 0.30 and makeover-immediate 0.30.
Co-Authored-By
Claude Opus 5 (1M context) <noreply@anthropic.com>
Author: Max Johnson <me@maxj.phd> · 2026-08-18 21:15 UTC
Signed with PGP, not checked
Commit: 16d86db9b1fbd07e59b4eb781801f6e7ffbb925b
Parent: c603b91
15 files changed, +266 insertions, -66 deletions
M Cargo.lock +22 -22
@@ -2605,7 +2605,7 @@
2605 2605
2606 2606 [[package]]
2607 2607 name = "makeover-immediate"
2608 - version = "0.29.1"
2608 + version = "0.30.0"
2609 2609 dependencies = [
2610 2610 "egui",
2611 2611 "egui_extras",
@@ -2614,11 +2614,11 @@
2614 2614
2615 2615 [[package]]
2616 2616 name = "makeover-layout"
2617 - version = "0.30.0"
2617 + version = "0.31.0"
2618 2618
2619 2619 [[package]]
2620 2620 name = "makeover-touch"
2621 - version = "0.21.0"
2621 + version = "0.22.0"
2622 2622 dependencies = [
2623 2623 "makeover-geometry",
2624 2624 "makeover-layout",
@@ -2626,7 +2626,7 @@
2626 2626
2627 2627 [[package]]
2628 2628 name = "makeover-tui"
2629 - version = "0.29.1"
2629 + version = "0.30.0"
2630 2630 dependencies = [
2631 2631 "makeover",
2632 2632 "makeover-layout",
@@ -2635,7 +2635,7 @@
2635 2635
2636 2636 [[package]]
2637 2637 name = "makeover-webview"
2638 - version = "0.50.0"
2638 + version = "0.51.0"
2639 2639 dependencies = [
2640 2640 "makeover-geometry",
2641 2641 "makeover-layout",
@@ -3404,11 +3404,11 @@
3404 3404
3405 3405 [[package]]
3406 3406 name = "quasi"
3407 - version = "0.28.2"
3407 + version = "0.29.0"
3408 3408
3409 3409 [[package]]
3410 3410 name = "quasi-axum"
3411 - version = "0.28.2"
3411 + version = "0.29.0"
3412 3412 dependencies = [
3413 3413 "axum",
3414 3414 "http",
@@ -3422,7 +3422,7 @@
3422 3422
3423 3423 [[package]]
3424 3424 name = "quasi-basics"
3425 - version = "0.28.2"
3425 + version = "0.29.0"
3426 3426 dependencies = [
3427 3427 "makeover-layout",
3428 3428 "quasi-http",
@@ -3432,7 +3432,7 @@
3432 3432
3433 3433 [[package]]
3434 3434 name = "quasi-bench"
3435 - version = "0.28.2"
3435 + version = "0.29.0"
3436 3436 dependencies = [
3437 3437 "dhat",
3438 3438 "makeover",
@@ -3447,7 +3447,7 @@
3447 3447
3448 3448 [[package]]
3449 3449 name = "quasi-http"
3450 - version = "0.28.2"
3450 + version = "0.29.0"
3451 3451 dependencies = [
3452 3452 "form_urlencoded",
3453 3453 "http",
@@ -3456,7 +3456,7 @@
3456 3456
3457 3457 [[package]]
3458 3458 name = "quasi-immediate"
3459 - version = "0.28.2"
3459 + version = "0.29.0"
3460 3460 dependencies = [
3461 3461 "docengine",
3462 3462 "egui",
@@ -3466,7 +3466,7 @@
3466 3466
3467 3467 [[package]]
3468 3468 name = "quasi-notifs"
3469 - version = "0.28.2"
3469 + version = "0.29.0"
3470 3470 dependencies = [
3471 3471 "quasi-router",
3472 3472 "synckit-config",
@@ -3474,7 +3474,7 @@
3474 3474
3475 3475 [[package]]
3476 3476 name = "quasi-router"
3477 - version = "0.28.2"
3477 + version = "0.29.0"
3478 3478 dependencies = [
3479 3479 "makeover-layout",
3480 3480 ]
@@ -3491,7 +3491,7 @@
3491 3491
3492 3492 [[package]]
3493 3493 name = "quasi-tauri"
3494 - version = "0.28.2"
3494 + version = "0.29.0"
3495 3495 dependencies = [
3496 3496 "http",
3497 3497 "quasi-http",
@@ -3504,7 +3504,7 @@
3504 3504
3505 3505 [[package]]
3506 3506 name = "quasi-tui"
3507 - version = "0.28.2"
3507 + version = "0.29.0"
3508 3508 dependencies = [
3509 3509 "docengine",
3510 3510 "makeover",
@@ -3516,7 +3516,7 @@
3516 3516
3517 3517 [[package]]
3518 3518 name = "quasi-webview"
3519 - version = "0.28.2"
3519 + version = "0.29.0"
3520 3520 dependencies = [
3521 3521 "docengine",
3522 3522 "makeover-layout",
@@ -6187,14 +6187,14 @@
6187 6187 "winnow 1.0.4",
6188 6188 ]
6189 6189
6190 - [[patch.unused]]
6191 - name = "synckit-client"
6192 - version = "0.8.0"
6193 -
6194 6190 [[patch.unused]]
6195 6191 name = "quasi-type"
6196 6192 version = "0.1.0"
6197 6193
6194 + [[patch.unused]]
6195 + name = "makeover-build"
6196 + version = "0.46.0"
6197 +
6198 6198 [[patch.unused]]
6199 6199 name = "kberg"
6200 6200 version = "0.1.0"
@@ -6212,5 +6212,5 @@
6212 6212 version = "0.4.0"
6213 6213
6214 6214 [[patch.unused]]
6215 - name = "makeover-build"
6216 - version = "0.45.0"
6215 + name = "synckit-client"
6216 + version = "0.8.0"
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-axum"
3 - version = "0.28.2"
3 + version = "0.29.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.28.2" }
17 - quasi-http = { path = "../quasi-http", version = "0.28.2" }
16 + quasi-router = { path = "../quasi-router", version = "0.29.0" }
17 + quasi-http = { path = "../quasi-http", version = "0.29.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.28.2" }
23 + quasi-webview = { path = "../quasi-webview", version = "0.29.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.28.2"
3 + version = "0.29.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.28.2" }
17 - makeover-layout = "0.30.0"
16 + quasi-router = { path = "../quasi-router", version = "0.29.0" }
17 + makeover-layout = "0.31.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.28.2" }
24 - quasi-http = { path = "../quasi-http", version = "0.28.2" }
23 + quasi-webview = { path = "../quasi-webview", version = "0.29.0" }
24 + quasi-http = { path = "../quasi-http", version = "0.29.0" }
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-bench"
3 - version = "0.28.2"
3 + version = "0.29.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,15 +22,15 @@
22 22 count = ["dep:dhat"]
23 23
24 24 [dependencies]
25 - quasi-router = { path = "../quasi-router", version = "0.28.2" }
26 - quasi-webview = { path = "../quasi-webview", version = "0.28.2" }
27 - quasi-tui = { path = "../quasi-tui", version = "0.28.2" }
25 + quasi-router = { path = "../quasi-router", version = "0.29.0" }
26 + quasi-webview = { path = "../quasi-webview", version = "0.29.0" }
27 + quasi-tui = { path = "../quasi-tui", version = "0.29.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.28.2" }
32 - makeover-layout = "0.30.0"
33 - makeover-tui = { version = "0.29.0", features = ["theme"] }
31 + quasi-http = { path = "../quasi-http", version = "0.29.0" }
32 + makeover-layout = "0.31.0"
33 + makeover-tui = { version = "0.30.0", features = ["theme"] }
34 34 # Only to load a bundled theme file. `makeover_tui::Theme` is `#[non_exhaustive]`,
35 35 # so `Theme::from_theme` is the one way to get one, the same reason quasi-tui's
36 36 # tests take this.
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-http"
3 - version = "0.28.2"
3 + version = "0.29.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.28.2" }
16 + quasi-router = { path = "../quasi-router", version = "0.29.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.28.2"
3 + version = "0.29.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,12 +12,12 @@
12 12 categories = ["gui"]
13 13
14 14 [dependencies]
15 - quasi-router = { path = "../quasi-router", version = "0.28.2" }
15 + quasi-router = { path = "../quasi-router", version = "0.29.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
19 19 # renderer instead of one copy per app.
20 - makeover-immediate = "0.29.0"
20 + makeover-immediate = "0.30.0"
21 21 egui = { version = "0.35", default-features = false }
22 22 # Markdown to text for `Node::Rich`. The same crate the webview renderer takes,
23 23 # reading the same source: what differs is that it can emit markup and this
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-notifs"
3 - version = "0.28.2"
3 + version = "0.29.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.28.2", optional = true }
27 + quasi-router = { path = "../quasi-router", version = "0.29.0", optional = true }
28 28 synckit-config = { git = "https://makenot.work/git/max/synckit.git", version = "0.2", optional = true }
@@ -1,6 +1,6 @@
1 1 [package]
2 2 name = "quasi-router"
3 - version = "0.28.2"
3 + version = "0.29.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
@@ -13,4 +13,4 @@
13 13 workspace = true
14 14
15 15 [dependencies]
16 - makeover-layout = "0.30.0"
16 + makeover-layout = "0.31.0"