Building a Privacy-First File Converter That Runs 100% in Your Browser
Source: Dev.to
Most online file converters upload your files to a server. But what if you could convert files without them ever leaving your device?
That is exactly what OmniConvert does — 94 file conversions and 118 unit conversions, all running client‑side in your browser using WebAssembly.
The Tech Stack
- Astro – static site generation (4,000+ pages, 8 languages)
- FFmpeg.wasm – audio/video conversions (single‑thread mode, no SharedArrayBuffer needed)
- Canvas API – image format conversions
- pdf-lib – PDF operations
- SheetJS – spreadsheet conversions
- Tailwind CSS – dark‑mode‑only UI
Why Client‑Side?
- Privacy – Files never leave your device. No server, no upload, no data retention.
- Speed – No upload/download overhead. Convert a 50 MB video instantly.
- Cost – Zero server costs. Runs on Cloudflare Pages (free tier).
- Offline – Works offline once loaded (PWA).
The Hard Parts
FFmpeg.wasm Initialization
FFmpeg.wasm is ~25 MB. We lazy‑load it only when a user actually needs audio/video conversion, and cache it in a singleton.
Cross‑Origin Workers
FFmpeg.wasm needs Web Workers, which have strict cross‑origin requirements on Cloudflare Pages. We solved this with a custom classic Blob Worker bridge.
iOS Safari Downloads
Safari does not honor the download attribute on tags for blob URLs. We use a programmatic click on a dynamically created element instead.
Results
- 94 file conversions (image, audio, video, document, spreadsheet)
- 118 unit conversions across 13 categories
- 8 languages (en, zh, ja, es, ko, pt, fr, de)
- Lighthouse: SEO 100, Best Practices 100
- Zero server costs
Try it at tools.sagasu.art — feedback welcome!