OpenFile 提供 360+ 款在瀏覽器本機執行的檔案工具
I got tired of uploading my files to random websites, so I built 360 tools that run in the browser
作者推出開源工具 OpenFile,提供 360+ 款瀏覽器檔案工具,檔案在用戶裝置上由 JavaScript 和 WebAssembly 處理,不會上傳。工具涵蓋 PDF、圖像、影片與音訊、開發者工具及本機 AI,Qwen2.5、Kokoro 等模型在 Web Workers 執行;它亦可離線使用,並提供 Windows、macOS、Linux 桌面版和 Android 版。
A few months ago I needed to merge two PDFs. One was a signed form, the other had my ID details on it. I searched "merge pdf", clicked the first result, and right before I dropped the files in, I stopped.
Where do these files actually go?
Most of those sites upload your file to their server, do the work there, and send it back. Some delete it after an hour. Some say they do. Some put a watermark on it, or ask you to sign up after the second file, or limit you to 5 MB unless you pay.
That moment is why I built OpenFile.
What it is
OpenFile is a free, open source (MIT) file toolkit with 360+ tools, and every single one runs inside your browser tab. Your file is read by JavaScript and WebAssembly on your own machine. Nothing gets uploaded. There is no account, no watermark and no file size limit except what your device can handle.
It covers a lot of ground:
- PDF: merge, split, compress, sign, redact, OCR, fill forms, page numbers, convert to Word or images
- Images: compress, resize, convert (HEIC, AVIF, WebP, JPEG XL), remove background, upscale
- Video and audio: trim, compress, convert, make GIFs, boost volume, all with ffmpeg.wasm
- Developer stuff: JSON, JWT, hashes, regex, Base64, UUIDs, SQL formatting
- 3D, CAD, fonts, eBooks, archives, subtitles and data files
- Local AI: chat with a PDF, summarize, text to speech, background removal, OCR. The models run on your device in Web Workers.
Try it here: openfile-studio.vercel.app
How it works without a server
The short version: the browser is now strong enough to do almost all of this.
- pdf-lib and PDF.js handle creating, editing and rendering PDFs.
- ffmpeg.wasm does video and audio work. It is the real ffmpeg compiled to WebAssembly.
- jSquash codecs (AVIF, WebP, JPEG XL, OxiPNG) and magick-wasm handle images.
- Tesseract.js does OCR.
- Transformers.js and ONNX Runtime Web run small AI models like Qwen2.5 and Kokoro, inside Web Workers so the page does not freeze.
Each tool is its own lazy loaded chunk. When you open the merge PDF tool, you only download what merge PDF needs. Adding the 361st tool does not make the homepage heavier.
There are a couple of optional serverless functions (a health check, and fetching a page when you paste a URL), but they only ever see URLs, never your files.
It works offline too
OpenFile is a PWA. Install it once and it opens like a normal app, even with no internet. You can set it as the app that opens PDFs or images on your computer, so double clicking a file opens it straight in the right tool.
There are also desktop builds for Windows, macOS and Linux (Tauri) and an Android build (Capacitor). Same tools, same rule, nothing leaves the device.
Install options: aniruddhaadak80.github.io/OpenFile/install
The stack
React 19, TypeScript in strict mode, Vite, Tailwind 4, and a lot of WebAssembly. Favorites, recent files and settings live in IndexedDB and localStorage on your machine. The whole build is static files, so you can host your own copy anywhere, or run it with Docker.
Things I learned building it
- Workers are not optional. Anything heavy (OCR, AI, big PDFs) has to run off the main thread, or the UI feels broken even when it works.
- WASM files are big, so load them late. ffmpeg alone is around 30 MB. I only fetch an engine when a tool actually needs it, then let the service worker cache it.
- People do not trust "we delete your file after 1 hour" anymore. The best privacy policy is not needing one. If the file never leaves, there is nothing to delete.
- Docs drift fast. I ended up generating tool counts, format lists and model tables from the code at build time so the docs never lie.
What I want help with
It is open source and I would love contributors. New tools, bug reports, better docs, anything. The only hard rule: everything stays client side. A pull request that uploads user files to a server will not be merged.
If you try it, tell me which tool you used first and what was missing. And if it saved you from uploading something private, a star on GitHub helps more people find it.
來源:DEV Community · dev.to
