<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/wasmi-2-0---engineering-of-the-fastest-wasm-interpreters-m7ygtqqww" -->

---
title: Wasmi 2.0 - Engineering of the Fastest Wasm Interpreters
description: Wasmi 2.0 ships after eight months of engine overhaul work, running roughly 2.2x faster than Wasmi 1.0 and matching or beating Wasm3 and Stitch on execution...
canonical: https://daily.dev/posts/wasmi-2-0---engineering-of-the-fastest-wasm-interpreters-m7ygtqqww
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Wasmi 2.0 - Engineering of the Fastest Wasm Interpreters | daily.dev
og:description: Wasmi 2.0 ships after eight months of engine overhaul work, running roughly 2.2x faster than Wasmi 1.0 and matching or beating Wasm3 and Stitch on execution...
og:url: https://daily.dev/posts/wasmi-2-0---engineering-of-the-fastest-wasm-interpreters-m7ygtqqww
og:image: https://api.daily.dev/og/posts/M7YGtQqww.png
og:image:alt: Wasmi 2.0 - Engineering of the Fastest Wasm Interpreters
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Wasmi 2.0 - Engineering of the Fastest Wasm Interpreters

**[Lobsters](https://daily.dev/sources/lobsters)** · 26 min read · 4 upvotes · 0 comments

## Summary

Wasmi 2.0 ships after eight months of engine overhaul work, running roughly 2.2x faster than Wasmi 1.0 and matching or beating Wasm3 and Stitch on execution benchmarks across Apple M2 Pro, AMD EPYC, and Intel Xeon hardware. The release introduces four instruction dispatch modes (direct-threaded, indirect-threaded, switch-loop, call-loop), new accumulator registers replacing stack-slot operand passing, a redesigned lock-free CodeMap for fast Wasm-to-Wasm calls, fixed 64-bit stack cells that remove SIMD overhead, plus a validate crate feature, stable fuel metering, deterministic profile support, and an improved CLI. A major finding: a Rust 1.92 MIR optimization called DestinationPropagation silently regressed branch handler performance by collapsing dispatch paths, and reverting its effect gave Wasmi 2.0 a ~50% CoreMark improvement. The next major version, Wasmi 3.0, targets full WebAssembly 3.0 support including function-references, exception-handling, and garbage collection.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://wasmi-labs.github.io/blog/posts/wasmi-v2.0>

## Questions this post answers

### What caused a 30% CoreMark regression in Stitch and Wasmi between Rust 1.91 and Rust 1.92?

Rust 1.92 enabled the DestinationPropagation MIR optimization by default, which merges MIR locals holding the same value. This collapsed the two dispatch paths of a conditional branch handler into a single csel-based branch site, giving CPU branch predictors mixed history to track and hurting prediction accuracy. Fixing it raised Wasmi 2.0's CoreMark score from about 2800 to over 4200, roughly a 50% improvement.

_developers chasing mysterious regressions across toolchain upgrades can track compiler-behavior changes like this on daily.dev._

### How much faster is Wasmi 2.0 than Wasmi 1.0?

Wasmi 2.0 runs about 2.2 times faster than Wasmi 1.0 in geometric mean across the wasmi-benchmarks suite measured on an Apple M2 Pro. The gains come from a redesigned engine using accumulator registers instead of stack slots, a lock-free CodeMap for calls, fixed 64-bit stack cells, and new instruction dispatch modes including direct-threaded and indirect-threaded code.

_anyone evaluating Wasm interpreter upgrades can weigh performance numbers like these on daily.dev before committing._

### What instruction dispatch modes does Wasmi 2.0 support and which one is fastest?

Wasmi 2.0 supports four modes: direct-threaded code, indirect-threaded code, switch-loop, and call-loop. Direct-threaded code is fastest, embedding function pointers directly into the IR with tail calls; indirect-threaded code is roughly 10-15% slower but uses less memory; switch-loop is the naive fallback for platforms without tail calls; call-loop exists only as a configuration byproduct and is not recommended.

_teams tuning interpreter performance can compare dispatch strategies like these on daily.dev before choosing a runtime._

---

Tags: [#performance](https://daily.dev/tags/performance), [#rust](https://daily.dev/tags/rust), [#webassembly](https://daily.dev/tags/webassembly)

[View this post on daily.dev](https://daily.dev/posts/wasmi-2-0---engineering-of-the-fastest-wasm-interpreters-m7ygtqqww)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Wasmi 2.0 - Engineering of the Fastest Wasm Interpreters","url":"https://daily.dev/posts/wasmi-2-0---engineering-of-the-fastest-wasm-interpreters-m7ygtqqww","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/wasmi-2-0---engineering-of-the-fastest-wasm-interpreters-m7ygtqqww"},"datePublished":"2026-09-02T04:33:00.869Z","dateModified":"2026-09-13T21:25:18.310Z","description":"Wasmi 2.0 ships after eight months of engine overhaul work, running roughly 2.2x faster than Wasmi 1.0 and matching or beating Wasm3 and Stitch on execution...","image":"https://media.daily.dev/image/upload/s--P4t4XyoV--/f_auto/v1722860399/public/Placeholder%2001","thumbnailUrl":"https://media.daily.dev/image/upload/s--P4t4XyoV--/f_auto/v1722860399/public/Placeholder%2001","isAccessibleForFree":true,"articleSection":"Lobsters","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Lobsters","logo":"https://media.daily.dev/image/upload/s--tl8v_Fku--/f_auto,t_logo/v1698841318/logos/lobste.jpg","url":"https://daily.dev/sources/lobsters"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/wasmi-2-0---engineering-of-the-fastest-wasm-interpreters-m7ygtqqww","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":4},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"performance,rust,webassembly","timeRequired":"PT26M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Lobsters","item":"https://daily.dev/sources/lobsters"},{"@type":"ListItem","position":3,"name":"Wasmi 2.0 - Engineering of the Fastest Wasm Interpreters"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/wasmi-2-0---engineering-of-the-fastest-wasm-interpreters-m7ygtqqww#faq","mainEntity":[{"@type":"Question","name":"What caused a 30% CoreMark regression in Stitch and Wasmi between Rust 1.91 and Rust 1.92?","acceptedAnswer":{"@type":"Answer","text":"Rust 1.92 enabled the DestinationPropagation MIR optimization by default, which merges MIR locals holding the same value. This collapsed the two dispatch paths of a conditional branch handler into a single csel-based branch site, giving CPU branch predictors mixed history to track and hurting prediction accuracy. Fixing it raised Wasmi 2.0's CoreMark score from about 2800 to over 4200, roughly a 50% improvement. developers chasing mysterious regressions across toolchain upgrades can track compiler-behavior changes like this on daily.dev."}},{"@type":"Question","name":"How much faster is Wasmi 2.0 than Wasmi 1.0?","acceptedAnswer":{"@type":"Answer","text":"Wasmi 2.0 runs about 2.2 times faster than Wasmi 1.0 in geometric mean across the wasmi-benchmarks suite measured on an Apple M2 Pro. The gains come from a redesigned engine using accumulator registers instead of stack slots, a lock-free CodeMap for calls, fixed 64-bit stack cells, and new instruction dispatch modes including direct-threaded and indirect-threaded code. anyone evaluating Wasm interpreter upgrades can weigh performance numbers like these on daily.dev before committing."}},{"@type":"Question","name":"What instruction dispatch modes does Wasmi 2.0 support and which one is fastest?","acceptedAnswer":{"@type":"Answer","text":"Wasmi 2.0 supports four modes: direct-threaded code, indirect-threaded code, switch-loop, and call-loop. Direct-threaded code is fastest, embedding function pointers directly into the IR with tail calls; indirect-threaded code is roughly 10-15% slower but uses less memory; switch-loop is the naive fallback for platforms without tail calls; call-loop exists only as a configuration byproduct and is not recommended. teams tuning interpreter performance can compare dispatch strategies like these on daily.dev before choosing a runtime."}}]}
```

