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?
- Privacy: Files never leave your device. No server, no upload, no data retention.
- Speed: No upload/download overhead. Convert a 50MB 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 ~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)