DEV Community

Cover image for File converter that never uploads your files?
Jeffrey Hamilton
Jeffrey Hamilton

Posted on

File converter that never uploads your files?

Every online file converter — from Zamzar to CloudConvert to FreeConvert — does the same thing: they upload your files to their servers, convert them, and send them back.

For personal photos, videos, and sensitive documents, that's not great.

So I built ConvertIt — a file format converter that runs entirely in your browser. No backend, no uploads, no sign-up.

What it converts
Images: PNG ↔ JPEG ↔ WebP ↔ AVIF, HEIC → anything, GIF → video
Video: MP4 ↔ WebM, MOV → MP4, any video → extract audio
Audio: WAV → MP3, FLAC → MP3, M4A → MP3, any audio → MP3
Documents: PDF → images (PNG/JPEG), images → PDF, SVG → PNG
How it works
File type Engine How
Video ffmpeg.wasm Compiled to WebAssembly, runs in-browser
Images Canvas API + OffscreenCanvas Re-encode to target format
Audio Web Audio API + lamejs Decode → re-encode to MP3
PDF pdf-lib + pdfjs-dist Render pages or combine images
The architecture
Zero backend. It's a static site hosted on Vercel. There is no server — your files are processed entirely in the browser.

Browser (your device)
├── Drop file
├── Auto-detect input format
├── Show available output formats
├── Convert entirely in memory (Blob URLs)
└── Download result
↳ Files NEVER touch a server

Key technical decisions

1. Lazy-loaded heavy dependencies
ffmpeg.wasm is 32MB. We don't load it until you actually convert a video. Same for pdf-lib (PDFs) and heic2any (iPhone photos). Initial page load stays fast.

2. Auto-detection & routing
Drop a file → the app detects the format by extension and MIME type → shows only the relevant output formats. You can't convert a PNG to MP3, so we don't show that option.

3. Mobile memory safeguards
Mobile devices get stricter file size limits (100MB for video vs 500MB on desktop), and ffmpeg is terminated after each conversion to free memory.

4. Never return a larger file
If a conversion somehow makes a file bigger (rare, but happens), we warn the user but still allow it.

The privacy model

This is the whole point:

  • 100% client-side — files are processed in your browser
  • Zero network requests during conversion
  • No accounts, no tracking, no analytics, no cookies
  • No server-side storage — there IS no server
  • Open source — read every line of code

Your files are yours. They shouldn't need to visit a server to be converted.

Try it

Live: https://convertit.vercel.app

Source: GitHub

Feedback welcome — happy to answer questions about the architecture or the ffmpeg.wasm setup.

Top comments (0)