As the title suggests, this is a browser-based shell where you can mount your local file system, allowing you to navigate the file system, inspect files and perform a whole host of other typical shell-based tasks. From a technology perspective, this is a Rust app, using WASI and the File System Access API
So just how does it all work?
This demo uses the WebAssembly System Interface (WASI), which provides a standard file system API for WebAssembly applications. These APIs have been coupled with the browser’s File System Access API giving the WebAssembly code access to the local file system. The shell itself is a Rust port of coreutils. You can learn a little more about the implementation via the author’s blog and via the code on GitHub.
This is a very powerful demonstration of what these technologies are now capable of.
There is a growing ecosystem of tooling for WebAssembly developers, and toolchain creators. However, there is always space for mre! This post, from the author of the shell discussed above, describes the creation of a new tool for parsing, transforming and serialising wasm binaries. A key differentiator with wasmbin is that it is self-generating, Rust macros are used to describe the binary structure and AST, with the parser / serialisers generated from these. The approach seems to work quite well 😊.
I must admit, when Swift first came out in 2014 I was smitten, not only because it was a welcome escape from Objective C 🤮 (sorry!), but more because it is a very modern and elegant language. It is a joy to use.
Swift support for WebAssembly is quite experimental, with the required compiler toolchain residing in an open pull on the main Swift language repository. This brief blog post also makes use of Tokamak, a SwiftUI (which is itself quite React-like) compatible framework for the web.
A simple, but well written, introduction to creating WebAssembly applications with Go.
You can now use an online file converter, which uses FFMPEG compiled to WebAssembly client-side.