Skip to content

beta-0.2.0

Choose a tag to compare

@beaucollins beaucollins released this 22 Sep 20:16

What's new

Runtime & stability

  • Hardened JS-runtime teardown: join the JS thread before member destruction, degrade
    bridge-function resolution instead of crashing, make sync bridge calls non-raising on
    JS throw, and drop one-way void calls to expired proxies.
  • Memory-safety fixes: refuse to resurrect a SharedPtrRefCountable from a raw pointer,
    retain-before-release with atomic swap on object-field writes, treat a null WeakRef
    deref as a collected proxy.
  • Fixed a marshalling amplification bug where untyped JS→native conversion converted every
    property twice (2^depth), causing std::bad_alloc.
  • Stop holding the ResourceManager mutex across resource loads; settle promises on cancel;
    add a cooperative termination mode that drains teardown instead of aborting.
  • Fail deadline-bounded sync JS calls fast while the JS thread is stalled.
  • Security: bounds-check UTF-8/UTF-16 decode look-ahead.

Rendering, text & layout

  • Linear and radial gradients for shape fills; hierarchical color palettes and theme-aware
    assets.
  • Transform origins and CSS-style composed transforms.
  • Renderer memoization and reconciliation fixes.
  • iOS text measurement fixes: include font leading, restore one-line-tall empty inputs,
    notify TypeScript of window-size changes.
  • Skip TextView shadow layers on Android 6 to avoid the RenderScript blur SIGSEGV.
  • Added Device.getDynamicTypeScale and a transform-API snapshot suite.
  • Isolate web PersistentStoreNative memory by store name.

Compiler & bindings

  • Native API versioning and compatibility guards.
  • Native JavaScript class bindings and optimized utilities.
  • Fixed generated type headers self-importing, which broke clang-module / Swift interop.
  • New golden-diff harnesses (compiler emit + platform bindings) and a prebuilt compiler bump.

Networking & workers

  • HTTP request manager for CLI apps; Android and native-client request cancelation.
  • MessageChannel support and aggressive worker termination.

Debugger & DevTools

  • Browser-based Valdi debugger and cross-platform DevTools capabilities.

CLI & tooling

  • Bootstrap validates the project name as a Bazel module name.
  • Fixed inspect command packaging; added a CLI postbuild step.
  • Hand the Android back button back to the platform.
  • Flush stdout writes in ConsoleLogger::writeDirect.

Build system & CI

  • Linux support: upgraded LLVM 16 → 19.1.7 so //valdi:test runs on Linux, with a hermetic
    NDK and a green Linux build.
  • Added an AddressSanitizer CI job; unified open-source CI across internal and external with
    a parity checker.
  • Dependency bumps: rules_kotlin 2.3.10, rules_python 1.9.0, and RBE iOS crosscompilation.
  • resvg now builds from source; the prebuilt resvg_libs archive is no longer shipped.

Performance

  • Cache native number-formatting instances, parallelize ValdiProcessImages asset
    conversion, drain parked view transactions before external-surface rasters.

Community contributions

Thanks to everyone who contributed through the public repo this release (PRs imported via
Copybara, verified in the beta-0.1.1...beta-0.2.0 range):

Upgrading

  • Bootstrap CLI @snap/valdi 1.2.0 defaults new projects to beta-0.2.0 for both Valdi
    and Valdi_Widgets. Existing projects: bump VALDI_TAG / WIDGETS_TAG in MODULE.bazel
    and the --registry in .bazelrc to beta-0.2.0.

Known issues

  • Android TextField autofit was reverted this cycle to fix a disappearing-prompt regression;
    PR #107 (text rendering improvements) is only partially present as a result.