Skip to content

Releases: explodingcamera/tinywasm

v0.9.0

05 May 20:42
v0.9.0
737b75a

Choose a tag to compare

[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.

v0.9.0-alpha.1

02 May 20:15
v0.9.0-alpha.1
1a58b1c

Choose a tag to compare

v0.9.0-alpha.1 Pre-release
Pre-release

v0.9.0-alpha.0

26 Apr 20:19
v0.9.0-alpha.0
a8d7f37

Choose a tag to compare

v0.9.0-alpha.0 Pre-release
Pre-release

v0.8.0

29 Aug 13:22
v0.8.0
d2064b9

Choose a tag to compare

[0.8.0] - 2024-08-29

All Commits: v0.7.0...v0.8.0

Changed

  • Full support for Multi-Memory proposal
  • Extern tables now correctly update their type after growing
  • Increased MSRV to 1.80.0
  • Improved support for WebAssembly 2.0 features
  • Simplify and optimize the interpreter loop
  • Use a seperate stack and locals for 32, 64 and 128 bit values and references (#21)
  • Updated to latest wasmparser version
  • Removed benchmarks comparing TinyWasm to other WebAssembly runtimes to reduce build dependencies
  • Memory and Data Instances are no longer reference counted

v0.7.0

15 May 11:54
v0.7.0
eb6f7c7

Choose a tag to compare

[0.7.0] - 2024-05-15

All Commits: v0.6.0...v0.7.0

Changed

  • Remove all unsafe code (This includes the public TinyWasmModule::from_twasm_unchecked)
  • Refactor interpreter loop
  • Optimize Call-frames
  • Remove unnecessary reference counter data from store

v0.6.1

09 May 22:16
v0.6.1
2ac04cd

Choose a tag to compare

[0.6.1] - 2024-05-10

All Commits: v0.6.0...v0.6.1

Changed

  • Switched back to the original wasmparser crate, which recently added support for no_std
  • Performance improvements
  • Updated dependencies

v0.6.0

27 Mar 10:34
v0.6.0
3904c64

Choose a tag to compare

[0.6.0] - 2024-03-27

All Commits: v0.5.0...v0.6.0

Added

  • Imports and Module are now cloneable (#9)

Changed

  • 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-darwin and armv7-unknown-linux-gnueabihf targets to CI (#12)

Removed

  • Removed the EndFunc instruction, as it was already covered by the Return instruction
    This also fixes a weird bug that only occurred on certain nightly versions of Rust

v0.5.0

01 Mar 15:15
v0.5.0
d2b6c53

Choose a tag to compare

[0.5.0] - 2024-03-01

All Commits: v0.4.0...v0.5.0

Added

  • Added a CHANGELOG.md
  • Added merged instructions for improved performance and reduced byte code size

Changed

  • Now using a custom wasmparser fork
  • 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
  • Simpliefied a lot of the internal macros

Removed

  • Removed duplicate internal code

v0.4.0

03 Feb 23:09
v0.4.0
712b7da

Choose a tag to compare

v0.3.0 - Full WebAssembly 1.0 support

  • Added benchmarks
  • Performance improvements
  • Added usage examples
  • Pre-Processed Wasm (.twasm)
  • Support Bulk-Memory proposal

Full Changelog: v0.3.0...v0.4.0

v0.3.0

26 Jan 14:36
v0.3.0
67f0fd6

Choose a tag to compare

v0.3.0 - Full WebAssembly 1.0 support

  • 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_std support

Full Changelog: v0.2.0...v0.3.0