JSZip
Create, read, and edit ZIP files directly in JavaScript, in the browser or Node.js.
Repository Health
Technical Analysis
JSZip is a JavaScript library for creating, reading, and editing ZIP archives without any server-side dependency. It exposes a chainable file/folder API for building an archive in memory, plus Promise- and stream-based methods for generating the final ZIP as a blob, base64 string, typed array, or Node buffer/stream.
The same API also reads existing ZIP files back into that file/folder tree, with optional CRC32 integrity checking, so archives can be created, inspected, and re-packaged using one consistent interface across browser and Node.js environments.
What You Get
- A dependency-light JSZip class for building ZIP archives in-memory from strings, binary data, base64, ArrayBuffers, Blobs, or Node streams
- A loadAsync() reader that parses existing ZIP files, including nested folders and CRC32 verification, back into the same file/folder API
- Multiple output formats — blob, base64, Uint8Array, ArrayBuffer, or Node Buffer/stream — via generateAsync()/generateNodeStream()
- Bundled TypeScript type definitions (index.d.ts) for editor autocomplete with no separate @types package required
- A prebuilt browser bundle (dist/jszip.min.js) alongside the Node/CommonJS entry point
Common Use Cases
- Bundling multiple generated files (reports, exports, images) into a single downloadable ZIP in the browser
- Reading uploaded ZIP archives client-side to preview or extract their contents without a server round-trip
- Packaging build artifacts or generated documents as ZIPs in Node.js scripts and CI pipelines
- Implementing “export all as ZIP” features in web apps, such as downloading a folder of user files at once
Under The Hood
Architecture The JSZip constructor (lib/index.js) creates an instance with a null-prototype files map; prototype methods from lib/object.js (file, folder, forEach, filter, remove, generateInternalStream/generateAsync/generateNodeStream) operate on that tree. Loading an existing archive flows through lib/load.js, which uses lib/reader/* (ArrayReader, Uint8ArrayReader, NodeBufferReader, StringReader, dispatched via readerFor.js) to parse ZipEntries (lib/zipEntries.js, zipEntry.js) and optionally verify CRC32 via lib/stream/Crc32Probe.js. Output generation runs through lib/generate/index.js and ZipFileWorker.js, which chain GenericWorker-derived stream stages (lib/stream/GenericWorker.js, DataWorker.js, DataLengthProbe.js, ConvertWorker.js, StreamHelper.js) via .pipe() — a hand-rolled stream abstraction that mirrors Node streams but works unmodified back to IE6, ultimately exposed through StreamHelper’s accumulate()/toNodejsStream() for Promise or stream consumption.
Tech Stack Runtime dependencies are minimal: pako (~1.0.2) for DEFLATE/INFLATE compression, lie (~3.3.0) as an ES5-safe Promise polyfill exposed via lib/external.js, readable-stream (~2.3.6) for the Node stream shim (swapped for a browser-specific file via the package.json browser field), and setimmediate. Build tooling is Grunt plus Browserify for the bundled browser build (dist/jszip.min.js), with hand-written TypeScript declarations (index.d.ts) checked via tsc in the test script rather than the library itself being authored in TypeScript. The source is CommonJS, ES5-style (var, no destructuring) — a reflection of the library’s long history (created 2009) rather than neglect, though it does mean there’s no native ESM entry point.
Code Quality Test coverage is broad: test/asserts/ holds one file per feature area (file.js alone has 76 assertions, plus generate.js, load.js, stream.js, permissions.js, unicode.js, and more), run via QUnit in both Node (test-node) and real browsers through Playwright (test-browser), plus a tsc pass validating the type definitions against the JS API. ESLint runs with eslint:recommended plus stricter rules (eqeqeq, curly, no-caller, guard-for-in, 4-space indent, double quotes), enforced in CI on every push/PR (.github/workflows/main.yml). Error handling is consistent but dated — explicit Error throws with upgrade-guide messages for removed 2.x methods, Promise .catch/worker error events rather than typed errors — and the project’s own health signals show low recent commit and maintenance activity despite the large existing test surface.
API Design The public API is small and chainable: new JSZip(), .file()/.folder()/.remove() for the tree, .generateAsync()/.generateNodeStream() for output, and static JSZip.loadAsync() for reading — all reachable from a single default export with almost no setup ceremony (three lines to zip a file and produce a blob, per the README example). Type definitions ship inside the package (index.d.ts), giving IDE autocomplete with no separate @types install. The main friction is legacy holdovers: removed synchronous .generate()/constructor-with-args paths throw pointed but easy-to-miss errors directing users to the upgrade guide, and the full documentation lives on an external GitHub Pages site (stuk.github.io/jszip) rather than in the README, so newcomers need to leave the package to find anything past the basic example.
Used by 66 apps in this directory
LimeSurvey
Forms Surveys
The world's most flexible open-source survey platform with 900+ templates, conditional logic, 80+ languages, and full GDPR compliance for any scale.
Linkwarden
Bookmarks Archiving · Knowledge Management
Self-hosted collaborative bookmark manager that captures full-page archives, enables annotation, and keeps your knowledge accessible forever.
Llama Coder
AI Development · Low Code Platforms
Generate multi-file web apps from a single prompt using open-source LLMs — an open-source alternative to Claude Artifacts.
Logseq
Knowledge Management · Note Taking
A privacy-first, open-source knowledge graph platform combining Markdown, Org-mode, bidirectional linking, and local-first storage for building your second brain.
Lokus
Knowledge Management · Note Taking
Local-first note-taking with graph view, canvas & AI plugins—your Markdown files, zero telemetry, blazing-fast Rust performance.
Magic
AI Agents · Automation · Low Code Platforms
Magic is an enterprise-grade open-source AI agent platform combining a generalist AI agent, workflow engine, IM, and collaborative office system for running an AI-powered digital workforce.
massCode
Code Editors · Developer Tools · Productivity
A free, local-first developer workspace unifying snippets, notes, HTTP requests, calculations, drawings, and dev tools in one desktop app.
Medplum
Authentication · Databases · Developer Tools
An open-source, FHIR-native healthcare platform that gives developers a compliant backend, authentication, a React component library, and serverless bots to build clinical applications in weeks instead of years.
MentraOS
AI Development · Developer Tools
The open source operating system and SDK that lets developers build one app and run it across smart glasses from Even Realities, Vuzix, Mentra Live, and more.