{"id":1032,"date":"2026-10-23T17:33:33","date_gmt":"2026-10-23T17:33:33","guid":{"rendered":"http:\/\/jfdi-blog-how-browser-only-tools-work"},"modified":"2026-10-24T13:44:25","modified_gmt":"2026-10-24T13:44:25","slug":"how-browser-only-tools-work","status":"publish","type":"post","link":"https:\/\/jfdi.pro\/blog\/how-browser-only-tools-work\/","title":{"rendered":"How browser-only tools work, in plain English"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">A browser-only tool sends you the <strong>program<\/strong> instead of asking for your <strong>file<\/strong>. When you open the page, your browser downloads the tool&#8217;s code; when you add a file, the browser reads it from your disk and processes it on your own computer; when you click Download, the result goes straight from your browser&#8217;s memory to your device. The website&#8217;s server never receives the file, so it can&#8217;t keep, leak or look at it.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/jfdi.pro\/\">Try the tools<\/a><\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Two ways a file tool can work<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th><\/th><th>Upload-based tool<\/th><th>Browser-only tool<\/th><\/tr><\/thead><tbody><tr><td>Where the work happens<\/td><td>The company&#8217;s server<\/td><td>Your computer or phone<\/td><\/tr><tr><td>Your file travels<\/td><td>To the server and back<\/td><td>Nowhere<\/td><\/tr><tr><td>Speed depends on<\/td><td>Your upload speed and their queue<\/td><td>Your device<\/td><\/tr><tr><td>Size limits<\/td><td>Often capped on free plans<\/td><td>Your device&#8217;s memory<\/td><\/tr><tr><td>Works offline after loading<\/td><td>No<\/td><td>Often, for much of the work<\/td><\/tr><tr><td>Can save your work for you<\/td><td>Yes, if you have an account<\/td><td>No: you download it<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Most well-known online file tools are upload-based; we looked at what six of them say about it in <a href=\"https:\/\/jfdi.pro\/blog\/which-online-tools-upload-your-files\/\">Which online file tools upload your files?<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What makes it possible<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ten years ago, a web page couldn&#8217;t realistically edit a PDF or convert a video. Several things changed that:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>WebAssembly.<\/strong> A way to run fast, compiled programs inside a web page, at close to the speed of a desktop app. It became an official W3C web standard on 5 December 2019, described as &#8220;a virtual instruction set architecture that enables high-performance applications on the Web&#8221; (<a href=\"https:\/\/www.w3.org\/press-releases\/2019\/wasm\">W3C<\/a>). It lets existing software, written in languages like C, C++ and Rust, run in the browser.<\/li>\n\n\n\n<li><strong>Access to your device&#8217;s media hardware.<\/strong> The WebCodecs interface lets a page use the same chips your device uses to record and play video, so converting a video in a browser can be as fast as in a desktop app.<\/li>\n\n\n\n<li><strong>Access to your graphics card.<\/strong> WebGPU lets a page run heavy maths, such as an AI model, on the graphics processor.<\/li>\n\n\n\n<li><strong>Background threads.<\/strong> Web Workers let a page do heavy work without freezing, so you can keep using it while a batch of 300 photos processes.<\/li>\n\n\n\n<li><strong>Reading and saving files locally.<\/strong> Browsers can read a file you choose and save a result, all without a server in between. Chrome and Edge can even write results straight into a folder you pick.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">How each JFDI tool uses them<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Tool<\/th><th>What runs in your browser<\/th><\/tr><\/thead><tbody><tr><td><a href=\"https:\/\/jfdi.pro\/blog\/pdf\/\">PDF toolkit<\/a><\/td><td>Mozilla&#8217;s PDF.js draws the pages; pdf-lib rebuilds the file with your changes<\/td><\/tr><tr><td><a href=\"https:\/\/jfdi.pro\/blog\/convert\/\">File converter<\/a><\/td><td>SheetJS for spreadsheets; Mediabunny with WebCodecs for video and audio<\/td><\/tr><tr><td><a href=\"https:\/\/jfdi.pro\/blog\/images\/\">Image editor<\/a><\/td><td>A HEIC decoder compiled to WebAssembly; the IS-Net background-removal model on WebGPU, or WebAssembly when there&#8217;s no usable graphics card<\/td><\/tr><tr><td><a href=\"https:\/\/jfdi.pro\/blog\/charts\/\">Chart maker<\/a> and <a href=\"https:\/\/jfdi.pro\/blog\/map\/\">map maker<\/a><\/td><td>The d3 drawing library, plus boundary files served from this site<\/td><\/tr><tr><td><a href=\"https:\/\/jfdi.pro\/qr\/\">QR code maker<\/a><\/td><td>A QR encoder written in plain JavaScript<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">All of these are open-source libraries, credited in our <a href=\"https:\/\/jfdi.pro\/licenses.txt\">licences file<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What still gets downloaded<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">&#8220;Nothing is uploaded&#8221; doesn&#8217;t mean &#8220;nothing is downloaded&#8221;. Your browser fetches:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>The tool&#8217;s code<\/strong>, when you open the page.<\/li>\n\n\n\n<li><strong>Extra pieces when they&#8217;re needed<\/strong>: the PDF engines in the background after the PDF toolkit opens, the 44 MB background-removal model the first time you use it, map boundaries for the US or UK when you make those maps. Your browser keeps them, so later visits are quick.<\/li>\n\n\n\n<li><strong>The font<\/strong> for the pages, from Google Fonts. Like any website, Google can see your IP address when your browser fetches it. Our <a href=\"https:\/\/jfdi.pro\/privacy.html\">privacy page<\/a> explains this.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">None of these requests contain your files.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How to check for yourself<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Open the browser&#8217;s developer tools (F12), choose the <strong>Network<\/strong> tab, and use the tool. You&#8217;ll see every request the page makes. An upload shows up as an outgoing request about the size of your file; on a browser-only tool, there isn&#8217;t one. The steps are in <a href=\"https:\/\/jfdi.pro\/blog\/which-online-tools-upload-your-files\/\">Which online file tools upload your files?<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The trade-offs<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Your device does the work<\/strong>, so a huge video converts faster on a laptop than an old phone.<\/li>\n\n\n\n<li><strong>Nothing is saved for you.<\/strong> That&#8217;s the privacy, but it also means closing the tab loses unsaved work. Download as you go.<\/li>\n\n\n\n<li><strong>Some jobs still need a server<\/strong>, such as recognising text in scanned documents (OCR) or reading formats browsers can&#8217;t, like old Word <code>.doc<\/code> files.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Related<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/jfdi.pro\/blog\/which-online-tools-upload-your-files\/\">Which online file tools upload your files? We checked six<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/jfdi.pro\/blog\/smallpdf-ilovepdf-cloudconvert-alternatives\/\">Free alternatives to Smallpdf, iLovePDF and CloudConvert that don&#8217;t upload files<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/jfdi.pro\/blog\/remove-background-free-on-device\/\">Remove an image background for free, on your own device<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Modern browsers can run PDF editors, video converters and even AI models on your own device. Here&#8217;s how a website can process your files without ever receiving them, and what still gets downloaded.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[81,82,46,80],"class_list":["post-1032","post","type-post","status-publish","format-standard","hentry","category-privacy","tag-browser","tag-how-it-works","tag-privacy","tag-webassembly"],"_links":{"self":[{"href":"https:\/\/jfdi.pro\/blog\/wp-json\/wp\/v2\/posts\/1032","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/jfdi.pro\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/jfdi.pro\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/jfdi.pro\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/jfdi.pro\/blog\/wp-json\/wp\/v2\/comments?post=1032"}],"version-history":[{"count":3,"href":"https:\/\/jfdi.pro\/blog\/wp-json\/wp\/v2\/posts\/1032\/revisions"}],"predecessor-version":[{"id":1083,"href":"https:\/\/jfdi.pro\/blog\/wp-json\/wp\/v2\/posts\/1032\/revisions\/1083"}],"wp:attachment":[{"href":"https:\/\/jfdi.pro\/blog\/wp-json\/wp\/v2\/media?parent=1032"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/jfdi.pro\/blog\/wp-json\/wp\/v2\/categories?post=1032"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/jfdi.pro\/blog\/wp-json\/wp\/v2\/tags?post=1032"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}