How DuckConvert Works
A plain explanation of the client-side architecture, plus a way to verify it yourself in under a minute. If you need to share this with an IT or security reviewer, you can print a clean summary below.
DuckConvert Technical Overview
Client-Side Architecture
1. How It Works
DuckConvert is a static site with no backend. There is no server that your files are ever sent to. All file parsing and conversion runs locally, in your browser, using WebAssembly (WASM) and Web Workers. Your files, images, documents, and spatial data stay on your own device throughout the entire process.
Runs On Your Device
Conversions run inside Web Workers on your own CPU. There's no queue, no upload progress bar, and no server-side step. The same browser tab that loaded this page does the actual work.
No Backend to Send Files To
DuckConvert is built with Next.js in static export mode (`output: 'export'`) and deployed as static files. There are no API routes, server actions, or file-upload endpoints anywhere in the app for a file to be sent to.
2. Verify It Yourself
You don't have to take our word for it. This takes about a minute to check in any browser:
- Open DevTools: Right-click anywhere on DuckConvert and select Inspect (or press F12), then open the Network tab.
- Load a file: Drag and drop a document (a CSV or PDF works well) into the dropzone.
- Go offline: Disconnect Wi-Fi or unplug your ethernet cable.
- Convert it: Pick an output format and click Convert. The conversion completes normally with no internet connection.
- Check the Network tab: No new requests should appear for your file. Nothing was sent anywhere.
Don't Take Our Word — Here's a Real Run
This is the actual, unedited list of every network request a real browser made from the moment a test photo was dropped into the image compressor to the moment it finished — captured with the browser's own request log, the same steps 1–5 above describe. Four requests, all to this site's own origin, none of them the file being compressed:
| Method | Type | Requested path |
|---|---|---|
| GET | script | /_next/static/chunks/.../preflight.js |
| GET | script | /workers/image.worker.js |
| GET | fetch | /workers/mozjpeg_dec.wasm |
| GET | fetch | /workers/mozjpeg_enc.wasm |
All four are code and the WebAssembly module the compressor needs to run — fetched once, from this origin, before any work starts. Nothing fires while the photo is actually being compressed, and nothing carries its bytes anywhere.
Measured Conversion Times
Real timings from real conversions on small, neutral test files — not benchmarked on a personal laptop, but on a 4-core Linux build server (Intel Xeon @ 2.10GHz), the same kind of modest hardware this site itself runs on. A phone or an older laptop will be slower; the point is that these are measured, not invented.
| Conversion | Time |
|---|---|
| HEIC → JPG (1 photo) | 0.8s |
| Compress a 1.2 MB photo | 1.3s |
| Merge 2 PDFs (4 pages each) | 0.1s |
3. Open-Source Libraries In Use
The actual file processing is handled by well-known open-source libraries, run entirely client-side:
Video and audio transcoding, compiled to WebAssembly.
PDF rendering, parsing, and merging in the browser.
Client-side spreadsheet parsing for CSV, XLSX, and JSON.
In-browser Word .docx to HTML/Markdown conversion.
4. Third-Party Requests
Your files are never part of any network request. The page itself, however, does load two external services on every visit. Both are listed here so the Network tab holds no surprises, and both are described in full in our Privacy Policy.
pagead2.googlesyndication.com: serves the ads that keep DuckConvert free. Sets cookies and sees your IP address and the page you are on. Blocking it does not affect any conversion tool.
static.cloudflareinsights.com: cookieless page-view counting. No fingerprinting, no cross-site tracking, aggregate figures only.
5. Tool-Specific Model Downloads
Two tools also fetch model or language data on first use. Both libraries default to downloading it from their authors’ own CDNs; we mirror the same files onto assets.duckconvert.com and point the libraries there, so these requests reach no party that does not already serve the site. Your file is never part of them, and the download is cached in your browser after the first time. See section 4 of the Privacy Policy for details.
assets.duckconvert.com/tesseract*: Tesseract’s engine, WASM core and English training data, downloaded once per browser. Mirrored from jsDelivr.
assets.duckconvert.com/imgly: the ONNX subject-detection model, downloaded once per browser. Mirrored from img.ly’s CDN.