P2P Docs

Release Overview

Curated overview of releases across P2P's building blocks and helpers—Hypercore, Hyperdrive, HyperDHT, and Corestore—breaking changes, removals, and additions.

A curated record of changes across P2P's building blocks and helpers, newest first. For the raw upstream record, see each module's GitHub releases; this page is the docs-team view of what the changes mean for your application.

Looking for pear CLI or pear-* module releases instead? See Pear's release overview. For Bare's releases, see Bare's release overview.

2026-09-22 — P2P module updates

The module releases that Pear 3.5.0 bundles. An application pins its own copies in its package.json, so upgrade these dependencies directly to pick the changes up.

Hypercore — v11.36.1, v11.36.0, v11.35.4

  • Added (v11.36.0): await core.setAlwaysLatestBlock(enabled).
  • Changed (v11.35.4): a session opened with a group option assigns that group to a core that has none, so a core first opened without a group can join one later. Previously the option only took effect when the core was created.

HyperDHT — v6.34.0

  • Changed: node.stats reports more counters—punches.tryLater and punches.tryLaterRelayedHandshakesAtLeastOnce for rate-limited hole-punch attempts, and a socketPool group for socket pool lifecycle. The existing punches and relaying counters are unchanged.

Hyperswarm — v4.17.1

  • Changed: a client connection that fails with CANNOT_HOLEPUNCH is now retried through relayThrough, joining HOLEPUNCH_ABORTED, HOLEPUNCH_DOUBLE_RANDOMIZED_NATS and REMOTE_NOT_HOLEPUNCHABLE. For Pear this means a relay registered with --relay is also used when the DHT reports that a hole punch cannot succeed.

Compact-encoding — v3.5.0, v3.4.0

Corestore — v7.12.5, v7.12.3

  • Changed (v7.12.5): store.get() forwards allowLatestBlock to the Hypercore it returns, so the option can be set per session through the store rather than only on a directly constructed core.
  • Fixed (v7.12.3): store.get({ group }) on a core that is already open without a group now assigns it, so the core reaches store.notifyGroup(topic). The assignment moved into Hypercore (v11.35.4, above).

Protomux — v3.12.0

  • Changed: an async channel handler (onmessage, onopen, onclose, ondrain, ondestroy) whose returned promise rejects after its channel has closed now makes the underlying stream emit a warning event carrying the error, instead of destroying the stream. A rejection while the channel is still open still destroys the stream, and a synchronous throw is unaffected. Listen for warning if you relied on the old behaviour to surface post-close errors.

Secretstream — v6.9.2

  • Added: a filterZeroByteMessages option, which drops zero-byte messages before they reach the message handler. It is on implicitly whenever keepAlive is set—so keep-alive users already had this behaviour—and can now be enabled on its own.

Hyperschema — v1.24.0, v1.23.0

  • Breaking (wire format, v1.23.0): a field with array: true and type bool is packed into a bitfield—a uint length followed by ceil(length / 8) bytes—instead of one byte per value. A spec regenerated with 1.23.0 or later cannot decode bool arrays written by a spec generated with 1.22.x or earlier, and the reverse. Check any schema with a bool array before regenerating, and migrate data already written in the old layout.
  • Changed (v1.23.0): the bitwise types uint1–uint7 used as an array now fail at build time with cannot be used as an array; they only exist inside a struct's flags byte.
  • Added (v1.24.0): fixed8, fixed16 and fixed24 types, backed by the new compact-encoding codecs.

See RPC and schemas for where Hyperschema fits.

blind-peering — v2.9.0, v2.8.0

  • Changed (v2.8.0): sendNotification() is rate-limited by default—10 per second, each waiting up to 10 seconds for a slot. Tune it with the new notificationRateLimit constructor option ({ capacity, interval, timeout }), or pass null to disable it.
  • Changed (v2.9.0): addAutobase() finds every view and writer core through the Autobase itself, so its additionalViews option is ignored. Register cores that are not part of the Autobase with addCore() instead.
  • Added (v2.9.0): addAutobase() accepts an Autobee.

blind-peer — v3.15.0, v3.14.0

  • Added: constructor options perReferrerRateLimitParams (v3.15.0), a per-referrer rate limit on notification requests, and notificationErrorSnapshotDelay (v3.14.0).
  • Changed (v3.15.0): the default notificationTimeout rises from 10 to 30 seconds.

2026-08-24 — P2P module updates

Hypercore — v11.35.2, v11.35.1, v11.35.0

  • Added (v11.35.0): core.getManifest([options]) returns the manifest, optionally in its encoded wire form via options.raw.
  • Added (v11.35.0): Hypercore.parseManifest(manifest, [key]) decodes and validates a manifest, optionally checking it hashes to a given key.
  • Changed (v11.35.0): the manifest option accepts an encoded manifest Buffer—a Buffer is read as a public key only when it is exactly 32 bytes.
  • Fixed (v11.35.1): the idle range completion scan.
  • Fixed (v11.35.2): the replicator bails out when the core is closing, instead of continuing work against a closing session.

HyperDHT — v6.33.2, v6.33.1

  • Fixed (v6.33.1): a node was pushed twice during HyperDHT initialization.
  • Fixed (v6.33.1): the clearing timeout is unreferenced, so it no longer holds the process open.
  • Fixed (v6.33.2): handshakes received while suspended are cleaned up, and clearing is reordered to match.

Compact-encoding — v3.3.2, v3.3.1

  • Added (v3.3.2): TypeScript typings.
  • Added (v3.3.1): validation on the signed integer codecs, so out-of-range values are rejected rather than silently encoded.

2026-07-30 — P2P module updates

Hypercore — v11.34.0–v11.35.1

  • Changed (v11.34.0): the tree-node proof cache is enabled, cutting repeated proof work for peers that serve many connections.
  • Added (v11.35.0): a manifest can be supplied as a raw buffer.
  • Fixed (v11.35.1): the idle range-completion scan.
  • Fixed (v11.34.1): the latest batch is always selected.

Hyperdrive — v13.3.3

  • Fixed: drive.download() and drive.has() silently stalled or fetched the wrong data for entries written with dedup: true. Those entries store blobs as a non-contiguous block map rather than a contiguous range, and the contiguous form was being used for every entry. downloadDiff() had the same bug.

HyperDHT — v6.33.0

  • Fixed: relayed server connections now inherit connectionKeepAlive the way direct sockets already did, and a relay-to-direct upgrade sends an explicit handoff packet so the peer observes the direct path before the relay is torn down.
  • Fixed: a LAN shortcut no longer blocks hole-punch fallback, and relay sockets close once a direct connection is established.
  • Removed: the internal global.Pear reference, following the Pear v3 removal of the ambient Pear API.

Corestore — v7.12.0, v7.11.1

  • Changed (v7.12.0): suspend() no longer performs an implicit flush. Write-ahead-log filtering makes reopening cheap, so the flush is no longer needed on every suspend.
  • Added (v7.11.1): a treeCache option for tuning Hypercore's tree-node cache—raise maxSize on peers that serve more connections than usual.

See also

Last updated on

Was this helpful?

On this page