Convertur
Engineering

How we run image codecs in your browser

TLTheo Lindqvist · Jun 24, 2026 · 8 min read

Every converter on Convertur makes the same promise: your file never leaves your device. That’s not a policy we enforce with a privacy statement — it’s a property of how the software is built.

This post walks through the pipeline that turns a raw file into a converted download, entirely inside your browser tab.

Why WebAssembly

Image codecs like the HEVC decoder behind HEIC are decades of highly-optimised C. Rewriting them in JavaScript would be slow and error-prone. WebAssembly lets us compile the original C to a format the browser runs at close to native speed.

The result is that the same code a desktop app would use runs in the page — no server round-trip, no upload, no queue.

Loading a codec on demand

A codec is only fetched the first time you open a tool that needs it. We split each decoder into its own chunk so the landing page stays light and you download exactly what you use.

Once a codec is cached, the tool works offline — proof that nothing depends on a server.

Keeping the main thread free

Heavy conversions run in a Web Worker so the interface stays responsive. Progress is streamed back to the UI, and cancelling a job simply tears down the worker.

For fast canvas-based conversions we skip the worker entirely — the operation finishes in a single frame.

The download step

When a conversion finishes we hold the result as a Blob in memory and hand you an object URL. Nothing is written to a server, and closing the tab discards it all.

Batch downloads are zipped in the browser too, using a streaming ZIP writer that never buffers the whole archive at once.

TL
Theo LindqvistBuilds the WebAssembly conversion pipeline at Convertur. Cares far too much about first-load size.

Related posts