Show HN: TagLib-Wasm, a TypeScript-first music tagging library
Almost instantly, I ran into a problem: There are no complete music metadata libraries for TypeScript/JavaScript runtimes. TagLib (https://taglib.org/) looked great, but I couldn't find any good TypeScript wrappers for it, and I wanted to avoid including OS-specific binaries in a library that might be distributed as part of standalone tools. Unfortunately, the TagLib project doesn't (yet) include a native Wasm build.
(Note: I'm not a professional software engineer. My roles are historically developer relations, product management/strategy, and product marketing. I have a computer science background and have helped lead teams building extremely complex systems, so this project is somewhere between "real software engineering" and "vibe coding".)
After some research and experiments, I settled on a stack of Deno, Wasm, Emscripten, and Emscripten Embind (which I had never heard of before starting this project), with Claude Code as my "pair programmer". I've built stuff with TypeScript (targeting Node.js as the runtime) before, but this was my first experience with everything else.
Claude Code has surprised me several times during the development of TagLib-Wasm. Here's a response to questions I had about an earlier suggestion it had made regarding improving type safety: https://imgur.com/a/nRrYz3p
Here's why I think TagLib-Wasm is interesting:
→ It's the only complete library for any-format music metadata management for TS/JS developers.
→ This is still somewhat aspirational until I create a suite of tests for each runtime, but I’m targeting true cross-runtime support — Deno, Node.js, Bun, Electron, Cloudflare Workers, and browsers.
→ I’m not aware of another library that can operate as easily with memory buffers as with files. Surely there must be one, but I suspect it’s unique in TS|JS land.
After starting this, I ran into the creator of go-taglib (sentriz/go-taglib, not wtolson/go-taglib) on HN, who had also arrived at a Wasm-based solution for his Golang library. I then borrowed aspects of his developer experience to provide a "Simple API" variant for more casual use of the library.
No comments yet