| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| README.md | 2026-09-12 | 2.8 kB | |
| v2.14.1 source code.tar.gz | 2026-09-12 | 4.0 MB | |
| v2.14.1 source code.zip | 2026-09-12 | 4.5 MB | |
| Totals: 3 Items | 8.5 MB | 2 | |
What's Changed in v2.14.1
New features
- AES encryption and decryption run faster on every build. The JavaScript engine unrolls the AES rounds and the SHA-1 steps: a stored AES-256 entry goes from 91 to 114 MB/s on Node.js, from 55 to 68 MB/s in Firefox and from 77 to 100 MB/s in Chrome. The WebAssembly builds ship zlib-streams 1.2.1, whose AES-CTR/HMAC-SHA1 kernel got the same treatment from @xqdoo00o: 111 to 131 MB/s on Node.js, 87 to 96 MB/s in Firefox and 99 to 118 MB/s in Chrome. The default bundle grows by 3.5 KB gzipped, the native build by 1.5 KB and the core build by 1 KB
Bug fixes
checkOverlappingEntrycompares the range of an entry with its two neighbours by offset instead of with every entry read before it, so reading an archive with the check on is no longer quadratic in its entry count: 16,000 entries take 75 ms instead of 551 ms. The check is meant for untrusted archives, where the entry count is the attacker's choicecheckOverlappingEntryOnlyno longer opens the entry data. OnHttpRangeReaderit issued a range request for the whole compressed payload of every entry it checked, and never read the response- Every
terminateWorkers()call made while a codec runs is resolved when the codec ends. A second call on the same busy codec used to replace the resolver of the first one, so the first promise never settled, and the WebAssembly builds have awaited it since 2.14.0 - The WebAssembly codec wrapper copies each produced chunk straight out of the module memory instead of through a 64 KB staging buffer allocated per stream
Documentation
BENCHMARKS.mdis rewritten from measurements on 2.14.0: every table names the codec each library runs, the zip.js rows coverCompressionStream, the WebAssembly zlib and the pure-JavaScript port, a runtime harness compares Node.js, Bun and Deno, jszip streams in the disk-to-disk comparison, and the 7-Zip and library-picking sections are gone- The encryption tables are re-measured with the new engines, and the decompression section explains the memory gap between the backends on 5,000 small entries: the three zip.js rows allocate the same 800 MB of stream objects, and the higher peaks of the WebAssembly and pure-JavaScript rows come from V8's incremental marking on a codec running on the JavaScript thread
Tests and continuous integration
- The three fixes are pinned: the overlap-only check is counted in range requests, the overlap check reads adjacent entries out of order and twice, and two terminations race a running codec.
tests/README.mdgains a fifth trap, thePromise.racetimer Deno's sanitizer reports as a leak
Full Changelog: https://github.com/gildas-lormeau/zip.js/compare/v2.14.0...v2.14.1
Co-Authored-By: Claude Fable 5.1 noreply@anthropic.com