Web: size-optimised wasm profile (27.0 → 18.1 MB); bump to 0.3.1 (#109)
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 <noreply@anthropic.com>
This commit is contained in:
parent
a2bf43927f
commit
f9b1b7fb15
|
|
@ -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",
|
||||
|
|
|
|||
14
Cargo.toml
14
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"
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
|
||||
<title>FigCraft</title>
|
||||
<link data-trunk rel="rust" data-bin="figcraft-web" data-wasm-opt="z" data-weak-refs />
|
||||
<link data-trunk rel="rust" data-bin="figcraft-web" data-cargo-profile="web-release" data-wasm-opt="z" data-wasm-opt-params="--enable-bulk-memory --enable-bulk-memory-opt --enable-nontrapping-float-to-int --enable-sign-ext --enable-reference-types --enable-multivalue" data-weak-refs />
|
||||
<style>
|
||||
html, body { margin: 0; padding: 0; width: 100%; height: 100%; overflow: hidden; background: #f5f5f5; }
|
||||
#figcraft_canvas { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
|
||||
|
|
|
|||
|
|
@ -150,6 +150,13 @@ tar -xzf figcraft-<v>-freebsd-x86_64.tar.gz --strip-components 1 -C /usr/local
|
|||
with sample `_headers`/`.htaccess` and the hosting guide. The app uses WebGPU with a WebGL2
|
||||
fallback; `?webgl` forces WebGL2. 0.1.0: wasm 17.7 MiB raw, 6.7 MiB gzip, 4.4 MiB Brotli.
|
||||
|
||||
The wasm is built with the size-optimised `web-release` Cargo profile (`opt-level = "s"`, fat
|
||||
LTO, one codegen unit; `data-cargo-profile` in `apps/figcraft-web/index.html`) and then
|
||||
`wasm-opt -Oz`, which needs the wasm features rustc emits by default passed explicitly
|
||||
(`data-wasm-opt-params`). Sizes: 0.2.0 21.1 MiB and 0.3.0 25.8 MiB (failed the gate; the plugin
|
||||
interpreter and collaboration code landed) with the desktop `release` profile; 0.3.1 17.2 MiB
|
||||
with `web-release`. The desktop builds keep `release`.
|
||||
|
||||
## Secrets
|
||||
|
||||
All signing secrets are **`release`-environment secrets** (deployment branches: `release` only),
|
||||
|
|
|
|||
Loading…
Reference in New Issue