The WebAssembly ecosystem has accumulated a solid set of command-line tools that don’t get surfaced well in most introductory material. Tutorials tend to focus on one language path — Rust via wasm-pack, or Go, or Emscripten — and leave the broader toolchain unexplained. This is a reference for the tools I reach for regularly: inspection, compilation, optimisation, and runtimes.
The Text Format — WAT
Before the tools: WASM has two representations. The binary format (.wasm) is what the runtime executes. The text format (.wat) is human-readable S-expression syntax — the assembly language of WebAssembly. Understanding WAT is useful for debugging and for writing minimal WASM by hand.
One of the things that drew me to Nim is the degree of control it offers over memory management without forcing you to the extreme of a borrow checker. The default experience is a garbage-collected language that feels like Python. The far end of the dial is manual memory management that compiles to idiomatic C with no runtime overhead. Between those two points is a set of options worth understanding in detail — because the right choice depends heavily on what you’re building.
There is a measurable cost to serving static images. Not a performance cost — that’s a different conversation, one I covered in an earlier post on Cloudinary as a DAM. This is an engagement cost: the gap between what a user feels when they interact with a product image and what they feel when they look at one.
A 2017 paper in Computers in Human Behavior quantified this gap directly. Blazquez Cano et al. ran a controlled experiment with 218 participants browsing fashion clothing on an iPad — split across three conditions: static images, 360° visual rotation, and tactile simulation (a scrunch gesture that deformed the fabric texture on screen). The engagement scores across dimensions like novelty, felt involvement, and endurability were significantly higher in both interactive conditions than in the control group. The static image condition scored 1.34 out of 7 for novelty — participants essentially disagreed that they felt any curiosity or interest. The interactive conditions scored 4.63 and 4.95 on the same measure. The paper is readable in full here.
Colour blindness affects roughly 8% of men and 0.5% of women with Northern European ancestry. For a data visualisation that uses colour as the primary encoding — a choropleth, a multi-series line chart, a heatmap — that’s a meaningful share of the audience for whom the visual may be conveying the wrong information, or none at all.
The right time to test this is during design, not after a complaint. ImageMagick’s -color-matrix flag lets you simulate the major forms of colour vision deficiency directly on any image — screenshots, design exports, chart renders — from the command line. This makes it scriptable, batchable, and easy to drop into a CI pipeline alongside screenshot tests.
Running a MySQL cluster in production eventually teaches you that MySQL’s built-in tooling is optimised for the happy path. Replication works, until it doesn’t. Schema changes are fast, until the table has 80 million rows. SHOW SLAVE STATUS reports lag, but the number isn’t always telling you the truth.
Percona Toolkit is a collection of command-line tools that covers exactly these gaps — the operational situations where the native toolset leaves you guessing. I’ve been running MySQL replication clusters for long enough to have a working set of tools I reach for reflexively. These are the ones that have earned a permanent place in that set.