Features

+

Capability-oriented microkernel architecture ("everything is a file")

+

Abstract POSIX process model for generalized compute execution

+

Per-process namespaces for security, isolation, and custom environments

+

Built-in emulator for x86 support, Linux compatibility, and Docker-like functionality

+

Runs in the browser as well as natively on Mac, Windows, and Linux

+

Web: File interfaces for OPFS, DOM, web workers, and service workers

+

Web: Runs WASI WebAssembly and x86 executables

Quick Start

Try Now

Play with the stock Wanix distro at wanix.run

Install Toolchain

The Wanix CLI is available for download from the latest release .

Toolchain Usage

The wanix command has a number of subcommands in development, but the primary command is wanix serve .

Using the Wanix Environment

Add Files

You can easily add files to the Wanix environment by dragging files onto the terminal. This will put them in /web/opfs .

In Chrome, you can also use the pickerfs capability to mount a full directory in Wanix for the duration of your session. Run id=$(capctl new pickerfs mount) to bring up a directory picker. The resulting id can be used to get to the mount: cd /cap/$id/mount .

Run WASI

WASI Wasm executables can simply be run like running a normal executable once added to the environment. Tested languages that can compile to Wasm and run in Wanix include Golang, Rust, and Zig.

Load Page in Window

Files in the root namespace can be accessed via subpaths on the domain with the prefix /: , so accessing /web/opfs/file.html would work using /:/web/opfs/file.html . This works for any HTML elements or JS functions that take a URL, including fetch and iframes.

We use iframes as windows (by styling and JS), which can be created with:

id=$(domctl new iframe)
domctl body append-child $id

Then you can load a URL in the iframe by setting its src attribute:

echo src=/:/web/opfs/file.html >> /web/dom/$id/attrs

You can "close" a window by removing the iframe:

domctl $id remove

Run JS in a Web Worker

If you have a JavaScript source file you want to run in a Web Worker, you can use workerctl start , which returns a resource ID you can use under /web/worker .

You can terminate the worker with workerctl terminate .

Manipulate DOM

You can currently create DOM elements using domctl . Run domctl new to see available element types. For example, you can allocate a div element and get a resource ID for it with domctl new div . DOM resources are under /web/dom , including a named resource for the body .

You can also append CSS styles to the page by appending to /web/dom/style :

echo "html { border: 8px solid lightgreen; }" >> /web/dom/style

Stay in touch

Subscribe to our sponsor mailing list for updates and more.