Skip to main content
Developer Tools 7 min read

Local vs Server Processing: How to Tell If an Online Tool Uploads Your Files

How browser-side processing works, what uploading exposes, two checks that show if a tool sends your file anywhere, and when local processing fails.

Updated 2026-09-11

When a tool processes a file locally, the bytes never leave your device: the page reads the file into memory, does the work with JavaScript, Canvas or WebAssembly, and hands you a download. When a tool uploads, the file leaves your machine and you are trusting someone else's transport, storage, retention and access controls.

Below is how the browser does local processing, what the upload model really exposes, two checks you can run on any tool to see which model it uses, and the cases where local processing is genuinely the wrong choice.

What local processing actually means

Local processing means the file is opened by your browser and never sent anywhere. The sequence is roughly the same every time: you pick a file, the browser hands the page a File object (a reference plus metadata, not a copy of the bytes), the page reads the bytes only when needed, and the result becomes a Blob that turns into a download link.

  • It does mean the content stays in the tab: no server copy, no retention policy to trust, no third party in the loop.
  • It does not mean the page is offline: the page, its libraries and its fonts were downloaded first, and page code can call the network for other reasons.
  • It is not storage: data sits in the tab's memory, so closing the tab discards it and a crash loses work in progress.

The browser capabilities that make it possible

This is not exotic: a handful of long-standing platform features covers almost every local tool.

Browser capabilities behind local processing
CapabilityWhat it enables
File, Blob and FileReaderReading a file into memory and building a downloadable result.
Canvas 2DDecoding an image by drawing it, then resizing or re-encoding with toBlob or toDataURL.
WebAssemblyRunning substantial native libraries, such as codecs or PDF toolchains, in the tab.
Web WorkersKeeping the interface responsive by moving heavy work off the main thread.
File System Access APIReading and writing files with user permission instead of downloading. Chromium-only; others fall back to a download.
WebCodecsHardware-accelerated image and video encode and decode where supported.

A local tool can still feel slow the first time: the page and its libraries must download first, and large WebAssembly libraries run to several megabytes.

What uploading actually exposes

Uploading is not automatically unsafe; it turns a technical question into a trust question. Whether the operator's handling of your file is acceptable is mostly taken on their word.

  • Transport: the file crosses the network, so its safety rests on correct TLS and on nothing logging the body.
  • Retention: how long the file is kept, whether it is deleted afterwards, whether backups survive. A policy rather than a guarantee.
  • Third parties: object storage, CDNs and scanning services each add a copy you did not choose.
  • Access: staff, support tooling or an attacker with server access can read what is stored, and a file that was never uploaded cannot leak.
  • Compliance: identity documents, payslips and medical files carry personal data, so uploading can make the operator a processor and place copies in another jurisdiction.

If you must upload, reduce what you send: strip EXIF location and document metadata, redact what the task does not need, and prefer a stated deletion window.

Check 1: watch the Network panel while you use the tool

This works on any tool, including this site's, and takes about a minute.

  1. Open the tool plus developer tools (F12, or Ctrl+Shift+I; Command+Option+I on macOS), then the Network tab.
  2. Clear the list, tick Preserve log, and set the filter to All rather than only Fetch/XHR, since a form post shows up as a document request.
  3. Pick your file, run the main action, then stop touching the page.
  4. Sort by the Size column and compare the largest request with your file: if a 12 MB PDF produces no request near 12 MB, it was not uploaded.
  5. Open anything suspicious and read the Method, Request URL, Content-Length and Payload. A POST with multipart data naming your file is the giveaway.
  6. Check the quiet channels: WebSocket frames appear under the WS filter, and pages sometimes send data on unload with sendBeacon or keepalive.

For a fully local tool the list holds only the page, its scripts, styles and fonts - none of it your file, and the sizes show that.

Test with a file large enough to be visible. A 40 KB image disappears into the noise of page loading; a 20 MB video cannot.

Check 2: disconnect and repeat the task

