PackageTrack
Sign in Get early access

walrus

A library for performing WebAssembly transformations

0.26.5 13M downloads/mo #2707 most downloaded on crates.io rustwasm/walrus

What this package is like to depend on

Last release 6 days ago

18 Aug 2026

Ships unpredictably

gaps range from 8 days to 10 months

Some releases are documented

notes for 26 of 50 stable releases

Nothing withdrawn

no release was ever pulled

8 years old

50 releases · first in 2019

15 releases in the last 12 months

see the full history below

Release timeline

50 releases · Feb 2019 to Aug 2026
2020 2021 2022 2023 2024 2025 2026
Release Pre-release

Releases

latest 50
  1. 0.26.5 18 Aug 2026
    Release notes

    What's Changed

    • Add memory.discard instruction support (memory-control proposal) by @guybedford in #319

    Full Changelog: 0.26.4...0.26.5

    Open source →
  2. 0.26.4 27 May 2026
    Release notes

    What's Changed

    • Fix MVP element-segment encoding for table64 active segments by @guybedford in #317

    Full Changelog: 0.26.3...0.26.4

    Open source →
  3. 0.26.3 26 May 2026
    Release notes

    What's Changed

    • Fix panic parsing legacy try/catch with a multi-value handler signature by @avrabe in #316

    New Contributors

    Full Changelog: 0.26.2...0.26.3

    Open source →
  4. 0.26.2 20 May 2026
    Release notes

    What's Changed

    Full Changelog: 0.26.1...0.26.2

    Open source →
  5. 0.26.1 30 Mar 2026
    Release notes

    What's Changed

    Full Changelog: 0.26.0...0.26.1

    Open source →
  6. 0.26.0 25 Mar 2026
    Release notes

    What's Changed

    Full Changelog: 0.25.2...0.26.0

    Open source →
  7. 0.25.2 27 Feb 2026
    Release notes

    Fix imported memory serialization to preserve flags (#303)

    Open source →
  8. 0.25.1 13 Feb 2026
    Release notes

    What's Changed

    Full Changelog: 0.25.0...0.25.1

    Open source →
  9. 0.25.0 12 Feb 2026
    Release notes

    What's Changed

    New Contributors

    Full Changelog: 0.24.4...0.25.0

    Open source →
  10. 0.24.5 30 Jan 2026

    Nothing published for this version

  11. 0.24.4 04 Nov 2025
    Release notes

    What's Changed

    Full Changelog: 0.24.3...0.24.4

    Open source →
  12. 0.24.3 31 Oct 2025

    Nothing published for this version

  13. 0.24.2 24 Oct 2025

    Nothing published for this version

  14. 0.24.1 22 Oct 2025

    Nothing published for this version

  15. 0.24.0 22 Oct 2025

    Nothing published for this version

  16. 0.23.3 11 Dec 2024

    Nothing published for this version

  17. 0.23.2 03 Dec 2024

    Nothing published for this version

  18. 0.23.1 26 Nov 2024

    Nothing published for this version

  19. 0.23.0 18 Nov 2024

    Nothing published for this version

  20. 0.22.0 25 Sep 2024

    Nothing published for this version

  21. 0.21.3 25 Sep 2024

    Nothing published for this version

  22. 0.21.2 10 Sep 2024

    Nothing published for this version

  23. 0.21.1 09 Jul 2024

    Nothing published for this version

  24. 0.21.0 02 Jul 2024

    Nothing published for this version

  25. 0.20.3 27 Nov 2023

    Nothing published for this version

  26. 0.20.2 10 Nov 2023

    Nothing published for this version

  27. 0.20.1 16 Jun 2023

    Nothing published for this version

  28. 0.20.0 15 Jun 2023

    Nothing published for this version

  29. 0.19.0 15 Apr 2021

    Nothing published for this version

  30. 0.18.0 14 Jul 2020

    Nothing published for this version

  31. 0.17.0 18 May 2020

    Nothing published for this version

  32. 0.16.1 06 May 2020

    Nothing published for this version

  33. 0.16.0 05 May 2020

    Nothing published for this version

  34. 0.15.0 03 Feb 2020
    Release notes

    Released 2020-02-03.

    Added

    • Added support for typed select instructions.

    Open source →
  35. 0.14.0 02 Dec 2019
    Release notes

    Open source →
  36. 0.13.0 24 Oct 2019
    Release notes

    Open source →
  37. 0.12.0 10 Sep 2019
    Release notes

    Released 2019-09-10.

    Added

    • Added support for multi-value Wasm!

    • Added ModuleExports::get_exported_{func, table, memory, global} helper functions to get an export by the id of the thing that it is exporting (if any).

    • Added fuzz testing with libFuzzer and cargo fuzz.

    Changed

    • No longer using the "derive" feature from failure, which should result in slimmer dependency graphs and faster builds.

    • Module::emit_wasm is no longer fallible. It never actually did ever return an Err and now the type signature reflects that.


    Open source →
  38. 0.11.0 13 Aug 2019
    Release notes

    Released 2019-08-13.

    Added

    • walrus::Module::write_graphviz_dot: You can now render a whole Wasm module as a GraphViz Dot file (previously you could only do one function at a time) and it will also show the relationships between all the various Wasm structures (previously it only showed the relationships between instructions).

    Changed

    • The intermediate representation for instructions (walrus::ir::*) has been overhauled. Expr has been renamed to Instr, and an operator no longer points to its operands as nested children in the AST. Instead of representing every instruction as a node in an AST, now there is a tree of instruction sequences. An instruction sequence is a vector of Instrs that relate to each other implicitly via their effect on the stack. A nested block ... end, loop ... end, or if ... else ... end form new nested instruction sequences.

    • The Visitor and VisitorMut traits and traversing the IR has also been overhauled:

      • Visitors are no longer recursive, and should never recursively call self.visit_foo() from inside self.visit_bar(). Not in the default provided trait methods and not in any user-written overrides of those trait methods.

      • There are now traversal functions which take a visitor, a LocalFunction, and a start InstrSeqId, and then perform some kind of traversal over the function's IR from the given start sequence. These traversal functions are not recursive, and are implemented with explicit work lists and while loops. This avoids blowing the stack on deeply nested Wasm inputs. Although we can still OOM, we leave fixing that to future PRs. Right now there are only two traversals, because that is all we've needed so far: an in-order DFS for immutable visitors (needs to be in-order so we can encode instructions in the right order) and a pre-order DFS for mutable visitors (pre-order is the easiest traversal to implement iteratively). We can add more traversals as we need them.

    Removed

    • The Dot trait has been made internal. Use the new walrus::Module::write_graphviz_dot method instead.

    • The Visit trait is no longer exported in the public API, and has been made internal. Use the new traversal functions instead (walrus::ir::dfs_in_order and walrus::ir::dfs_pre_order_mut).


    Open source →
  39. 0.10.0 30 Jul 2019
    Release notes

    Open source →
  40. 0.9.0 29 Jul 2019
    Release notes

    Open source →
  41. 0.8.0 05 Jun 2019
    Release notes

    Released 2019-06-05.

    Added

    • Added ModuleExports::iter_mut for iterating over exclusive references to a module's exports.

    • Added a ModuleConfig::on_parse hook, which has access to a map from indices in the original Wasm binary to the newly assigned walrus IDs. This is a good time to parse custom sections that reference functions or types or whatever by index.

    • The TableKind enum now has various unwrap_* helpers to get a particular variant's inner data or else panic.

    • Added ModuleFunctions::by_name to get a function ID by function name.

    Changed

    • The CustomSection::data trait method now has a new parameter: a map from walrus IDs to their indices in the new wasm binary we are emitting. This is useful for custom sections that reference functions or types or whatever by index.

    Open source →
  42. 0.7.0 17 May 2019
    Release notes

    Released 2019-05-17.

    Added

    • Added the walrus::ModuleCustomSections API for working with arbitrary custom sections, including and especially custom sections that walrus itself has no special knowledge of. This is exposed as the customs field of a walrus::Module.

    • Added the Module::with_config constructor method to create a default, empty module that uses the given configuration.

    Removed

    • The walrus::Module::custom vector of raw custom modules has been removed and is superceded by the new walrus::ModuleCustomSections API. If you were using this and the old CustomSection type, switch to use the RawCustomSection type with ModuleCustomSections.

    Open source →
  43. 0.6.1 13 May 2019

    Nothing published for this version

  44. 0.6.0 02 May 2019
    Release notes

    Released 2019-05-02.

    Added

    • ModuleConfig::parse_file and Module::parse_file_with_config helper functions to easily parse a Wasm file from disk with a given configuration.

    Changed

    • ModuleConfig::parse takes &self instead of &mut self now. This was just an oversight / copy-past error before.

    Open source →
  45. 0.5.0 06 Mar 2019
    Release notes

    Open source →
  46. 0.4.0 19 Feb 2019
    Release notes

    Open source →
  47. 0.3.0 19 Feb 2019
    Release notes

    Released 2019-02-19.

    Added

    • Added support for the reference types wasm proposal. #50
    • Can finish a FunctionBuilder with the relevant &mut parts of a module, rather than a whole &mut Module. This is useful when some parts of the module are mutably borrowed elsewhere. #56
    • Can get a FunctionBuilder from an existing LocalFunction so you can build new expressions for the function. #54
    • Added the ability to delete functions, imports, exports, etc. Usually it is easier to just let the builtin GCing emit only the necessary bits of the wasm binary, but manually deleting will remove the item from iterators over the module's parts. If you delete a thing, you are responsible for ensuring that nothing else is referencing it (eg there are no remaining calls to a function that you are deleting, etc). #58
    • Added an id getter for Imports. #59
    • Added a mutable iterator for tables in a module. #59
    • Added a convenience function for getting the main function table for a module. #57

    Changed

    • The WithSideEffects expression variant can have arbitrary stack-neutral side effects before its value now, in addition to after its value. #55

    Open source →
  48. 0.2.1 14 Feb 2019
    Release notes

    Released 2019-02-14.

    Added

    • Added configuration options for controlling emission of the producers section

    Open source →
  49. 0.2.0 14 Feb 2019
    Release notes

    Released 2019-02-14.

    Added

    • Added configuration options for controlling emission of the DWARF and name custom sections.

    Changed

    • Changed the synthetic naming option from "generate_names" to "generate_synthetic_names_for_anonymous_items" to more accurately reflect what it does.

    Open source →
  50. 0.1.0 12 Feb 2019
    Release notes

    Released 2019-02-12.

    Added

    • Initial release!
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive