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-10-07 — P2P module updates
The module releases that Pear 3.6.0 bundles. An application pins its own copies in its package.json, so upgrade these dependencies directly to pick the changes up.
Hypercore — v11.37.2, v11.37.0
- Fixed (v11.37.2):
core.clear()deleted the tree nodes of still-stored blocks to the left of the cleared range (since v11.16.0), so a peer requesting one of those blocks failed withINVALID_OPERATION: Expected tree node N from storage, got (nil). For example, afterclear(1)a fresh peer could not read block 0.drive.clear()goes through it. Upgrading does not restore nodes that an earlierclear()already deleted. - Changed (v11.37.0): manifest decoding accepts
version3, which is wire-compatible with version 2. Earlier releases throwUnknown version: 3on such a manifest, and versions above 3 are still rejected.
Hyperdrive — v13.3.4
- Fixed:
drive.downloadDiff()finished without fetching the data blocks of entries written withdedup: true. It downloaded each entry's contiguous range, which for those entries covers only the block map. It now follows the map, asdrive.download()has since v13.3.3. - Fixed:
download.destroy()no longer waits for the blobs core to open before closing, and closing the drive during a download resolvesdownload.done()instead of rejecting withREQUEST_CANCELLED. This covers theDownloadthatdrive.download()anddrive.downloadDiff()return.
HyperDHT — v6.34.1
- Fixed: a server that relays a connection now notices when the relay is lost, before or after pairing. It releases the unconnected stream and its hole puncher once no direct connection has taken over within the grace period and no hole punch is still running. Previously a punch parked after
TRY_LATER, or a relay that died after pairing, could hold them until another close event, such as keep-alive, cleaned up. - Added: a
relayRecoveryWaitoption tonode.createServer(), in milliseconds and30000by default, that sets that grace period.
Compact-encoding — v3.5.2
- Changed: decoding
cenc.arraybufferor acenc.frame(enc)frame whose declared length is longer than the bytes left now throwsOut of bounds. Before,arraybufferreturned a zero-paddedArrayBufferandframedecoded whatever bytes remained.
Corestore — v7.13.0, v7.12.6
- Added (v7.13.0): an
alwaysLatestBlockconstructor option,falseby default, that turns onallowLatestBlockfor every core the store opens. Sessions and namespaces created from the store inherit it, and anallowLatestBlockpassed tostore.get()takes precedence. - Added (v7.12.6):
store.get()acceptsmanifestVersion, which overridesstore.manifestVersionfor the manifest of a new writable core. A core that already exists under that name keeps the version it was created with.
Hyperschema — v1.26.2, v1.26.0, v1.25.0
- Changed (v1.25.0): versioned types have a
framedoption. A new versioned type defaults toframed: true, which length-prefixes each of its version structs unless the struct iscompact, so a decoder from an earlier schema generation can skip fields that a later generation appended. A type already in yourschema.jsonkeeps its unframed layout (the next build recordsframed: false), and settingframed: trueon it changes the bytes it writes. Keep the previousschema.jsonwhen you regenerate: without it every versioned type is framed, which differs from the layout of a spec generated with v1.24.0 or earlier. - Fixed (v1.26.0): a
uint1–uint7field decoded astrueorfalseinstead of its value in code generated with v1.23.0 through v1.25.0. The bytes written were correct, so regenerating the spec with v1.26.0 or later is enough, and stored data needs no migration. - Added (v1.26.0): a
constantfield option—abool, integer,stringornullliteral that the decoder always returns for the field. A constant is never encoded, takes no flag bit and does not bump the schema version. It cannot be combined withrequired,array,recordorinline.
See RPC and schemas for where Hyperschema fits.
blind-peering — v2.10.1, v2.10.0, v2.9.1
- Changed (v2.9.1):
sendNotification()picks a random connected blind peer among thepickclosest totarget(2 by default), rather than the closest connected one, to spread notification load. - Added (v2.10.0): a
clientconstructor option,{ name, version }, that identifies your application to blind peers. Both values are sent in the connection handshake, along with the blind-peering version. - Added (v2.10.1): a
skipConnectionMetadataconstructor option,falseby default. Whentrue, the handshake carries no metadata at all—neitherclientnor the blind-peering version.
blind-peer — v3.15.1
- Changed: the Corestore that blind-peer creates when you do not pass a
storeis opened withalwaysLatestBlock: true(added in v7.13.0, above), so its replicator includes a request for the latest block in every upgrade request. Astoreyou pass in is used as given.pear blind-peer startpasses none, so it gets the new behaviour.
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
groupoption 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.statsreports more counters—punches.tryLaterandpunches.tryLaterRelayedHandshakesAtLeastOncefor rate-limited hole-punch attempts, and asocketPoolgroup for socket pool lifecycle. The existingpunchesandrelayingcounters are unchanged.
Hyperswarm — v4.17.1
- Changed: a client connection that fails with
CANNOT_HOLEPUNCHis now retried throughrelayThrough, joiningHOLEPUNCH_ABORTED,HOLEPUNCH_DOUBLE_RANDOMIZED_NATSandREMOTE_NOT_HOLEPUNCHABLE. For Pear this means a relay registered with--relayis also used when the DHT reports that a hole punch cannot succeed.
Compact-encoding — v3.5.0, v3.4.0
- Added (v3.5.0):
cenc.fixed8,cenc.fixed16andcenc.fixed24, alongside the existingfixed32andfixed64. - Added (v3.4.0):
cenc.bitarray.
Corestore — v7.12.5, v7.12.3
- Changed (v7.12.5):
store.get()forwardsallowLatestBlockto 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 reachesstore.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 awarningevent 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 forwarningif you relied on the old behaviour to surface post-close errors.
Secretstream — v6.9.2
- Added: a
filterZeroByteMessagesoption, which drops zero-byte messages before they reach the message handler. It is on implicitly wheneverkeepAliveis 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: trueand typeboolis packed into a bitfield—auintlength followed byceil(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–uint7used as an array now fail at build time withcannot be used as an array; they only exist inside a struct's flags byte. - Added (v1.24.0):
fixed8,fixed16andfixed24types, 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 newnotificationRateLimitconstructor option ({ capacity, interval, timeout }), or passnullto disable it. - Changed (v2.9.0):
addAutobase()finds every view and writer core through the Autobase itself, so itsadditionalViewsoption is ignored. Register cores that are not part of the Autobase withaddCore()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, andnotificationErrorSnapshotDelay(v3.14.0). - Changed (v3.15.0): the default
notificationTimeoutrises 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 viaoptions.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
manifestoption 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()anddrive.has()silently stalled or fetched the wrong data for entries written withdedup: 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, and this release did not fix it: v13.3.4 did (see the 2026-10-07 entry).
HyperDHT — v6.33.0
- Fixed: relayed server connections now inherit
connectionKeepAlivethe 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.Pearreference, 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
treeCacheoption for tuning Hypercore's tree-node cache—raisemaxSizeon peers that serve more connections than usual.
See also
- Pear's release overview—
pearCLI andpear-*module releases. - Bare's release overview—Bare runtime and bare-* module releases.
- Building blocks reference—current API for Hypercore, Hyperdrive, and other building blocks.
- Helpers reference—current API for Corestore.
Last updated on