Create a rest API for hypercore-archiver

Usage no npm install needed!

<script type="module">
  import archiverApi from '';


Archiver-API Travis npm

A REST API for hypercore-archiver.


  • Add & remove keys to a hypercore-archiver
  • Get status of the hypercore-archiver


See server.js for a complete usage example.

var http = require('http')
var appa = require('appa')
var Archiver = require('hypercore-archiver')
var archiverAPI = require('archiver-api')
var DatServer = require('archiver-server')

var archives = Archiver(dir)
var datServer = DatServer(archives, {swarm: true})
var api = Api(archives)
var app = appa()

var apiServer = http.createServer(app)

app.on('/add', function (req, res, ctx) {
  api.add(ctx.body, function (err, code, data) {
    if (err) return app.error(res, code, err.message)
    app.send(code, data).pipe(res)

// Register Other API methods


var api = ArchiverApi(archiver, [opts])

archiver is a hypercore-archiver instance.

api.add(opts, cb)

Add an archive to the archiver. opts should be an object with:

  • opts.key (String) - archive key

Note: To add an archive, you need to connect to it on the Dat Network. archiver-server does this for you but you can also use discovery-swarm or discovery-channel directly

api.remove(opts, cb)

Remove an archive from the archiver.

opts should be an object with:

  • opts.key (String) - archive key


Get the archiver status. Currently returns {archives: count} where count is number of archives in the archiver.

api.archiveProgress(key, cb)

Get progress for an archive.

API will respond with a archive progress object: {progress: 0.5}, where progress is the percentage of blocks done.

API Status


  • Add
  • Remove via POST
  • General Status
  • Archive Progress


  • Remove via DELETE
  • Archive status (peers, history, etc.)
  • Associate archive with user/email

Example with Archiver-Server

Archiver-server makes it easy to connect to the Dat network and serve archives over HTTP.

Run the Servers:

npm start

This will start three servers:

  1. HTTP Archiver API: Send POST requests to /add to archive Dats.
  2. Dat Network: Connect to peers over the Dat network
  3. HTTP Archives: Access archives over HTTP (via hyperdrive-http)

Send a POST request to the API

Send the request with a Dat key, YOUR_DAT_KEY_HERE, that you are hosting.

curl -X POST -H "Content-Type: application/json" -d '{"key":"YOUR_DAT_KEY_HERE"}'

Visit your archive in your http-based browser:

Or via Dat on Beaker: dat://YOUR_DAT_KEY_HERE