October 28, 2025
Code zombie or comeback?
Wacl – A Tcl Distribution for WebAssembly
Tcl in your browser? Devs cheer—then spot an 8-year nap
TLDR: Wacl puts Tcl inside the browser using fast WebAssembly so apps can talk to JavaScript with classic tools. Devs are split between excitement—one wanted it for Go without C—and worry, since the project appears untouched for eight years, raising “neat idea vs. abandonware” stakes.
Old-school Tcl just crashed the modern web party: Wacl stuffs a Tcl interpreter right into your browser, talking to JavaScript and juggling timers, sockets, and DOM tricks via speedy WebAssembly. On paper it’s slick—smaller downloads than old asm.js, faster starts, built‑ins for XML/HTML/JSON, and even a bridge to call browser code from Tcl. There’s a catch: every extra feature fattens the download (one popular XML tool adds ~400KB), and you’ll need a recent browser to play. The crowd’s reaction? Pure split-screen drama. One excited dev basically did a victory lap—he’d been hunting for a way to use Tcl without dragging in C code inside a Go app. Cue heart‑eyes. Then a record scratch: another user points out the repo was last updated eight years ago. Cue facepalms and “is this vaporware?” vibes. Commenters joked like tech archaeologists dusting off a time capsule, with memes about “batteries not included” to save bandwidth and Weekend‑at‑Bernie’s for code. The mood swings from “hidden superpower” to “cool museum piece.” Bottom line: it’s a tantalizing glimpse of how WebAssembly can resurrect beloved tools—but without fresh commits, many won’t bet a project on it. Nostalgia meets maintenance reality, and the comments are where the sparks fly.
Key Points
- •Wacl embeds a full Tcl interpreter in web pages targeting WebAssembly and JavaScript, extending the Emtcl project.
- •Key features include an event loop, client sockets using WebSockets (binary protocol), proper Tcl_Init(), and JS interop via ::wacl::jscall and jswrap().
- •Wacl compiles with Emscripten 1.37.9 to asm.js and WebAssembly; WebAssembly is preferred for smaller size (~1.4 MB) and higher performance.
- •The distribution includes extensions like tDOM, json/json::write, html, javascript (from Tcllib), ncgi, and rl_json, with size trade-offs (e.g., tDOM adds ~400 kB).
- •Building requires Unix/Linux, Emscripten SDK, make/autoconf, diff/patch; Windows is unsupported, and macOS may work via MacPorts (untested).