Join the p2p swarm for hypercore and hyperdrive feeds.

Usage no npm install needed!

<script type="module">
  import hyperdiscovery from 'https://cdn.skypack.dev/hyperdiscovery';


deprecated See hyperswarm replicator for similar functionality.

More info on active projects and modules at dat-ecosystem.org


Old documentation below

This library is compatible with hypercore<=v7, which is now out of date.

build status

Join the p2p swarm for hypercore and hyperdrive. Uses discovery-swarm under the hood. Also works in web browsers using discovery-swarm-web.

This module only works

npm install hyperdiscovery


Run the following code in two different places and they will replicate the contents of the given ARCHIVE_KEY.

var hyperdrive = require('hyperdrive')
var hypercore = require('hypercore')
var Discovery = require('hyperdiscovery')

var archive = hyperdrive('./database', 'ARCHIVE_KEY')
var discovery = Discovery(archive)
discovery.on('connection', function (peer, type) {
  console.log('got', peer, type)
  console.log('connected to', discovery.connections, 'peers')
  peer.on('close', function () {
    console.log('peer disconnected')

// add another archive/feed later
var feed = hypercore('./feed')
discovery.add(feed) // adds this hypercore feed to the same discovery swarm

Will use discovery-swarm to attempt to connect peers. Uses dat-swarm-defaults for peer introduction defaults on the server side, which can be overwritten (see below).

The module can also create and join a swarm for a hypercore feed:

var hypercore = require('hypercore')
var Discovery = require('hyperdiscovery')

var feed = hypercore('/feed')
var discovery = Discovery(feed)


var discovery = Discovery(archive, opts)

Join the p2p swarm for the given feed. The return object, discovery, is an event emitter that will emit a peer event with the peer information when a peer is found.

discovery.add(archive, [opts])

Add an archive/feed to the discovery swarm. Options will be passed to discovery-swarm. If you pass opts.announce as a falsy value you don't announce your port (discover-only mode).


Get length of the list of total active connections, across all archives and feeds.


Leave discovery for a specific discovery key.


Rejoin discovery for a discovery key (*must be added first using discovery.add).


Exit the swarm, close all replication streams.

  • stream: function, replication stream for connection. Default is archive.replicate({live, upload, download}).
  • upload: bool, upload data to the other peer?
  • download: bool, download data from the other peer?
  • port: port for discovery swarm
  • utp: use utp in discovery swarm
  • tcp: use tcp in discovery swarm
  • bootstrap: [string], WebRTC bootstrap signal servers for web
  • discovery: string, discovery-swarm-stream server for web

Defaults from datland-swarm-defaults can also be overwritten:

  • dns.server: DNS server
  • dns.domain: DNS domain
  • dht.bootstrap: distributed hash table bootstrapping nodes


Set DEBUG='*' in the environment to enable debugging output inside discovery-swarm.

See Also