All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
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.
- 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) - Parse-only support for the
annotationsproposal - 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
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 now come from
engine::Config, and memory allocation is lazy until first access. - Module-internal by-index inspection APIs are now gated behind
guest-debug, and runtimeDebugimplementations are gated behinddebug. Moduleis now re-exported directly fromtinywasm_types; themodulesubmodule was removed.- MSRV increased to 1.95 and the crate now uses Rust 2024.
Error,Trap, andLinkingErrorare now#[non_exhaustive].Trapvariant discriminants changed; do not rely on casting variants to integers.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 postcard-based and 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.
- 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 archive no_std support, which was broken in the previous release, and added tests to ensure it stays working.
ModuleInstance::memoryandFuncContext::memoryare now actually immutable (#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.
- 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 persisted
twasmarchives; the format is now postcard-based and not backwards compatible with earlier releases.
All Commits: https://github.com/explodingcamera/tinywasm/compare/v0.7.0...v0.8.0
- Full support for Multi-Memory proposal
- Improved support for WebAssembly 2.0 features
- Extern tables now correctly update their type after growing
- Increased MSRV to 1.80.0
- Simplify and optimize the interpreter loop
- Use a separate stack and locals for 32, 64 and 128 bit values and references (#21)
- Updated to latest
wasmparserversion - Removed benchmarks comparing TinyWasm to other WebAssembly runtimes to reduce build dependencies
- Memory and Data Instances are no longer reference counted
All Commits: https://github.com/explodingcamera/tinywasm/compare/v0.6.0...v0.7.0
- Remove all unsafe code
- Refactor interpreter loop
- Optimize Call-frames
- Remove unnecessary reference counter data from store
All Commits: https://github.com/explodingcamera/tinywasm/compare/v0.6.0...v0.6.1
- Switched back to the original
wasmparsercrate, which recently added support forno_std - Performance improvements
- Updated dependencies
All Commits: https://github.com/explodingcamera/tinywasm/compare/v0.5.0...v0.6.0
ImportsandModuleare now cloneable (#9)
- Improved documentation and added more tests
- Tests can now be run on more targets (#11)
- Nightly version has been updated to fix broken builds in some cases (#12)
- Add
aarch64-apple-darwinandarmv7-unknown-linux-gnueabihftargets to CI (#12)
- Removed the
EndFuncinstruction, as it was already covered by theReturninstruction
This also fixes a weird bug that only occurred on certain nightly versions of Rust
All Commits: https://github.com/explodingcamera/tinywasm/compare/v0.4.0...v0.5.0
- Added this
CHANGELOG.mdfile to the project - Added merged instructions for improved performance and reduced bytecode size
- Now using a custom
wasmparserfork - Switched to a visitor pattern for parsing WebAssembly modules
- Reduced the overhead of control flow instructions
- Reduced the size of bytecode instructions
- Fixed issues on the latest nightly Rust compiler
- Simplified a lot of the internal macros
- Removed duplicate internal code
All Commits: https://github.com/explodingcamera/tinywasm/compare/v0.3.0...v0.4.0
- Added benchmarks for comparison with other WebAssembly runtimes
- Added support for pre-processing WebAssembly modules into tinywasm bytecode
- Improved examples and documentation
- Implemented the bulk memory operations proposal
- Overall performance improvements
All Commits: https://github.com/explodingcamera/tinywasm/compare/v0.2.0...v0.3.0
- Better trap handling
- Implement linker
- Element instantiation
- Table Operations
- FuncRefs
- Typesafe host functions
- Host function context
- Spec compliance improvements
- Wasm 2.0 testsuite
- Usage examples
- End-to-end tests
- Lots of bug fixes
- Full
no_stdsupport
All Commits: https://github.com/explodingcamera/tinywasm/compare/v0.1.0...v0.2.0
- Support for
br_table - Memory trapping improvements
- Implicit function label scopes
- else Instructions
- All Memory instructions
- Imports
- Basic linking
- Globals
- Fix function addr resolution
- Reference Instructions