How offline HEIC to JPG conversion works
This page is a static HTML document with a WebAssembly library (heic2any) embedded into it. When you drop a HEIC file, the file is read into your browser's memory using the FileReader API, decoded by the WASM module on your CPU, re-encoded as JPG, and handed back to you as a download. At no point does the file leave your device.
Why offline conversion matters
Most "free HEIC converter" websites work by uploading your photos to their servers, converting them there, and sending the JPG back. That's fine for vacation snapshots, but a problem if your HEICs contain:
- Sensitive personal photos (medical, family, intimate)
- Confidential business documents you photographed
- Screenshots of legal or financial information
- Anything you wouldn't want sitting on a stranger's server, even briefly
With offline conversion, the file is processed entirely inside the privacy sandbox of your browser tab. The server hosting this page (Netlify) serves the HTML, CSS, and WASM library, then has nothing else to do — there's no "upload" endpoint on our side because we don't process files server-side.
How to verify it's really offline
You don't have to trust us. Verify it yourself:
- Open your browser's DevTools (right-click → Inspect, or F12).
- Switch to the Network tab and clear it.
- Drop a HEIC file onto the converter above.
- Watch the Network tab — it stays empty during conversion. No XHR, no fetch, no WebSocket. Nothing.
Alternatively: load this page, then turn off your wifi or unplug your ethernet. The converter still works because everything it needs is already in your browser's memory.
"No upload" is a stricter guarantee than "private"
Lots of HEIC converters call themselves private. Read the fine print and you usually find:
- "Files are deleted after conversion" — meaning they were uploaded first.
- "Encrypted in transit" — meaning they're transmitted, just over HTTPS.
- "We don't store your files" — relying on the operator's promise rather than architecture.
- "GDPR compliant" — a regulatory claim, not a technical one.
All of these still involve your file existing on someone else's server, even briefly. That's a fundamentally different threat model from the file never being transmitted at all.
This converter is the second kind. There is no upload endpoint. There is no server-side process to delete the file from. The architecture itself makes data leakage impossible — not because we promise to be careful, but because there's nothing to be careful with.
HEIC vs JPG — what's the difference?
HEIC (also called HEIF) is Apple's preferred image format since iOS 11. It's based on the modern HEVC video codec and produces files about 50% smaller than equivalent-quality JPGs. Great for storage on your phone.
JPG is the universal standard from 1992. It's larger but every device, app, website, and operating system understands it. When you need to share a photo with someone on Windows, upload to a website that rejects HEIC, or edit in older software, you need JPG.
This converter gives you the best of both: keep storing originals as HEIC on your iPhone, convert to JPG on demand when you need universal compatibility.
Open architecture for the paranoid
Everything on this page is inspectable:
- The converter library (heic2any / libheif) is open source — github.com/alexcorvi/heic2any. You can read every line.
- The page itself — right-click → View Source. You'll see plain HTML and the converter JS that wires the drop zone to the engine. No obfuscation, no minified mystery code.
- The network — DevTools shows everything. There are no hidden requests because browsers can't make hidden requests.