[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_sizesproposal (#22 by @danielstuart14) - Support for the
tail_call,memory64,simd,relaxed_simd,wide_arithmetic, andextended_constproposals (#37, #38, #39) - New
EngineAPI (tinywasm::Engineandengine::Config) for runtime configuration - Resumable execution APIs:
call_resumable,resume_with_fuel,resume_with_time_budget, andExecProgress - Host-function fuel APIs:
FuncContext::charge_fuelandFuncContext::remaining_fuel engine::Configsupport for fuel policy, stack sizing, memory backend selection, and trap-on-OOM behavior- New feature flags:
canonicalize-nans,simd-x86,guest-debug,debug, andparallel-parser - Top-level parser re-exports behind the
parserfeature:parse_bytes,parse_file, andparse_stream - Completely new
tinywasmcli
Changed
Store::newnow takes anEngine, useStore::default()for default settings.ModuleInstance::funcnow 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 Debugimplementations are now gated behinddebug.- MSRV increased to 1.95 and the crate now uses Rust 2024.
Error,Trap, andLinkingErrorare now#[non_exhaustive].HostFunction::new,HostFunction::func, andHostFunction::typednow require&mut Store, andImports::link_modulenow takes aModuleInstanceinstead of a raw module instance id.- Cargo features were renamed from
tinywasm-parsertoparserand fromloggingtolog. Error::ParseErrorwas renamed toError::Parser, andError::Twasmwas added.FuncHandleandFuncHandleTypedwere renamed toFunctionandFunctionTyped, and module export lookups moved fromexported_*tofunc_untyped,func, andmemory.- The
twasmarchive 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
simdwas removed. RefNullwas removed and replaced withFuncRefandExternRef.tinywasm::interpreteris no longer a public module.InterpreterRuntimeandTinyWasmValueare no longer public API.FuncHandle::namewas removed.- Mutable
ModuleInstanceexport lookup variantsmemory_mut,table_mut,global_mut, andextern_item_mutwere removed.
Fixed
- Fixed archive no_std support, which was broken in the previous release, and added tests to ensure it stays working.
ModuleInstance::memoryandFuncContext::memorynow 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()withStore::default()for default settings, orStore::new(Engine::new(config))for custom runtime configuration. - Rename the cargo features
tinywasm-parsertoparserandloggingtolog. - Rename
FuncHandletoFunctionandFuncHandleTypedtoFunctionTyped. - Rename module export lookups from
exported_*methods tofunc,func_untyped, andmemory. - Regenerate any pre-existing
twasmarchives, the format is not backwards compatible with earlier releases.