Downloading and extracting a zip file using Node seemed like a pretty easy task but alas it took some time to figure out.

While researching how to do this, I didn’t find a library that had all of the requirements within it but I did find a few that allowed me to meet the requirements


  1. Download zip file from a url
  2. Extract zip file to a directory location
  3. Extract a single directory and all of its sub-directories within the zip file

Downloading the Zip File

Step 1 was to get the zip file downloaded using Node and make sure that I could manually open it. To download the zip file, I am using the superagent package and piping the download to a file using fs.

  1. Install superagent package

    npm install --save superagent
  2. Using superagent along with fs we can download a zip file and save the zip to a local file. In the code below, I am downloading the zip for the master branch of the Github repo located at

    There are “TODO” statements in the code below for the things that you would need to change to use this code for your own zip file.

    'use strict';
    // Import
    const request = require('superagent');
    const fs = require('fs');
    // TODO: change to where your zip file is located
    const repoName = 'node-zip-download-sample';
    const href = `${repoName}/archive`;
    const zipFile = '';
    const source = `${href}/${zipFile}`;
    // TODO: change to the directory instead of the zip that you want to extract
    const extractEntryTo = `${repoName}-master/`;
    // TODO: change to the directory where you want to extract to
    const outputDir = `./${repoName}-master/`;
      .on('error', function(error) {
      .on('finish', function() {
          // add code below to here

Now that the zip file is downloaded we can unzip it.

Unzipping the Zip File

For unzipping, I didn’t find anything built into Node but I did find the Adm-Zip package on NPM.

Adm-Zip has functions for dealing with the entire zip file or a single file/directory within the zip file. In my case all of my files were contained within a directory in the zip file and I wanted to extract the files contained within that directory.

  1. Install Adm-Zip

    npm install --save adm-zip
  2. Add Adm-Zip to the list of requires

    const admZip = require('adm-zip');
  3. Within the on finish statement from the previous section, add the code below to use Adm-Zip to extract a directory from the downloaded zip file and extract it to a directory

    console.log('finished downloading');
    var zip = new admZip(zipFile);
    console.log('start unzip');
    zip.extractEntryTo(extractEntryTo, outputDir, false, true);
    console.log('finished unzip');

Just like that we had our zip file downloaded and extracted to a directory.

You can find a working sample at

Leave a comment below if you end up using this solution or are doing it another way.