Release 0.4.0
Technical write-up: https://katei.dev/blog/2026/09/18/wasmkit-0-4-0/
What's Changed
- Add
wasmkit.svgby @MaxDesiatov in #366 - WasmParser: Remove
consume(_ expected: Set<UInt8>)fromByteStreamby @kateinoigakukun in #367 - WasmParser: Stop taking
FilePathindetectWasmFileTypeby @kateinoigakukun in #368 - CI: Skip redundant benchmark runs to reduce CI time by @kateinoigakukun in #370
- WasmParser: Add
FileSystemtrait to allow omitting file system helpers by @kateinoigakukun in #369 - NFC: Remove unnecessary
returns by @kkebo in #372 - Update Swift SDKs for Swift 6.3.3 by @MaxDesiatov in #374
- Bump Amazon Linux version to 2023 in
README.mdby @MaxDesiatov in #375 - Upgrade
swift-systemdependency version by @MaxDesiatov in #376 - Bump version to 0.3.1 by @MaxDesiatov in #377
- Revert "Benchmark with
nativebuild system in dev snapshot builds" by @MaxDesiatov in #378 - Add Relaxed SIMD proposal implementation by @MaxDesiatov in #373
- Support extended-const arithmetic in constant expressions by @MaxDesiatov in #371
- Add
wat2wasmexample compatible with Embedded Swift by @MaxDesiatov in #273 - Move byte-stream offset control out of the I/O sources by @kateinoigakukun in #379
- Add shared memory support for mprotect-able platforms by @kateinoigakukun in #380
- Defensive WIT overlay symbols qualification by @MaxDesiatov in #384
- SwiftSyntax-based
WITExtractorre-implementation by @MaxDesiatov in #381 - Debugger: fix step-into for calls w/ arguments, add
qWasmGlobalby @MaxDesiatov in #385 - Move StatsCollector behind an EngineStats package trait by @kateinoigakukun in #388
- Make _CWasmKit headers portable to non-Clang compilers by @kateinoigakukun in #389
- Add MultiThread trait and PlatformMutex wrapper by @kateinoigakukun in #390
- Add printable core types and a typed Trap kind in WasmKitError by @kateinoigakukun in #391
- Remove ImportError and restrict ResourceLimiter to class types by @kateinoigakukun in #393
- Replace EntityHandle dynamicMemberLookup with explicit accessors by @kateinoigakukun in #394
- Support Embedded Swift in the core engine by @kateinoigakukun in #395
- Add ESP32 example with a portable smoke test by @kateinoigakukun in #396
- Drop swift-system dependency from WasmParser and WasmKit by @kateinoigakukun in #397
- Add
--argv0and--dir host::guestmapping towasmkit runby @MaxDesiatov in #392 - Replace SystemExtras with an internal, injectable platform layer in WASI by @kateinoigakukun in #398
- Make the debugger stack sans-IO and drop NIO, swift-log, and swift-system by @kateinoigakukun in #399
- Fix the 32-bit wasm memory page limit on 32-bit hosts by @kateinoigakukun in #401
- Drop the async withThrowing/CleanupFailure overloads from WASI by @kateinoigakukun in #402
- Use a PlatformMutex in WASI instead of Synchronization.Mutex by @kateinoigakukun in #403
- Decouple WASIFile from GuestMemory by @kateinoigakukun in #404
- Make the WASI host module table generic over guest memory by @kateinoigakukun in #406
- Allow linking a subset of the WASI preview1 surface by @kateinoigakukun in #407
- Decouple WASIDir from its associated iterator type by @kateinoigakukun in #408
- Cover WASI in the embedded check and strip unused code by @kateinoigakukun in #409
- Run a WASI guest on emulated hardware in the ESP32 example by @kateinoigakukun in #410
- Run the GDB stub on embedded targets by @kateinoigakukun in #411
- Materialize stack-live constants on block entry by @kateinoigakukun in #412
- Do not read a host callee as a wasm function when stepping by @kateinoigakukun in #405
- Accept an empty value for an
--envvariable by @JDevlieghere in #414 - Add
wasmkit-cli wastsubcommand w/ newWASTRunnermodule by @MaxDesiatov in #415 - Demote debugger server lifecycle logs to trace by @JDevlieghere in #416
- Stop leaking and losing breakpoints while stepping by @JDevlieghere in #417
- Exit with the client and detach from the guest by @JDevlieghere in #418
- Add support for LLDB's updated
qWasmGlobalpacket by @JDevlieghere in #420 - Advertise the
qWasmInstance+feature LLDB looks for by @JDevlieghere in #422 - Report the guest's exit status instead of dropping the connection by @JDevlieghere in #424
- Report a stop at the start of the instruction run by @JDevlieghere in #425
- Bind breakpoint resolution to the containing function by @JDevlieghere in #426
- Support writing guest linear memory by @JDevlieghere in #427
- Add WASI Threads thread-spawn support by @kateinoigakukun in #423
- Add a wasmi-benchmarks replay harness under Benchmarks/ by @kateinoigakukun in #429
- Recommend --omit-frame-pointers for Linux release builds and use it for release artifacts by @kateinoigakukun in #430
- Use memmove for bulk memory and table copies by @kateinoigakukun in #432
- Answer
qMemoryRegionInfowith the region containing an address by @JDevlieghere in #428 - Fuse integer comparisons into conditional branches by @kateinoigakukun in #433
- Split global.get/global.set by value shape and drop the storage tag by @kateinoigakukun in #434
- Collapse br_if landing pads that copy nothing into a single branch by @kateinoigakukun in #435
- Make wasm-to-wasm return call-free and merge frame initialization into one copy by @kateinoigakukun in #436
- Make memory load/store handlers frame-free with a single bounds-check branch by @kateinoigakukun in #437
- Relink local.tee and v128 producers into the local's slot by @kateinoigakukun in #439
- Store VReg as a pre-shifted byte offset by @kateinoigakukun in #444
- Fuse float compares into branches and add two-op float superinstructions by @kateinoigakukun in #445
- Read one-slot immediates as a single word and hoist the next-handler load by @kateinoigakukun in #446
- Fuse and-tests into conditional branches by @kateinoigakukun in #447
- Add two-operation integer superinstructions by @kateinoigakukun in #448
- Copy the direct-threaded handler table once instead of per emitted instruction by @kateinoigakukun in #449
- Hand integer values to the next instruction in an accumulator register by @kateinoigakukun in #451
- Route load and store operands through the accumulator on 32-bit memories by @kateinoigakukun in #452
- Hand f64 values to the next instruction in a float accumulator register by @kateinoigakukun in #453
- Carry integer constant operands in the instruction by @kateinoigakukun in #454
- Hand values that are read again later to the next instruction in the accumulator by @kateinoigakukun in #456
- Keep a value in the accumulator across one copy into a local by @kateinoigakukun in #457
- Inline br_table into its handler by @kateinoigakukun in #458
- Select values instead of registers and hand select its condition in the accumulator by @kateinoigakukun in #459
- Report a trap as a stop rather than losing the connection by @JDevlieghere in #468
- Package.swift: make warnings-as-errors opt-in via
WASMKIT_WARNINGS_AS_ERRORSby @shopifyski in #469 - Run two adjacent register copies in one instruction by @kateinoigakukun in #460
- Weight every operand of the memory bounds check so the in-bounds path falls through by @kateinoigakukun in #461
- Fix recurring flaky CI failures: SwiftPM prebuilts race, libdispatch SIGSEGV, Android snapshot restore by @kateinoigakukun in #470
- Keep f32 values in FP registers by @kateinoigakukun in #462
- Make the parser's instruction dispatch inlinable so the translator gets a specialized copy by @kateinoigakukun in #463
- Fold an integer comparison into the select that consumes it by @kateinoigakukun in #464
- Fold a copy into the load that reads the copied address by @kateinoigakukun in #465
- Shrink the code generated per opcode outside the handlers by @kateinoigakukun in #466
- Batch fixes found by fuzzers by @kateinoigakukun in #472
- Fix Embedded Swift builds on ARM and on host platforms by @kateinoigakukun in #473
- Bump version to 0.4.0 by @kateinoigakukun in #471
New Contributors
- @JDevlieghere made their first contribution in #414
- @shopifyski made their first contribution in #469
Full Changelog: 0.3.0...0.4.0