node package manager


Create .torrent files


This module is used by WebTorrent! This module works in node.js and the browser (with browserify).

npm install create-torrent

The simplest way to use create-torrent is like this:

var createTorrent = require('create-torrent')
var fs = require('fs')
createTorrent('/path/to/folder', function (err, torrent) {
  if (!err) {
    // `torrent` is a Buffer with the contents of the new .torrent file 
    fs.writeFile('my.torrent', torrent)

A reasonable piece length (~1024 pieces) will automatically be selected for the .torrent file, or you can override it if you want a different size (See API docs below).

Create a new .torrent file.

input can be any of the following:

  • path to the file or folder on filesystem (string)
  • W3C File object (from an <input> or drag and drop)
  • W3C FileList object (basically an array of File objects)
  • Node Buffer object
  • Node stream.Readable object

Or, an array of string, File, Buffer, or stream.Readable objects.

opts is optional and allows you to set special settings on the produced .torrent file.

  name: String,            // name of the torrent (default = basename of `path`, or 1st file's name) 
  comment: String,         // free-form textual comments of the author 
  createdBy: String,       // name and version of program used to create torrent 
  creationDate: Date       // creation time in UNIX epoch format (default = now) 
  private: Boolean,        // is this a private .torrent? (default = false) 
  pieceLength: Number      // force a custom piece length (number of bytes) 
  announceList: [[String]] // custom trackers (array of arrays of strings) (see [bep12]( 
  urlList: [String]        // web seed urls (see [bep19]( 

If announceList is omitted, the following trackers will be included automatically:

  • udp://
  • udp://
  • udp://
  • udp://
  • udp://
  • wss://
  • wss://
  • wss://

Trackers that start with wss:// are for WebRTC peers. See WebTorrent to learn more.

callback is called with an error and a Buffer of the torrent data. It is up to you to save it to a file if that's what you want to do.

Note: Every torrent is required to have a name. If one is not explicitly provided through, one will be determined automatically using the following logic:

  • If all files share a common path prefix, that will be used. For example, if all file paths start with /imgs/ the torrent name will be imgs.
  • Otherwise, the first file that has a name will determine the torrent name. For example, if the first file is /foo/bar/baz.txt, the torrent name will be baz.txt.
  • If no files have names (say that all files are Buffer or Stream objects), then a name like "Unnamed Torrent " will be generated.

Note: Every file is required to have a name. For filesystem paths or W3C File objects, the name is included in the object. For Buffer or Readable stream types, a name property can be set on the object, like this:

var buf = new Buffer('Some file content') = 'Some file name'
usage: create-torrent <directory OR file> {-o outfile.torrent}
Create a torrent file from a directory or file.
If an output file isn\'t specified with `-o`, the torrent file will be
written to stdout.

MIT. Copyright (c) Feross Aboukhadijeh.