FileSaver.js
The standard client-side solution for saving files in the browser via a simple saveAs() call.
Repository Health
Technical Analysis
FileSaver.js is the de facto library for triggering file downloads directly from client-side JavaScript. It implements an HTML5 saveAs() function that takes a Blob, File, or URL and prompts the browser to save it under a chosen filename, with no server round-trip required.
Weighing in at under 6KB with zero runtime dependencies, it abstracts away the browser-specific quirks of downloading generated content, making it a foundational building block for web apps that export CSVs, PDFs, images, and other files created entirely on the client.
What You Get
- A single saveAs(blob, filename, options) function that works across modern browsers
- Automatic feature detection that picks the best download strategy per browser
- Support for saving Blobs, File objects, and remote or same-origin URLs
- Optional automatic byte-order-mark (BOM) insertion for correct UTF-8 text encoding
- A tiny, dependency-free UMD bundle usable via npm, a bundler, or a plain script tag
Common Use Cases
- Exporting client-generated CSV or JSON data as a downloadable file
- Saving PDFs or images produced in the browser (e.g. from a canvas)
- Downloading remote files while controlling the saved filename
- Offering ‘Save’ functionality in web apps that create content entirely offline
Under The Hood
Architecture - The entire library lives in a single UMD module (src/FileSaver.js) that resolves a global scope across window, self, and global, then defines saveAs() by branching on runtime capabilities. When the a[download] attribute is supported it creates an anchor, points it at either a same-origin URL, a CORS-checked remote download, or an object URL from a Blob, and dispatches a synthetic click; on legacy IE/Edge it delegates to navigator.msSaveOrOpenBlob; and as a last resort it falls back to a FileReader that reads the blob as a data URL and opens it in a popup, with reverse-tabnabbing guards. Helper functions bom(), download(), corsEnabled(), and click() keep the branches small.
Tech Stack - It is plain ES5-style JavaScript with no runtime dependencies. The build tooling is Babel (@babel/cli with plugin-transform-modules-umd and babel-preset-minify) which transpiles the source into UMD dist bundles (dist/FileSaver.js and a minified build). Distribution is via npm and bower, and TypeScript consumers pull types from the separately published @types/file-saver package.
Code Quality - The source is compact and readable, with comments pointing at the specific browser bugs and issue numbers each code path works around. There is no automated test suite, however: the package.json test script simply echoes ‘no test specified’ and exits, so correctness relies on manual browser testing and the library’s long production track record.
API Design - The public surface is a single saveAs(blob, filename, options) function, which makes the library trivial to adopt with essentially no boilerplate. The README documents every scenario (text, URLs, canvases, File objects) with runnable snippets, and the only option, autoBom, has a sensible default. This minimal, well-documented API is the main reason it became the ecosystem standard.
Used by 42 apps in this directory
NocoDB
Databases · Low Code Platforms · No Code Platforms
Turn any SQL database into a collaborative no-code spreadsheet with automatic REST APIs and real-time views.
Notesnook
File Storage · Note Taking · Security
End-to-end encrypted, open-source note-taking where your data stays yours — even from the server.
Open WebUI
AI Agents · AI Assistants
The extensible, privacy-first AI platform that runs Ollama, OpenAI, and any LLM backend behind a polished, feature-packed web interface.
OpenSign
Digital Signiture
Self-host a full-featured DocuSign alternative with unlimited e-signatures, multi-signer workflows, and cryptographic PDF signing.
Paperless-ngx
Bookmarks Archiving
Turn your paper pile into a searchable digital archive with OCR, AI classification, and automated workflows — all running on your own server.
Portainer
Devops
A lightweight, open-source web UI that puts Docker, Kubernetes, and Podman management within reach of any team—no CLI expertise required.
Rivet
AI Agents · Developer Tools
Stateful actors as a primitive for AI agents, real-time collaboration, and durable execution — with in-memory state, WebSockets, queues, and scheduling built in.
Rowy
Databases · Low Code Platforms
Manage Firestore data in an Airtable-like spreadsheet UI and build Cloud Functions workflows directly in your browser—on your own GCP project.
Snapify
Collaboration · Productivity
Open-source, self-hostable screen recording and video sharing built as a Loom alternative — no accounts required to watch, full S3-backed storage for your data.