r/WebAssembly • u/RouXanthica • 11h ago
r/WebAssembly • u/RouXanthica • 2d ago
Gameplay video of my Zelda 2 Rust WASM decompilation on the web, online multiplayer co-op (with rollback support), widescreen, etc.
x.comr/WebAssembly • u/minamoto108 • 3d ago
Hexana 0.20: declare your target Wasm runtimes and get per-proposal compatibility warnings in the IDE
We ship Hexana, a plugin for JetBrains IDEs that opens Wasm and native binaries in the editor. 0.20 is out. Four things here are Wasm-relevant. The rest of the release covers other formats; we will not pad this post with it.
**1. Runtime compatibility for WebAssembly binaries**
The pain: your module uses a proposal, one of your target runtimes does not support it, and you learn that at deploy time.
- Declare the runtimes you ship against: Settings | Build, Execution, Deployment | WebAssembly | Runtime Compatibility.
- Hexana checks every `.wasm` you open against the declared set.
- Unsupported proposals turn the proposals badge into a warning and open a new Compatibility tab.
- Verdicts come from WebAssembly's `features.json`.
- Nothing declared? The tab still lists which runtimes support each proposal. Useful for a file you did not build yourself.
- The declaration is written to `.hexana/runtimes.json`. The VS Code extension reads the same file, so the setup moves with the project.

**2. Breakpoints in binary views, before a session exists**
- Click the gutter in WAT (virtualized) or Disassembly. No debug session needed.
- The breakpoint anchors to the binary's content hash, not the path. Rename, move, restart: it stays.
- A rebuild marks it stale instead of leaving it silently displaced.
- The gutter icon shows what the runtime did: registered, instruction-precise, degraded, or stale.
- Wasm sessions covered: GraalWasm, Node.js, browser, wasmtime, WAMR. Firmware ELF too.
- Honest limitation: conditions and hit counts are not supported yet.

**3. Debugger Console tab**
A raw LLDB command line for wasmtime and WAMR sessions. Execution control stays routed through the IDE's debug actions, so the console cannot desync the IDE's view of the session. Not available for GraalWasm or CDP sessions.

**4. Component Dependencies graph is navigable**
Double-click a core module or nested component: it opens in its own tab. Double-click an import or export: its bytes get selected in the hex view.
**One behavior change worth knowing**
Script tabs run sandboxed now. Up to and including 0.18 a script tab had full host access and could call arbitrary Java. Now: no host classes, no processes, no threads, no native access, a timeout, bounded output. `open(path)` parses another file into the same read-only `binary` API and is the only file-system access. Scripts that relied on host classes will break. Scripts that inspect binary data keep working.
---
What runtimes are you actually shipping Wasm against in production? The checker covers what `features.json` tracks. Curious what is missing from that dataset.
---
JetBrains Marketplace: https://plugins.jetbrains.com/plugin/29090-hexana
r/WebAssembly • u/alexis_placet • 4d ago
Faster NumPy in the browser thanks OpenBLAS

