// the find
ffmpegwasm/ffmpeg.wasm
FFmpeg for browser, powered by WebAssembly
ffmpeg.wasm compiles FFmpeg to WebAssembly so you can transcode video and audio entirely in the browser, no server required. It runs a virtual filesystem in memory, accepts ffmpeg CLI arguments as-is, and communicates via a Web Worker to avoid blocking the main thread. The target audience is developers who need client-side media processing without sending files to a backend.
The API mirrors ffmpeg's CLI flags directly, so anyone who knows ffmpeg can use this without learning a new abstraction. Running in a Web Worker by default is the right call — it keeps the UI responsive during what can be multi-second operations. The monorepo ships example apps for React, Vue, Svelte, Angular, SolidStart, and Next.js, which meaningfully lowers the integration friction for each framework. The build scripts for each codec dependency (x264, x265, libvpx, opus, etc.) are all in the repo, so the WASM binary is fully reproducible rather than a mystery artifact.
It's still badged 'experimental' after years of development, and that's not just a formality — SharedArrayBuffer is required for the multi-threaded core, which demands cross-origin isolation headers (COOP/COEP) that break a lot of existing sites. The WASM binary is large; even the single-threaded core is several megabytes, and users will feel that load time. There's no streaming support — you write files to an in-memory virtual filesystem, run ffmpeg, then read them back out, which means the full input must fit in browser memory before processing starts. Last commit was early 2026 but the blog has a single post from 2023, so the project's maintenance energy is unclear.