Skip to content

v0.9.0

Latest

Choose a tag to compare

@explodingcamera explodingcamera released this 05 May 20:42
v0.9.0
737b75a

[0.9.0] - 2026-05-05

All Commits: v0.8.0...v0.9.0

This release is a major runtime and API rework. It adds support for several newer WebAssembly proposals, introduces the new Engine configuration API, rewrites large parts of execution and validation, and changes the internal twasm archive format. Benchmarks in the repository currently show roughly 30-90% improvement over 0.8.0 depending on workload and execution mode.

Added

  • Support for the custom_page_sizes proposal (#22 by @danielstuart14)
  • Support for the tail_call, memory64, simd, relaxed_simd, wide_arithmetic, and extended_const proposals (#37, #38, #39)
  • New Engine API (tinywasm::Engine and engine::Config) for runtime configuration
  • Resumable execution APIs: call_resumable, resume_with_fuel, resume_with_time_budget, and ExecProgress
  • Host-function fuel APIs: FuncContext::charge_fuel and FuncContext::remaining_fuel
  • engine::Config support for fuel policy, stack sizing, memory backend selection, and trap-on-OOM behavior
  • New feature flags: canonicalize-nans, simd-x86, guest-debug, debug, and parallel-parser
  • Top-level parser re-exports behind the parser feature: parse_bytes, parse_file, and parse_stream
  • Completely new tinywasm cli

Changed

  • Store::new now takes an Engine, use Store::default() for default settings.
  • ModuleInstance::func now validates exact Wasm signatures at lookup time and fails immediately on mismatches.
  • Stack and call-stack limits can now be defined with engine::Config
  • Module-internal by-index inspection APIs are now gated behind guest-debug
  • Debug implementations are now gated behind debug.
  • MSRV increased to 1.95 and the crate now uses Rust 2024.
  • Error, Trap, and LinkingError are now #[non_exhaustive].
  • HostFunction::new, HostFunction::func, and HostFunction::typed now require &mut Store, and Imports::link_module now takes a ModuleInstance instead of a raw module instance id.
  • Cargo features were renamed from tinywasm-parser to parser and from logging to log.
  • Error::ParseError was renamed to Error::Parser, and Error::Twasm was added.
  • FuncHandle and FuncHandleTyped were renamed to Function and FunctionTyped, and module export lookups moved from exported_* to func_untyped, func, and memory.
  • The twasm archive format is now based on postcard (backwards-incompatible with previous versions) (thanks @dragonnn).
  • The interpreter was refactored around more superinstruction fusion, lower-overhead dispatch, typed-stack locals, jump-oriented lowering, and optional parallel parsing.

Removed

  • Cargo feature simd was removed.
  • RefNull was removed and replaced with FuncRef and ExternRef.
  • tinywasm::interpreter is no longer a public module.
  • InterpreterRuntime and TinyWasmValue are no longer public API.
  • FuncHandle::name was removed.
  • Mutable ModuleInstance export lookup variants memory_mut, table_mut, global_mut, and extern_item_mut were removed.

Fixed

  • Fixed archive no_std support, which was broken in the previous release, and added tests to ensure it stays working.
  • ModuleInstance::memory and FuncContext::memory now take a non-mut reference to self (#41).
  • Untyped host functions now check return values correctly (#27) by @WhaleKit.
  • MemoryRefMut::copy_within(src, dst, len) now follows its documented argument order.
  • Imported tables created with Extern::table(ty, init) now honor the provided init value.
  • Fixed unchecked memory offsets causing issues on 32-bit platforms.

Migration Notes

  • Replace Store::new() with Store::default() for default settings, or Store::new(Engine::new(config)) for custom runtime configuration.
  • Rename the cargo features tinywasm-parser to parser and logging to log.
  • Rename FuncHandle to Function and FuncHandleTyped to FunctionTyped.
  • Rename module export lookups from exported_* methods to func, func_untyped, and memory.
  • Regenerate any pre-existing twasm archives, the format is not backwards compatible with earlier releases.