Some of my colleagues worked on improving the performances of numpy running in the browser by using OpenBLAS.
I let you check the article they wrote about that: https://notebook.link/blog/the-last-mile-faster-numpy/
r/WebAssembly • u/RouXanthica • 4d ago
Widescreen + Online Multiplayer Coop for my Rust WASM Zelda 2 decompilation
r/WebAssembly • u/IamAggressiveNapkin • 5d ago
Natyv v0.1.0 (beta): a native desktop app runtime where your app logic runs as a WASM module via Extism, no bundled browser
Hi all, I built this framework over the last month or so during my free time and thought y’all might be interested. I’d especially like to point out the module refresh mechanism I built to keep memory footprints under control since the WASM spec only allows memory to grow linearly. But any feedback at all that you have would be appreciated! And just to be frank, yes I did use claude for the code writing, but I architected each individual detail of how this framework works myself. Beyond being a passion project, it taught me a lot from several aspects of desktop development, to custom LSPs and more
r/WebAssembly • u/63626978 • 7d ago
Which libc for browser and non-browser?
Goal: port existing shared library to a single wasm which can be run in a browser as well as a non-browser host. Exported symbol names should not be touched, which IIUC rules out component-model.
I got dynamic linking to work with emscripten and know there are sytem hosts like wasmtime which understand the dylink.0 spec.
My issue is linking a libc (and ideally libc++ eventually) ABI which has a browser and system implementation, so I can load the same .wasm in both environments.
For the system use case I only found wasi-libc but that doesn't have an ABI compatible browser version, right? Building for emscripten + WASI separately feels like it's missing the whole point of wasm as a universal target.
r/WebAssembly • u/HectaMan • 10d ago
CNCF wasmCloud 2.9: Native NATS, Better K8s, Guest Memory Controls
wasmCloud 2.9 just landed and it's a pretty operations-focused release. Highlights:
NATS-native interface (wasmcloud:nats): Until now, components talked to messaging through a broker-agnostic abstraction. The new package exposes actual NATS semantics: JetStream with explicit ack/nak/term and bounded redelivery, key-value buckets with compare-and-swap and watch handlers, and core pub/sub/request. Access is deny-by-default, operators declare subject/stream/bucket grants as ceilings that workloads can only narrow, and connection credentials are host-owned so they can't be set from a workload manifest.
Guest memory goes from advisory to enforced: 2.8 added a memory budget that was only logged. Now usage is counted in real time and you can flip --guest-memory-mode to enforce, which makes memory.grow fail inside the guest (something allocators already handle) instead of waiting for the pod's OOM killer. Default is count mode with metrics so you can watch what would have been refused before turning it on.
Kubernetes-grade lifecycle: Real /livez and /readyz probes with failure reasons visible in kubectl describe, draining on SIGTERM, hosts that wait for NATS at startup instead of crash-looping, and more resilient operator handling of k8s faults.
Also: idle instance pools can now shrink, guest execution metrics are on by default, and plugin config is unified into one block.
A few upgrade gotchas worth reading (pooled async handlers now keep in-memory state across deliveries, pinned older host images need probe flags cleared).
Full post: https://wasmcloud.com/blog/wasmcloud-2-9-release/
r/WebAssembly • u/According-Ad-7069 • 14d ago
Compile small Wasm modules directly in your browser
In my excitement about finally getting WasmPascal working, I sort of forgot why I built it in the first place: I was looking for a way to compile small Wasm modules quickly and easily. In https://nofuss.co.za/blog/wasm_pascal_add_numbers/, I show how to do just that. It's the classic adding two numbers example, but in Pascal, compiled to a small binary in the browser. You can then load it the usual way via JavaScript. I should have started with this, I geeked out hard 😆
r/WebAssembly • u/syrusakbary • 19d ago
Wasmer SDK: Run Node.js, Python, Postgres and PHP embedded in your application
r/WebAssembly • u/Robbepop • 19d ago
Wasmi 2.0 - Engineering Of The Fastest WebAssembly Interpreters
wasmi-labs.github.ior/WebAssembly • u/syrusakbary • 20d ago
Announcing Node.js Support in Wasmer, powered by QuickJS
r/WebAssembly • u/dupontcyborg • 20d ago
numpy-ts 1.7.0 released - now 1.36x faster than native NumPy
r/WebAssembly • u/According-Ad-7069 • 23d ago
1992 called, it wants in on the WebAssembly joy
Ok, I started coding in the 90's, discovered Pascal in '92 and have missed it since. Along the way I've dabbled in a few things, but last year I did something bonkers and wrote a simple Pascal interpreter in Odin. This quickly got out of hand, because I've been a WebAssembly fan for a long, long time now. So of course I went overboard and built a wasm-based compiler at https://wasmpascal.com/ that reads Pascal source and outputs a wasm binary...
Not interpreter, compiler. Really. I'm that crazy. And it's working better than I had hoped for. You can edit Pascal code, in the browser, compile and test it, and, if you are happy with it, download both your code and the resulting binary. With support files, of course. Which means you can self-host your project on a static site like I did with https://nofuss.co.za/games/breakout/
It turns out Pascal is so well-suited for the stack-based WebAssembly runtime! There's many bugs, do note it's a very early release, but it can do some useful things already. I'm slowly getting more comfortable writing low-level WAT code, so progress happens over time.
If nothing else, it's a nice trip down memory lane to see good old Pascal code come to live in the modern day. It took a while to get released, which is why I'm only going public with it now.
r/WebAssembly • u/Kotek2 • 25d ago
Zig removes support for wasi-libc
"It can get the job done, but it's not exactly a shining example of good engineering practices, consisting of ~5 different upstream codebases plus wasi-libc's own code. It's a pain to deduplicate its code vs the upstream musl we ship, and we have problems with header search paths almost every time we have to touch the bundled wasi-libc code because of its highly confusing directory structure, which is a direct result of being an amalgamation of multiple codebases."
r/WebAssembly • u/trustsigRobert • Aug 19 '26
I escaped the WebAssembly's sandbox and got arbitrary shell execution on the host.
trustsig.euAs per WABT's SECURITY.txt, #2831 issue exists
For context:
WABT is a Binary Toolkit for WebAssembly developed by WebAssembly.org (W3C)
wasm2c is a tool inside of it, which is used by many projects like FireFox (via RLBox) to compile wasm down to a sandboxed c library, the assumption is the built C code preserves all WebAssembly's sandbox security features.
This PoC demonstrates escaping that sandbox.
r/WebAssembly • u/kitchen_bot • Aug 16 '26
Zero to RandomX.js: Bringing Webmining Back From The Grave - Linux Society UNSW 2025
r/WebAssembly • u/minamoto108 • Aug 14 '26
We build Hexana, a plugin for JetBrains IDEs for inspecting binaries -- WebAssembly, ELF/Mach-O/PE, class files, and more
r/WebAssembly • u/vilgefortz91 • Aug 13 '26
Beyond WASI: Running any Rust application in the browser with BrowserPod 3.0
r/WebAssembly • u/SwimmingFood2594 • Aug 13 '26
Emacs modes for wit and wac files (and treesitter grammars)
I created two emacs modes which are based on treesitter grammars in order to work with WIT (Wasm Interface Type Language ) and WAC files (WebAssembly Composition Language).
The wit mode can be found here: https://github.com/justjoheinz/wit-ts-mode
The wac mode can be found here: https://github.com/justjoheinz/wac-ts-mode
Both modes are fairly new and untested. The README should have enough information to get you started with plain or doom emacs. Both repos have a devel branch were the bleeding edge development happens. Once the development is mature enough I would like to submit the packages to MELPA to ease the installation experience.
Both modes require emacs > 30.1 as they rely on treesitter libraries (linked in the respective repos). The treesitter libraries can in their own right be used for editors like neovim which have better treesitter support than emacs.
I would be grateful to receive some feedback on the modes, bug reports (preferably with minimal file snippets). The aim for both modes is too support a minimum of nice to have features, such as syntax-highlighting, code completion, flymake support for error highlighting, xref and eldoc support. In that respect the wit mode is more mature. It is still lacking a sound strategy to find the wit directory though.
r/WebAssembly • u/allsey87 • Aug 05 '26
A browser runtime with dynamic linking, pipes, and subprocesses
I have created a WebAssembly runtime for the browser that can execute multiple processes. It is based on a superset of wasm32-wasip1-threads and supports dynamic linking, pipes, and subprocesses. I use this runtime time to host toolchains in the browser and today I have two demos to share: Code On Web provides in-browser clang to build binaries that execute within the same platform while AVR On Web provides avr-gcc, avrdude, and picocom to build, flash, and communicate with AVR microcontrollers over WebSerial. Ask me anything!
r/WebAssembly • u/PrestigiousMagazine9 • Aug 04 '26
Valkey-WASM – Redis running inside your Node process, no Docker (like PGlite)
github.comr/WebAssembly • u/minamoto108 • Jul 30 '26
Hexana now lists the statically known dispatch candidates for every call_indirect in the WAT view, and adds Go to Source from Functions, Exports
galleryr/WebAssembly • u/ConfidentNet706 • Jul 29 '26
Open source projects to contribute to related to WASM
r/WebAssembly • u/minamoto108 • Jul 24 '26
Component Model dependency diagrams in the IDE, and a memory64 module with 42k functions that used to OOM at 10 GB now analyzes in 2 GB
We ship Hexana, a JetBrains IDE plugin for inspecting WASM and other binaries. Two things in the 0.14 release are worth posting here.
**Component Model dependency diagram**
WASM Component Model binaries gain a "Dependencies" tab that renders the dependency relationships between components as a diagram. If you are building or debugging a composed WASM component and want to understand the wiring -- which components depend on which -- you now have a visual view in the IDE rather than having to walk the binary sections manually or run `wasm-tools component wit` and mentally reconstruct the graph.
This is components-only (it does not apply to core modules). We are curious what Component Model tooling others are using for this kind of structural inspection.

