Skip to content

0.13.1 - 2026-09-21

Choose a tag to compare

@sfisol sfisol released this 21 Sep 13:44
· 58 commits to master since this release

Added

  • vertigo serve and vertigo watch now compress responses (brotli/gzip/zstd, by content
    negotiation). The wasm binary and wasm_run.js are then about 3 times smaller.
    Pass --disable-compression behind a proxy or CDN that already compresses.
    The fullstack template (vertigo new -t fullstack) does the same through
    App::wrap(Compress::default()).

Performance

  • Reduced WASM sizes by around 10% by de-genericization.
  • Reduces wasm_run.js by 9% - dead code removed, and different functions were optimized.
  • SSR: Per-request WASM instantiation got about 24% cheaper (see fix below).

Fixed

  • Hydration fail when the app subscribes to a value before the root dom! block.
  • --proxy forwarded the upstream's Content-Encoding and Content-Length even though awc
    had already decoded the body, so proxying to an upstream that compressed produced a response
    no client could decode.
  • SSR: WASM instantiation types order problem. Imports are now resolved by name, once at startup.
    Per-request instantiation got about 24% cheaper. A missing or mistyped import is now reported
    at startup, naming the import, instead of per request.

Internals

  • Added tests for the JsJson codec (jsjson.ts).

  • Added benchmarks:

    • task ssr-bench renders a set of pages and reports where the time went,
    • task hydration-bench loads a set of server-rendered pages in a real browser and reports
      how long hydration took and how many DOM mutations it performed,
    • task reactive-bench runs the reactive-graph benchmark suite,
    • task dom-bench runs the end-to-end benchmark suite.

    task bench runs all four benchmarks. task bench-compare runs all four benchmarks and
    compares them against the baseline.

    See benchmarks

  • vertigo-cli gained an off-by-default ssr-timings feature, which is what exposes the
    per-phase breakdown through ServerState::request_timed. It compiles to nothing when off