DEV Community

Anson Chan
Anson Chan

Posted on

Building a Privacy-First File Converter That Runs 100% in Your Browser

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 for static site generation (4,000+ pages, 8 languages)
  • FFmpeg.wasm for audio/video conversions (single-thread mode, no SharedArrayBuffer needed)
  • Canvas API for image format conversions
  • pdf-lib for PDF operations
  • SheetJS for spreadsheet conversions
  • Tailwind CSS for dark-mode-only UI

Why Client-Side?

  1. Privacy: Files never leave your device. No server, no upload, no data retention.
  2. Speed: No upload/download overhead. Convert a 50MB video instantly.
  3. Cost: Zero server costs. Runs on Cloudflare Pages (free tier).
  4. Offline: Works offline once loaded (PWA).

The Hard Parts

FFmpeg.wasm Initialization

FFmpeg.wasm is ~25MB. 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 <a> tags for blob URLs. We use programmatic click on a dynamically created <a> 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!

Top comments (0)