I was auditing a company's software stack and found that every employee was using a free online PDF merger for contract files. The tool's privacy policy granted it a license to “process and analyse uploaded content”. Nobody had read it. Nobody knew. When I showed them how to verify what the tool was actually doing by watching the Network tab, the uploads were visible immediately. They switched to a client-side tool the same day.
All FileMint tools run locally in your browser.
No upload, no server, no account. Verify it yourself with DevTools.
View All Local Tools →What “Client-Side” Actually Means
A client-side file tool loads all its processing code into your browser when the page loads. When you drop a file, the browser reads it from your local filesystem into memory as anArrayBuffer. The processing library (JavaScript or WebAssembly) transforms the data. The result is written back to disk via a download prompt.
At no point in this chain does any network request contain your file data. The only network traffic is the initial page load, downloading the HTML, CSS, JavaScript, and any WebAssembly modules. After that, processing happens entirely inside the browser sandbox.
1// Simplified: how client-side file processing works2// (No network requests after the page loads)3 4// Step 1: User selects a file via <input type="file">5const file = fileInput.files[0];6 7// Step 2: Browser reads the file from local filesystem to memory8const arrayBuffer = await file.arrayBuffer();9// ↑ This reads from your disk — never touches the network10 11// Step 3: Processing library transforms the data in memory12// (e.g., pdf-lib merges PDFs, libheif decodes HEIC, squoosh compresses images)13const result = await processLocally(arrayBuffer);14 15// Step 4: Result is converted to a downloadable Blob16const blob = new Blob([result], { type: 'application/pdf' });17 18// Step 5: Browser triggers download — writes to local filesystem19const url = URL.createObjectURL(blob);20const link = document.createElement('a');21link.href = url;22link.download = 'output.pdf';23link.click();24 25// Entire flow: disk → memory → memory → disk26// Network is never involved after the page loadsHow WebAssembly Enables Heavy Processing in the Browser
Many file operations (HEIC decoding, PDF rendering, video transcoding) require computationally intensive C/C++ libraries. These cannot be written efficiently in pure JavaScript. WebAssembly (WASM) allows these libraries to be compiled to a binary format that runs in the browser at near-native speed.
Examples of C++ libraries compiled to WASM that power common browser tools:
- libheif: HEIC/HEIF image decoding, powers HEIC-to-JPG converters
- libvips / squoosh codecs: Image compression, powers WebP, AVIF encoders
- pdf.js: PDF rendering, powers browser PDF viewers
- FFmpeg.wasm: Video processing, the full FFmpeg suite compiled to WASM
- Tesseract.js: OCR, the Tesseract engine compiled to WASM
Web Workers Keep the UI Responsive
Processing a large file on the browser's main thread blocks UI rendering, the page freezes while the work is happening. Web Workers move the computation to a background thread, keeping the interface interactive.
1// Main thread: send file to worker, stay responsive2const worker = new Worker('/processing-worker.js');3const arrayBuffer = await file.arrayBuffer();4 5// Transfer ownership of the buffer (zero-copy) to the worker6worker.postMessage({ buffer: arrayBuffer }, [arrayBuffer]);7 8worker.onmessage = (e) => {9 const { result } = e.data;10 // Worker finished — download the result11 const blob = new Blob([result]);12 const url = URL.createObjectURL(blob);13 downloadLink.href = url;14};15 16// Main thread continues responding to user interactions17// while the worker processes the file in the backgroundHow to Verify a Tool Is Client-Side
- 1Open Chrome DevTools (F12) and go to the Network tab. Click the clear button (⊘).
- 2Drop a file into the tool and process it.
- 3Watch the Network tab. A server-side tool shows a large POST request (size roughly matching your file). A client-side tool shows no upload requests.
- 4Disconnect from Wi-Fi and try again. A client-side tool still works. A server-side tool fails with a network error.
For a broader overview of the risks of server-side tools, our guide on file upload risks covers the GDPR implications and Terms of Service traps. For the full technical architecture including PDF-specific operations, our client-side tools technical guide covers WebAssembly, OffscreenCanvas, and Web Worker patterns.
Verify it yourself: open DevTools and process a file.
Every FileMint tool runs locally. No upload. Check the Network tab, it stays empty.
Open Local Tools →