Wanix — Wasm-native Unix sandboxing for the web

Lobsters Hottest Tools

Summary

Wanix is a Wasm-native Unix sandboxing tool that lets you run and interact with real Wasm and x86 programs entirely in the browser using Web Components, inspired by Plan 9.

<p><a href="https://lobste.rs/s/urhpbn/wanix_wasm_native_unix_sandboxing_for_web">Comments</a></p>
Original Article
View Cached Full Text

Cached at: 07/24/26, 04:59 AM

# Wanix — Wasm-native Unix sandboxing for the web Source: [https://wanix.dev/](https://wanix.dev/) [newWanix 0\.4 — wanix elements](https://github.com/tractordev/wanix/releases)Run and interact with real Wasm and x86 programs entirely sandboxed in the browser\. No server\. Inspired by[Plan 9](https://en.wikipedia.org/wiki/Plan_9_from_Bell_Labs)\. ``` <wanix-term> <wanix-bind dst="rc.wasm" type="file" src="https://wanix.dev/extras/0.4.0-rc2/rc.wasm"> </wanix-bind> <wanix-task cmd="rc.wasm" term start></wanix-task> </wanix-term> ``` ``` rc% ls rc.wasm rc% ``` Three tags and our Plan 9 inspired shell rc gets us a tiny embedded, Wasm\-native Unix\-like environment\. </\> wanix recipes ## Basic starting points using Wanix Elements Allocates a new`\#ramfs`to the namespace root, binds in the rc shell and an inline file, then runs the shell task with a terminal\. Try running: - `ls` - `cat shell\.txt` </\> wanix elements ## Just a few tags bootstrap a Unix for the web ### Core — the building blocks orthogonal primitives `<wanix\-task\>`runs an executable in a namespace[docs](https://github.com/tractordev/wanix#wanix-task)Bind a Wasm binary into the namespace, then start it\.`cmd`is the command line;`start`runs it headless as soon as the system is ready\. Inline a JS file and run it as a task\. Wanix supports task drivers for pluggable execution with built\-in drivers for JS and Wasm\. `<wanix\-term\>`an xterm\.js terminal for a task or vm[docs](https://github.com/tractordev/wanix#wanix-term)Typically tasks are started with a terminal allocation that`<wanix\-term\>`automatically wires up to\. Its common to use`<wanix\-term\>`as the top\-level element for a task\. Visual elements like`<wanix\-term\>`can be used outside a namespace for styling flexibility, they just need explicit`for`and`path`attributes to wire up to Wanix terminal\. `<wanix\-vm\>`runs a virtual machine in a namespace, powered by v86[docs](https://github.com/tractordev/wanix#wanix-vm)Boot a headless Linux VM by binding in the v86 emulator assets and the Linux system image\. It will detect the Linux kernel and boot to a shell\. This is more typical where you would allocate and attach a terminal, though for VM consoles the terminal needs to be in`raw`mode\. If the image supports,`export="ttyS0"`can be used to export the internal namespace at`\#vm/1/guest`\. `<wanix\-namespace\>`an explicit namespace container[docs](https://github.com/tractordev/wanix#wanix-system)Use`<wanix\-namespace\>`to explicitly create a namespace\. Using any other tag as the top\-level element will implicitly create a namespace\. Give the namespace an`id`and`allow\-origins`so other pages can import this namespace using an import bind\. `<wanix\-bind\>`bind mount files, archives, and other namespaces into the namespace[docs](https://github.com/tractordev/wanix#wanix-bind)Bind can link names, allocate devices, or using`type="file"`it can fetch or inline files\. Bind is a versatile primitive for building namespaces\. Using`type="archive"`you can unpack a`\.tar`/`\.tgz`into a directory tree\. Layer multiple archives or directory binds to the same`dst`to create a recursive union\. Using`type="import"`you can import a remote namespace using 9P over WebSocket or as an embedded iframe\. ### Extended — larger components require additional assets `<wanix\-workbench\>`embedded VS Code workbench as editor, file explorer, full IDE, or app shell[docs](https://github.com/tractordev/wanix#wanix-workbench)Embed a VS Code workbench backed by the Wanix namespace\. The`assets`attribute is required\. A task with`role="shell"`needs to be given to enable a terminal\. Using attributes like`open`and`sidebar`you can control the initial state of the workbench\. Here we simplify IDE to effectively be a single\-file editor\. In the futre, you'll be able to add custom extensions and views to workbench and even live edit them within the workbench itself\. </\> script tag ## Add Wanix to any page You can grab the assets from the[latest release](https://github.com/tractordev/wanix/releases)or just use the CDN: ``` <script type="module" src="https://cdn.jsdelivr.net/npm/[email protected]/dist/wanix.min.js"></script> ``` the ideas behind wanix [https://www.youtube.com/watch?v=kGBeT8lwbo0](https://www.youtube.com/watch?v=kGBeT8lwbo0)19 min the full story ## The spirit of Plan 9, in Wasm Per\-process namespaces, everything\-is\-a\-file, and why a research OS from the 90s turns out to be the right model for the local\-first web\. [▷ watch the talk](https://www.youtube.com/watch?v=kGBeT8lwbo0)

Similar Articles

Wterm – Terminal Emulator for the Web

Hacker News Top

Wterm is a terminal emulator for the web, built in Zig and compiled to WASM for near-native performance, with native text selection, copy/paste, find, and accessibility.

Running Python code in a sandbox with MicroPython and WASM

Simon Willison's Blog

Simon Willison introduces micropython-wasm, an alpha package that runs Python code in a sandbox using MicroPython compiled to WebAssembly, enabling safe plugin execution within Python applications like Datasette.

weblings: Compiling Rust to WASM from inside WASM

Lobsters Hottest

Weblings is a Rust compiler toolchain compiled to WebAssembly, enabling compilation and execution of Rust code directly in the browser via a web UI with a playground and Rustlings exercises.