Skip to content
This repository


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Tar implemented in the browser

branch: untar

This branch is 3 commits ahead and 5 commits behind master

Fetching latest commit…


Cannot retrieve the latest commit at this time

Octocat-spinner-32 dep
Octocat-spinner-32 examples
Octocat-spinner-32 lib
Octocat-spinner-32 LICENSE
Octocat-spinner-32 package.json


Have you ever wanted to tar something, but you didn't want to push it to your server first?

Tar-js is here to the rescue!!

With tar-js, you can construct a tar archive in the browser. This is basically a port of tar-async for Nodejs for the browser, with a couple differences.

Here's what it supports:

  • Add strings to a tar archive as files
  • Customizable uid, gid, mtime, and permissions (defaults work well though too)
  • Add files in a directory heirarchy


Tar needs an HTML5 compliant browser. More specifically it needs Uint8Array to work.

The only external module is require-kiss, which makes browser JS much more Node-like.

This module can be installed from npm (npm install require-kiss) or directly downloaded from github (

Usage Guide

In your HTML file, make sure that require-kiss is included first. Then, to use it, do something like this:

var Tar = require('tar'),
    tape = new Tar();

Then all you got to do is call tape.append with your params and it'll be added to the archive. That's it!

Here's the api for append: append(filepath, content, [opts], [callback])

  • filepath- string path (can include directories and such)
  • content- string or Uint8Array
  • opts- options:
    • mode- permissions of resulting file (octet) [default: 777]
    • mtime- modification time in seconds (integer) [default: current time]
    • uid- user id (integer) [default: 0]
    • gid- group id (integer) [default: 0]
  • callback- callback when done (takes a Uint8Array as it's only parameter)
    • This is a reference to the tar so far
    • Copy it if you want to use it, because subsequent adds may break stuff
Something went wrong with that request. Please try again.