From f9b1b7fb1557b6489b457931486d65c750b49e42 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Sat, 10 Oct 2026 21:05:23 -0400 Subject: [PATCH] =?UTF-8?q?Web:=20size-optimised=20wasm=20profile=20(27.0?= =?UTF-8?q?=20=E2=86=92=2018.1=20MB);=20bump=20to=200.3.1=20(#109)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The 0.3.0 web release failed packaging/web/package.sh's 24 MiB gate: the wasm grew from 22.2 MB (0.2.0) to 27.0 MB once the plugin sandbox (wasmi + wasmparser, #101) and the collaboration crates (#103-#105) joined the browser build, which still used the desktop `release` profile (opt-level 3, thin LTO, 4 codegen units). - Cargo.toml: new `web-release` profile (inherits release; opt-level "s", fat LTO, one codegen unit, no debug info, stripped). opt-level "z" measured 16.9 MB; "s" keeps render speed. - apps/figcraft-web/index.html: build with that profile, and pass the wasm features rustc emits (bulk memory etc.) to wasm-opt, which otherwise rejects the size-optimised module. - Version 0.3.0 -> 0.3.1. docs/releasing.md: the web profile and size history. Co-authored-by: Claude Opus 5.5 --- Cargo.lock | 40 ++++++++++++++++++------------------ Cargo.toml | 14 ++++++++++++- apps/figcraft-web/index.html | 2 +- docs/releasing.md | 7 +++++++ 4 files changed, 41 insertions(+), 22 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5abec32..4c106e2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1396,7 +1396,7 @@ checksum = "b97b65636e5b9ef369943878ac74335ba1c55c1cb6adbf1e2c293c624248d693" [[package]] name = "figcraft" -version = "0.3.0" +version = "0.3.1" dependencies = [ "arboard", "eframe", @@ -1417,7 +1417,7 @@ dependencies = [ [[package]] name = "figcraft-cli" -version = "0.3.0" +version = "0.3.1" dependencies = [ "figcraft-doc", "figcraft-engine", @@ -1431,7 +1431,7 @@ dependencies = [ [[package]] name = "figcraft-collab" -version = "0.3.0" +version = "0.3.1" dependencies = [ "base64 0.22.1", "figcraft-color", @@ -1446,7 +1446,7 @@ dependencies = [ [[package]] name = "figcraft-collab-net" -version = "0.3.0" +version = "0.3.1" dependencies = [ "base64 0.22.1", "figcraft-collab", @@ -1461,7 +1461,7 @@ dependencies = [ [[package]] name = "figcraft-color" -version = "0.3.0" +version = "0.3.1" dependencies = [ "kurbo", "serde", @@ -1470,7 +1470,7 @@ dependencies = [ [[package]] name = "figcraft-doc" -version = "0.3.0" +version = "0.3.1" dependencies = [ "figcraft-color", "figcraft-geom", @@ -1482,7 +1482,7 @@ dependencies = [ [[package]] name = "figcraft-engine" -version = "0.3.0" +version = "0.3.1" dependencies = [ "base64 0.22.1", "figcraft-collab", @@ -1507,7 +1507,7 @@ dependencies = [ [[package]] name = "figcraft-format" -version = "0.3.0" +version = "0.3.1" dependencies = [ "figcraft-doc", "image", @@ -1519,7 +1519,7 @@ dependencies = [ [[package]] name = "figcraft-geom" -version = "0.3.0" +version = "0.3.1" dependencies = [ "kurbo", "serde", @@ -1527,7 +1527,7 @@ dependencies = [ [[package]] name = "figcraft-layout" -version = "0.3.0" +version = "0.3.1" dependencies = [ "figcraft-doc", "figcraft-geom", @@ -1535,7 +1535,7 @@ dependencies = [ [[package]] name = "figcraft-mcp" -version = "0.3.0" +version = "0.3.1" dependencies = [ "base64 0.22.1", "figcraft-collab-net", @@ -1551,7 +1551,7 @@ dependencies = [ [[package]] name = "figcraft-pathops" -version = "0.3.0" +version = "0.3.1" dependencies = [ "figcraft-doc", "figcraft-geom", @@ -1560,7 +1560,7 @@ dependencies = [ [[package]] name = "figcraft-pdf" -version = "0.3.0" +version = "0.3.1" dependencies = [ "figcraft-color", "figcraft-doc", @@ -1577,7 +1577,7 @@ dependencies = [ [[package]] name = "figcraft-plugin" -version = "0.3.0" +version = "0.3.1" dependencies = [ "serde", "serde_json", @@ -1588,7 +1588,7 @@ dependencies = [ [[package]] name = "figcraft-render" -version = "0.3.0" +version = "0.3.1" dependencies = [ "crc32fast", "figcraft-color", @@ -1604,7 +1604,7 @@ dependencies = [ [[package]] name = "figcraft-svg" -version = "0.3.0" +version = "0.3.1" dependencies = [ "base64 0.22.1", "figcraft-color", @@ -1618,7 +1618,7 @@ dependencies = [ [[package]] name = "figcraft-text" -version = "0.3.0" +version = "0.3.1" dependencies = [ "figcraft-doc", "figcraft-geom", @@ -1630,7 +1630,7 @@ dependencies = [ [[package]] name = "figcraft-ui-egui" -version = "0.3.0" +version = "0.3.1" dependencies = [ "base64 0.22.1", "egui", @@ -1651,7 +1651,7 @@ dependencies = [ [[package]] name = "figcraft-web" -version = "0.3.0" +version = "0.3.1" dependencies = [ "eframe", "egui", @@ -5631,7 +5631,7 @@ checksum = "9440ea3e5aeabb0ac63af70daf835274065238cdd0cec83418f417eae38bacee" [[package]] name = "xtask" -version = "0.3.0" +version = "0.3.1" dependencies = [ "figcraft-color", "figcraft-doc", diff --git a/Cargo.toml b/Cargo.toml index 612d626..c4d38d1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ exclude = ["plugins"] # default-members = ["crates/*", "apps/figcraft", "apps/figcraft-cli", "xtask"] [workspace.package] -version = "0.3.0" +version = "0.3.1" edition = "2024" license = "MIT OR Apache-2.0" rust-version = "1.95" @@ -96,3 +96,15 @@ opt-level = 1 [profile.release] lto = "thin" codegen-units = 4 + +# The browser build only (apps/figcraft-web/index.html: data-cargo-profile). Optimised for size: +# packaging/web/package.sh fails a .wasm over 24 MiB (Cloudflare's per-file cap is 25 MiB). +# wasm32-unknown-unknown always aborts on panic, so panic = "abort" changes nothing there. +[profile.web-release] +inherits = "release" +opt-level = "s" +lto = "fat" +codegen-units = 1 +debug = false +strip = true +panic = "abort" diff --git a/apps/figcraft-web/index.html b/apps/figcraft-web/index.html index 7c6487f..1a9969d 100644 --- a/apps/figcraft-web/index.html +++ b/apps/figcraft-web/index.html @@ -4,7 +4,7 @@ FigCraft - +