Skip to content
Adds EXPLODE, UNSHRINK, and UNREDUCE support to BrowserFS's ZipFS.
Branch: master
Clone or download
John Vilk
Latest commit 3f4af13 Nov 6, 2016
Type Name Latest commit message Commit time
Failed to load latest commit information.
scripts Updating / fixing bugs / adding tests. Nov 5, 2016
src Updating / fixing bugs / adding tests. Nov 5, 2016
.travis.yml Travis / appveyor config / badges Nov 6, 2016 Appveyor badge. Nov 6, 2016
appveyor.yml Travis / appveyor config / badges Nov 6, 2016
karma.config.js Updating dependencies and README. Nov 5, 2016
rollup.config.js Updating / fixing bugs / adding tests. Nov 5, 2016
rollup.node.config.js Updating / fixing bugs / adding tests. Nov 5, 2016

BrowserFS ZipFS Extras v1.0.1

Build Status Build status NPM version david-dm-status-badge david-dm-status-badge

Note: Requires BrowserFS v1.1 and up!

Adds the following decompression algorithms to BrowserFS, which were used in older versions of PKZip:

  • EXPLODE and UNSHRINK (ported from Info-Zip's GPL2'd code)
  • UNREDUCE (ported from this GPL2 code)

Although BrowserFS is licensed under the MIT license, this add-on library is based on GPL2 code and is provided under the GPL2 license.



Simply include browserfs.js and browserfs-zipfs-extras.js on the same page, and BrowserFS will know how to decompress these extra algorithms. Make sure you include browserfs.js first.


Add both browserfs and browserfs-zipfs-extras as dependencies of your project. Then, simply require browserfs-zipfs-extras before you begin using browserfs.

const BrowserFS = require('browserfs');
// Now you can use BrowserFS.


Requires a reasonably recent version of Node. Run:

$ npm install

Running Tests

NOTE: You must have Git LFS installed and use it to clone the repository. We use Git LFS to manage our test fixtures, which are a bunch of zip files.

$ npm test

Porting Comments

We emulate pointers and pointer arithmetic with the Ptr class, which takes an array and an offset into the array. extract.ts and inflate.ts extensively use pointers into Huffman tables as well as pointer arithmetic to iterate through table values!

To reduce object allocations, most Ptr manipulations edit the value of an existing Ptr rather than create a new one. As a result, developers maintaining this project must be cognizant of Ptr aliasing; if two places contain the same Ptr object, then manipulating one will change the other!

You can’t perform that action at this time.