The second check is cruder and harder to argue with: remove the network and repeat the task.

  1. Load the tool page fully while you still have a connection.
  2. Disconnect: turn off Wi-Fi, enable airplane mode, or choose Offline in the Network tab.
  3. Pick a new file and run the whole operation, then check that the downloaded result is correct.
  4. If it completes with valid output, the work happened on your machine: an upload could not have succeeded.
  5. Reload while still offline. If the page loads, a service worker cached it; if not, that only means the app is not offline-installable.

Two caveats. Going offline proves the step needs no server at that moment, but a page could queue data and send it after you reconnect, so check the Network tab again. And many tools are partly local: an IBAN checker can do the checksum in the browser while still sending a country code and bank code for a name lookup.

On a phone, airplane mode is the practical version of this test. Android Chrome can expose the network panel over USB debugging; iOS Safari has no local developer tools.

When local processing is the wrong choice

Local processing has hard limits, and the main one is memory.

  • Decoded images cost roughly four bytes per pixel, so an 8000 by 8000 pixel scan is about 256 MB before copies, and drawing it can hold two or three such buffers.
  • PDF libraries usually load a whole file into memory and keep several representations, so a few hundred megabytes is a realistic failure.
  • Mobile browsers are stricter: Safari on iOS caps tab memory and reclaims it aggressively, and a page that reloads mid-task was usually killed for using too much.
  • Some work does not fit in a tab at all: video transcoding, heavy OCR, large machine-learning models. Scale and persistence need a server too: hundreds of files, scheduled or resumable jobs, a permanent archive, a shared team history.
  • A local tool cannot scan a file for malware, so with untrusted files a service that scans uploads may be the safer trade.
Which model fits which job
SituationBetter fitWhy
Merging a few PDFs of a few megabytesLocalThe library runs fine in the page and the result downloads at once.
A 300-page scanned PDF on a phoneServer or desktopBrowser memory limits make this a classic local failure.
Transcoding a long videoServer or desktopNeeds codecs and CPU time a tab cannot provide.
Converting 500 images in one runServerBatching and progress tracking are easier off the browser.

What this looks like in practice

The tools used as examples here are built this way. The image resizer reads your file with the File API, draws it to a canvas and re-encodes it there; the PDF merge and image-to-PDF tools assemble pages with a JavaScript PDF library running in the page. None of them makes a network request while you work, and both PDF tools keep working after you disconnect, as long as the page is loaded.

One detail, so the numbers do not mislead you: the resizer estimates output size from the base64 data it produces, so treat it as approximate.

The same site also shows what partly local looks like. The IBAN checker performs the whole MOD-97 calculation in the browser, but it looks up the bank name and BIC behind a bank code, and that request carries only the country code and bank code, not the full IBAN. Seconds in the Network tab will confirm it. The Minecraft player-colour lookup is a different case: the colour maths runs locally, but the player name you type is sent to the public PlayerDB API to resolve it to a UUID.

If a page claims your files never leave your device and then sends them, the claim is wrong, and the Network tab is how you find out.

Local processing is a property you can verify in a couple of minutes, and the two checks work on any tool, not only the ones described here. When the job fits in a browser tab, the image resizer, PDF merge and image-to-PDF tools on this site do that work in your browser and hand you a file to save.

Frequently asked questions

If a tool processes files locally, is it automatically safe?

No. It removes one specific risk, the copy sitting on someone else's disk, but the page still runs third-party code that could send data somewhere, and a browser extension can read whatever the page can see. Local processing narrows the risk; it does not eliminate it.

Where does my file actually go during local processing?

Into the memory of that browser tab, and sometimes into swap or the disk cache managed by the operating system. Nothing is stored on the tool operator's servers, and closing the tab discards it, which also means a crash loses unsaved results.

Why does an offline test fail on the first visit?

Because the page, its libraries and its fonts have to be downloaded before anything runs. Unless the site registers a service worker that caches the app, the offline test only works after a successful load.

Is uploading ever the better option?

Yes. Files too large for browser memory, transcoding or OCR that needs server-grade compute, batch jobs of hundreds of files, shared archives, and malware scanning are all cases where a server does the job better or more reliably.

How do I run these checks on a phone?

Airplane mode is the practical test: load the page, disconnect, and repeat the task. Android Chrome can expose the network panel through USB debugging; iOS Safari has no local developer tools, so on an iPhone the offline test is the one that works.

Tools used in this guide

More guides