TagLib-Wasm is the universal tagging library for TypeScript/JavaScript (TS|JS) platforms: Deno, Node.js, Bun, Cloudflare Workers, Electron, and browsers.
This project exists because the TS|JS ecosystem had no battle-tested audio tagging library that supports reading and writing music metadata to all popular audio formats. It aspires to be a universal solution for all TS|JS*-capable platforms — Deno, Node.js, Bun, Electron, Cloudflare Workers, and browsers.
TagLib-Wasm stands on the shoulders of giants, including TagLib itself, Emscripten, and Wasm (WebAssembly). TagLib itself is legendary and a core dependency of many music apps.
- ✅ Full audio format support – Supports all audio formats supported by TagLib
- ✅ TypeScript first – Complete type definitions and modern API
- ✅ Wide TS/JS runtime support – Deno, Node.js, Bun, Electron, Cloudflare Workers, and browsers
- ✅ Format abstraction – Handles container format details automagically when possible
- ✅ Zero dependencies – Self-contained Wasm bundle
- ✅ Production ready – Growing test suite helps ensure safety and reliability
- ✅ Two API styles – Use the “Simple” API (3 functions), or the full “Core” API for more advanced applications
Requirements: Node.js v22.6.0 or higher
Two options for TypeScript:
- Node's experimental TypeScript support
- TypeScript loader (recommended)
Note: See our full documentation for details on Node.js experimental TypeScript support.
Works in both main and renderer processes:
tag-wasm is designed to support all formats supported by TagLib:
- ✅ .mp3 – ID3v2 and ID3v1 tags
- ✅ .m4a/.mp4 – MPEG-4/AAC metadata for AAC and Apple Lossless audio
- ✅ .flac – Vorbis comments and audio properties
- ✅ .ogg – Ogg Vorbis format with full metadata support
- ✅ .wav – INFO chunk metadata
- ✅ Additional formats – Opus, APE, MPC, WavPack, TrueAudio, AIFF, WMA, and more
Beyond basic tags, taglib-wasm supports extended metadata:
View all supported tag constants →
taglib-wasm works across all major JavaScript runtimes:
Deno | ✅ Full | npm:taglib-wasm | Native TypeScript |
Node.js | ✅ Full | npm install taglib-wasm | TypeScript via tsx |
Bun | ✅ Full | bun add taglib-wasm | Native TypeScript |
Browser | ✅ Full | Via bundler | Full API support |
Cloudflare Workers | ✅ Full | taglib-wasm/workers | Memory-optimized build |
Electron | ✅ Full | npm install taglib-wasm | Main & renderer processes |
- Memory Usage – Entire file must be loaded into memory (may be an issue for very large files)
- Concurrent Access – Not thread-safe (JavaScript single-threaded nature mitigates this)
- Cloudflare Workers – Limited to 128MB memory per request; files larger than ~100MB may fail
Contributions are welcome! Please read our Contributing Guide for details on our code of conduct and the process for submitting pull requests.
This project uses dual licensing:
- TypeScript/JavaScript code – MIT License (see LICENSE)
- WebAssembly binary (taglib.wasm) – LGPL-2.1-or-later (inherited from TagLib)
The TagLib library is dual-licensed under LGPL/MPL. When compiled to WebAssembly, the resulting binary must comply with LGPL requirements. This means:
- You can use taglib-wasm in commercial projects
- If you modify the TagLib C++ code, you must share those changes
- You must provide a way for users to relink with a modified TagLib
For details, see lib/taglib/COPYING.LGPL
- TagLib – Excellent audio metadata library
- Emscripten – WebAssembly compilation toolchain