← Back to projects

File Converter — Private, In-Browser

Live

JavaScript · WebAssembly · Astro

A file converter where every conversion runs in your browser with WebAssembly. The file you pick never leaves your device: there's no upload, no server-side processing and nothing to log — because there's no server to upload to.

Each conversion has its own page (/convert/png-to-jpg, /convert/heic-to-jpg…), in English and Spanish, and most pairs work in both directions.

What it converts

  • Images — PNG, JPG and WebP in every direction, plus HEIC (decode-only, on purpose).
  • Data — CSV, JSON, YAML and XML between each other.
  • PDF — images to PDF and PDF to images, plus merge, split, rotate and compress.
  • Audio and video — MP3, WAV, M4A, FLAC, OGG, MOV, MP4, WebM and GIF.

Decisions worth mentioning

  • HEIC with libheif-js instead of heic2any: heic2any needs 'unsafe-eval' in the CSP; libheif-js only needs 'wasm-unsafe-eval', so the strict policy stays intact. Its ~1.4 MB decoder only loads on the HEIC pages.
  • PDF tools are their own kind of operation (many files in, one out) instead of being forced into the from → to model.
  • Audio and video use single-threaded FFmpeg.wasm; its ~32 MB core is served from my own storage and only downloads the first time you convert audio or video.