Skip to the content.

πŸ§ͺ WebAssembly Showcase

A static site built entirely in GitHub-Flavored Markdown β€” no HTML hand-coding, no JavaScript build step. Served by GitHub Pages.

WebAssembly logo


πŸ“– About

This page is a small portfolio of WebAssembly (WASM) applications running in the browser. WASM is a binary instruction format that lets code written in C, C++, Rust, Go, and other languages run on the web at near-native speed.

This page itself is written in index.md and rendered by Jekyll on GitHub Pages.

🎯 Goals


Application Language Demo Notes
v86 C / JS Try it x86 PC emulator running Linux in your browser
Qt for WASM C++ Slate Full Qt apps compiled to WASM
Photon Rust Demo High-performance image processing
SQLite WASM C Fiddle SQLite running in the browser
FFmpeg.wasm C Playground Transcode video client-side

A more comprehensive list lives in Awesome WebAssembly Applications.


πŸ’‘ Why WebAssembly?

WebAssembly is the portable compilation target for the web β€” a sandboxed VM that runs anywhere a modern browser does.

Three properties that matter:

  1. Speed β€” near-native performance for compute-heavy work
  2. Portability β€” same .wasm binary runs on every platform
  3. Security β€” sandboxed by design, with explicit imports/exports

Languages that compile to WASM


πŸ› οΈ How This Site Was Built

Repository structure

.
β”œβ”€β”€ index.md          # this page
β”œβ”€β”€ diary.md          # learning diary
β”œβ”€β”€ _config.yml       # Jekyll config
└── README.md         # repo readme

Minimal Jekyll config

title: WASM Showcase
description: Static site exploring WebAssembly
theme: jekyll-theme-cayman
markdown: kramdown

A taste of code-block syntax highlighting

// A trivial Rust function compiled to WASM
#[no_mangle]
pub extern "C" fn add(a: i32, b: i32) -> i32 {
    a + b
}
// Loading the resulting wasm module
const { instance } = await WebAssembly.instantiateStreaming(
    fetch("add.wasm")
);
console.log(instance.exports.add(2, 3)); // β†’ 5

πŸ“Š Performance perspective

A rough comparison of a CPU-bound task (matrix multiplication, ~1000Γ—1000):

Runtime Relative time Notes
Native C 1.0Γ— baseline
WASM ~1.2Γ— very close to native
JavaScript (V8) ~2–3Γ— depends heavily on JIT
Python ~50Γ— interpreted

[!NOTE] Numbers are illustrative β€” real benchmarks depend heavily on the workload, browser, and compiler flags.

[!TIP] For image/audio/video processing in the browser, WASM is almost always worth it.

[!WARNING] WASM startup has a one-time compilation cost. For tiny operations, plain JavaScript is often faster overall.


🧩 Diagram β€” how WASM fits in the browser

flowchart LR
    A[Source: C / Rust / Go] -->|compile| B[.wasm binary]
    B --> C[Browser fetches .wasm]
    C --> D[WebAssembly VM]
    D <--> E[JavaScript glue]
    E <--> F[DOM / Web APIs]

βœ… Task list


πŸ“š Further reading

Click to expand the reading list - [WebAssembly.org β€” official site](https://webassembly.org/) - [MDN: WebAssembly](https://developer.mozilla.org/en-US/docs/WebAssembly) - [Rust and WebAssembly Book](https://rustwasm.github.io/docs/book/) - [Emscripten Documentation](https://emscripten.org/docs/index.html) - [Bytecode Alliance](https://bytecodealliance.org/) - [WASI β€” WebAssembly System Interface](https://wasi.dev/)

πŸ“ Footnotes & inline formatting samples

You can write bold, italic, strikethrough, inline code, links, and even a footnote1.

A blockquote with attribution:

β€œThe web is the largest ungoverned space humans have ever built.” β€” paraphrased, from a talk on WebAssembly


πŸ““ Learning Diary

The full learning diary, including screenshots and reflections, lives here: πŸ‘‰ Read the learning diary β†’


Built with ❀️ and Markdown · Hosted on GitHub Pages

  1. Footnotes render correctly on GitHub Pages with the default kramdown processor.Β