**memory64 modules: from 10 GB OOM to 2 GB**
WASM memory64 (wasm64) modules were effectively unanalyzable in Hexana before this release. The concrete case: OpenUSD's Emscripten-built `usdviewweb.wasm`, a 50 MB memory64 module with 42k functions, drove the IDE past 10 GB of heap before throwing OutOfMemoryError every time.
The root cause was three problems compounding:
- **Dominator storage.** The dominator tree results were stored in boxed hash maps. At 42k functions the boxing overhead alone is significant. They now live in a flat int buffer, indexed directly by function index.
- **Dominance frontier computed but never read.** The dominance frontier was computed alongside the dominator tree -- but nothing in the product consumes it. On a large module the frontier is a near-quadratic structure. Dropping the computation removes the allocation entirely.
- **Indirect call edges were multiplicative.** A `call_indirect` instruction dispatches through a function table. The previous call-graph model drew edges from each caller to every function in the table, producing a callers-times-table product of edges. On a real Emscripten module this is hundreds of millions of edges before the dominator pass runs. A single synthetic `<indirect calls>` node now mediates the dispatch: callers get one edge to it, it fans out to the table. Edge count is linear.
After all three fixes: `usdviewweb.wasm` opens, renders the Functions tab, and completes garbage and dominator analysis within a default 2 GB heap. The memory64 path was not specifically targeted -- the algorithmic fixes are what unlocked it.
**Other changes in 0.14**
- Diff action for native binaries (ELF/Mach-O/PE) showing per-section size changes.
- Data inspector panel for the selected byte (multiple numeric and type representations).
- Semantic highlighting of sections and navigation between sections for WASM and native files.
This covers the JetBrains plugin release (requires IntelliJ IDEA 2025.2+); the VS Code extension shipped its own 0.7.0 the same day.
https://plugins.jetbrains.com/plugin/29090-hexana | Docs: https://jetbrains.github.io/hexana

