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.
// Simplified: how client-side file processing works
// (No network requests after the page loads)
// Step 1: User selects a file via <input type="file">
const file = fileInput.files[0];
// Step 2: Browser reads the file from local filesystem to memory
const arrayBuffer = await file.arrayBuffer();
// β This reads from your disk β never touches the network
// Step 3: Processing library transforms the data in memory
// (e.g., pdf-lib merges PDFs, libheif decodes HEIC, squoosh compresses images)
const result = await processLocally(arrayBuffer);
// Step 4: Result is converted to a downloadable Blob
const blob = new Blob([result], { type: 'application/pdf' });
// Step 5: Browser triggers download β writes to local filesystem
const url = URL.createObjectURL(blob);
const link = document.createElement('a');
link.href = url;
link.download = 'output.pdf';
link.click();
// Entire flow: disk β memory β memory β disk
// 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.
// Main thread: send file to worker, stay responsive
const worker = new Worker('/processing-worker.js');
const arrayBuffer = await file.arrayBuffer();
// Transfer ownership of the buffer (zero-copy) to the worker
worker.postMessage({ buffer: arrayBuffer }, [arrayBuffer]);
worker.onmessage = (e) => {
const { result } = e.data;
// Worker finished β download the result
const blob = new Blob([result]);
const url = URL.createObjectURL(blob);
downloadLink.href = url;
};
// Main thread continues responding to user interactions
// 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 β