Eric Simons and the StackBlitz team recently announced WebContainers which let you run Node.js natively in your browser! This has BIG implications and leaves us with many BIG questions like: how did they do it, why did they do it, and where does it go from here? Tune in! Keyword: BIG
The benefits of such a setup are numerous, especially for small sites and side projects:
Hosting a static website is much easier than a “real” server - there’s many free and reliable options (like GitHub, GitLab Pages, Netlify, etc), and it scales to basically infinity without any effort.
The how is also super interesting:
So how do you use a database on a static file hoster? Firstly, SQLite (written in C) is compiled to WebAssembly. SQLite can be compiled with emscripten without any modifications, and the sql.js library is a thin JS wrapper around the wasm code.
There’s more to the story, and the resulting solution is also open source.
<input>on your web page, download the index you’ve specified, and display the best search results immediately to your user, as they type. The precomputed index and WebAssembly frontend module make the entire Stork engine very good, and very fast.
Get started with WebAssembly through this simple hands-on tutorial that assumes only general knowledge in web development. The only tools you’ll need to get a taste of Wasm through runnable code examples are a code editor, any modern browser, and a Docker container with toolchains for C and Rust that comes with the article.
I built a new go Playground that uses Web Assembly to run Go code right in the browser. One of the cool things about this is is that it made it way easier to build a secure server execution environment because the server doesn’t execute anything, it just compiles.
A Rust/WASM port of the Python code from the article “Writing a full-text search engine using Bloom filters”. This can be seen as an alternative to lunr.js and elasticlunr.
The idea is to generate a small, self-contained WASM module from a list of articles on your website and ship it to browsers. tinysearch can be integrated into the build process of generators like Jekyll, Hugo, zola, or Cobalt.
Kick the tires on the author’s blog.
Firefox is mostly written in C and C++. These languages are notoriously difficult to use safely, since any mistake can lead to complete compromise of the program.
The team has thus far had 2 strategies for securing the codebase, breaking code into multiple sandboxed processes with reduced privileges and rewriting code in a safe language like Rust.
today, we’re adding a third approach to our arsenal. RLBox, a new sandboxing technology developed by researchers at the University of California, San Diego, the University of Texas, Austin, and Stanford University, allows us to quickly and efficiently convert existing Firefox components to run inside a WebAssembly sandbox.
This strikes me as a bonkers idea and kinda brilliant.
The core implementation idea behind wasm sandboxing is that you can compile C/C++ into wasm code, and then you can compile that wasm code into native code for the machine your program actually runs on.
Click through to read more about how they’re pulling this off.
When’s the last time you read the ECMAScript spec? Marja Hölttä on the V8 dev blog:
Also check out How to read the ECMAScript specification which covers most of the material from this post, but from a different angle.
The Lumen Project is an alternative implementation of the Erlang VM, more known as the BEAM. It is designed to work in WebAssembly with the specific goal of bringing Elixir and Erlang to the browser with minimal overhead, tightly compiled rather than porting a full VM. Can it replace JS for some developers?
Results are in for the 2019 State of JS survey. I’ve been digging through charts to see what I can see. Here are 7 insights that jumped off the page to me.
Mozilla, Fastly, Intel, and Red Hat are forming a “Bytecode Alliance”, which is described as:
a new industry partnership coming together to forge WebAssembly’s outside-the-browser future by collaborating on implementing standards and proposing new ones.
We have a vision of a WebAssembly ecosystem that is secure by default, fixing cracks in today’s software foundations. And based on advances rapidly emerging in the WebAssembly community, we believe we can make this vision real.
Security seems to be at the dead center of this alliance. Click through for an in-depth rundown of why this is a problem and what they plan to do about it. Also, some awesome code cartoons from Lin Clark (I assume).
Jerod is joined by Chris and Desmond (co-hosts of the ElixirTalk podcast) to catch up on what’s moving and shaking in the Elixir and Phoenix communities. We discuss what’s attractive about Elixir, what it means to have the language finalized, why folks are so excited by Phoenix LiveView, the ambitious new Lumen project that’s bringing Elixir to WebAssembly, and more.
A look at a new proposal for WebAssembly that will make it possible to easily communicate between WASM and pretty much any language/runtime. This will allow seamlessly embed code from one language into another… think “native modules” except you no longer have to re-compile them on the user’s machine, not to mention you can use them “for free” on the web, and you get sandboxing built in! Wow!
Mat Ryer, Mark Bates, Johnny Boursiquot, and Aaron Schlesinger discuss web development in Go. Go is great at writing server technology, but how good is it for web development? We’ll talk about HTTP, templating, the front-end, Wasm, and we even discuss Buffalo with its creator, Mark Bates.
KBall catches up with Florian Rival about bring a C++ based game engine to the web by compiling to WebAssembly and creating a React-based frontend.
Love that they shared the actual customer-facing results too. As authors Pranav Jha and Senthil Padmanabhan say:
Technology evolves at a very rapid pace. Every day we hear new things getting launched. But only a few make a difference to customers, and WebAssembly is one of them.
WebAssembly is a powerful tool for bringing command line utilities to the web and giving people the chance to tinker with tools.
Yet another excellent use case for Wasm.
We’re talking with Syrus Akbary about WebAssembly and Wasmer — a standalone just in time WebAssembly runtime aiming to be fully compatible with Emscripten, Rust, and Go. We talked about taking WebAssembly beyond the browser, universal binaries, what’s an ABI?, running WebAssembly from any language, and what a world might look like with platform independent universal binaries powered by WebAssembly.
A city building game that uses microscopic models to vividly simulate the organism of a city arising from the interactions of millions of individuals.
Runs in the browser via WebAssembly.
A cool/fun intro to Wasm where you build a game for cats (catch the red laser dot) completely in Go.
Wasmer is a standalone JIT WebAssembly runtime with an aim to be fully compatible with Emscripten, Rust, and Go. Check the roadmap and tune in to a future episode of The Changelog with Syrus Akbary, the creator of Wasmer.
curl https://get.wasmer.io -sSfL | sh
wasmer run nginx.wasm
Running Nginx on localhost:8080 Press Ctrl-C to stop...