node package manager
It’s your turn. Help us improve JavaScript. Take the 2017 JavaScript Ecosystem Survey »



Zips up a directory and saves the zip to disk or returns as a buffer.

Build Status Build Status


$ npm install zip-dir


var zipdir = require('zip-dir');
zipdir('/path/to/be/zipped', function (err, buffer) {
  // `buffer` is the buffer of the zipped file 
zipdir('/path/to/be/zipped', { saveTo: '~/' }, function (err, buffer) {
  // `buffer` is the buffer of the zipped file 
  // And the buffer was saved to `~/` 
// Use a filter option to prevent zipping other zip files! 
// Keep in mind you have to allow a directory to descend into! 
zipdir('/path/to/be/zipped', { filter: (path, stat) => !/\.zip$/.test(path) }, function (err, buffer) {
// Use an `each` option to call a function everytime a file is added, and receives the path 
zipdir('/path/to/be/zipped', { each: path => console.log(p, "added!"), function (err, buffer) {


var zipdir = require('zip-dir');

zipdir(dirPath, [options], callback)

Zips up dirPath recursively preserving directory structure and returns the compressed buffer into callback on success. If options defined with a saveTo path, then the callback will be delayed until the buffer has also been saved to disk.


  • saveTo A path to save the buffer to.
  • filter A function that is called for all items to determine whether or not they should be added to the zip buffer. Function is called with the fullPath and a stats object (fs.Stats). Return true to add the item; false otherwise. To include files within directories, directories must also pass this filter.
  • each A function that is called everytime a file or directory is added to the zip.


  • Add an option to not add empty directories if there are no valid children inside