Pear Docs

Release Overview

Curated overview of releases across Pear and its pear-* modules—breaking changes, removals, and additions, with migration guidance for each.

A curated record of changes across Pear and its modules, newest first. Entries are grouped by module, and every Breaking item links to migration guidance. 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. To publish release notes for your own app instead, ship a CHANGELOG.md—see Publish a changelog for your app.

2026-09-22 — Pear 3.5.0

Pear 3.5.0 is a feature release on top of Pear 3.4.0. One command is renamed: pear blind-peer identity is gone, replaced by the new pear identity command, which prints all four of this machine's network keys instead of just the one. The rest is pear seed reporting—a Verlink row in place of Drive Key, and block-level sync progress for both the drive and its blobs. Among the bundled modules, Hyperschema 1.23.0 changes how bool arrays are encoded, which matters to any app that regenerates its schemas.

pear (CLI) — v3.5.0

  • Added: pear identityseed, blind-relay, blind-peer, and blind-peer-client each print one of this machine's local network public keys. The key goes to stdout and the next-step hint to stderr, so KEY=$(pear identity seed) captures the key alone. See Look up this machine's network keys.
  • Added: pear seed's stats gain a Verlink: row—the full versioned pear://<fork>.<length>.<key> form of the drive being seeded.
  • Added: pear seed's stats gain a Blobs Length: row, and both it and Drive Length: now report synced blocks and a percentage (12/40 [ 30%]) rather than a bare total. --json stats gains driveSynced, blobsSynced, blobsLength, and driveFork.
  • Breaking: pear blind-peer identity removed—use pear identity blind-peer-client, which prints the same key. Scripts calling the old form now fail with ✖ Unrecognized Argument at index 0 with value identity. pear blind-peer keeps start and request.
  • Changed: pear seed's stats drop the Drive Key: row in favour of Verlink:. The key is the verlink's last segment, and --json still reports driveKey unchanged.
  • Changed: under --no-tty, pear seed prints ... verlink <verlink> where it printed ... drive key <key>, and ... drive length gains the sync suffix (3 [ 100% ]). A script reading those lines should switch to --json, whose stats fields are unchanged apart from the additions above.
  • Fixed: pear cores writes its table straight to stdout instead of through console.log, which mangled the rules and marks into mojibake on Windows.

The sections below cover modules the Pear CLI bundles, at the versions 3.5.0 ships. An application pins its own copies in its package.json, so upgrading Pear does not change them in your app—upgrade those dependencies directly to pick these 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 uint1uint7 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.

None of the blind-peer or blind-peering changes reach pear blind-peer or pear seed --blind-peer: the CLI sets none of these options, and trust handling—announce downgrades, priority caps, refusing deletes from untrusted peers—is unchanged.

Bare — v1.32.0

  • Added: new Thread(callback) runs a function body on the new thread, and new Thread(filename, source[, options]) takes the source positionally. See Bare.Thread.
  • Deprecated: ThreadOptions.source, in favour of the positional form. Thread.create() stays deprecated, as it has been since v1.31.0—use new Thread().
  • Added: Addon.seal() and Addon.sealed—freeze dynamic addon loading for the rest of the process.

bare-type — v1.1.1

  • Removed: type.createTag(), type.addTag() and type.checkTag(), with no replacement, in a patch release. See bare-type.

Internal — deps bump

hyperbee2 v2.14.1, autobase v7.28.2, pear-ipc v6.16.0, bare-http-parser v2.1.4 (a major bump, but transitive under bare-http1 with no reference page of its own), and patch or minor bumps across the rest of the bare-* modules. No documented surface changes in these.

2026-09-10 — Pear 3.4.0

Pear 3.4.0 is a feature release on top of Pear 3.3.0. Nothing in it is breaking, but one change affects existing project layouts: pear stage no longer searches parent directories for a package.json, so a project staged from a subdirectory of its real root now needs --skip-package-json or <dir> pointed at the root. Otherwise the release adds blind peers and blind relays as native CLI commands, gives pear seed and pear cores more informative output, and moves next-step hints to stderr.

pear (CLI) — v3.4.0

  • Added: pear blind-peerstart [--trusted-peer <peer>] runs a blind peer server natively, identity prints this machine's key for an operator to authorize, and request <key> --peer <peer> asks a blind peer to seed something on demand. See Availability and blind peering.
  • Added: pear blind-relay start and the global --relay <key> flag—run a relay for peers that cannot hole-punch directly, and route a command's connections through one. See Peer-to-peer, demystified.
  • Added: pear seed --blind-peer <key> registers the drive being seeded with a blind peer in one flag, without wiring the blind-peering client directly.
  • Added: pear stage --skip-package-json stages a folder without a package.json.
  • Changed: pear stage no longer searches parent directories for a package.json—only <dir> itself is checked. Interactively it now prompts for typed STAGE confirmation when none is found; under --json or a non-interactive shell it fails immediately with ERR_INVALID_PROJECT_DIR instead.
  • Changed: pear cores prints a header row and a Size column with a total-size summary; the type column drops its [...] brackets.
  • Changed: pear seed's stats replace the standalone Semantic Version: row with App: <name>@<version> and add a Blobs Size: row.
  • Changed: next-step hints write to stderr instead of stdout—LINK=$(pear touch) no longer risks capturing one.

blind-peer, blind-peering, blind-relay — new to Pear's dependency tree

New bundled packages backing the commands above: blind-peer v3.12.6 (server), blind-peering v2.6.3 (client), blind-relay v1.6.1 (relay protocol). None carry a dedicated reference page—see Availability and blind peering and the pear blind-peer/pear blind-relay CLI reference instead.

pear-build — v1.3.0

  • Added: each --<platform-arch>-app flag accepts multiple values, so a standalone binary can ship alongside a desktop app under one architecture. Each artifact must be named after productName/name, or after a bin name when bin is an object.

pear-install — v1.3.0

  • Changed: pear install places applications in ~/Applications (macOS, and Linux where it or ~/AppImages exists), and binaries in %LOCALAPPDATA%\Programs\<app>\ on Windows or ~/.local/bin elsewhere—all user-level, no sudo.
  • Added: installing a binary on non-Windows appends ~/.local/bin to PATH by editing your shell config (export PATH=…, or fish_add_path for fish), skipping it when already present.
  • Fixed: --timeout <seconds> works, and an unset SHELL no longer breaks shell-config detection.

Internal — deps bump

hyperdht v6.33.2 (now a direct pin), pear-ipc v6.15.0. No documented surface changes.

2026-08-24 — Pear 3.3.0

Pear 3.3.0 is a feature release on top of Pear 3.2.0. Nothing in it is breaking, but one change affects scripts: pear gc cores now stops for typed confirmation before clearing a writable core. Otherwise the release is about making the CLI easier to follow—deployment commands suggest the next step, pear cores prints a readable table, and help text and per-field hints were rewritten across every command.

pear (CLI) — v3.3.0

  • Added: pear gc cores <name> clears cores by application name as well as by link, matching the name field of each staged application's package.json.
  • Added: pear gc cores --force|-f clears writable cores without the confirmation prompt.
  • Added: Next-step hintspear touch, pear stage, pear provision, and the pear multisig subcommands keys get, link, request, sign, verify, and commit print the command that usually comes next. Suppressed under --json. keys paths, keys add, keys remove, and keys list print no hint.
  • Changed: pear gc cores requires typed CLEAR confirmation before clearing any writable core. On 3.2.0 and earlier writable cores were silently skipped and the command never blocked. The prompt re-asks on any other input, so a piped stdin loops forever rather than failing—--force is mandatory for automation that clears cores it owns.
  • Changed: pear cores prints a sorted table with the application name and a [core]/[blobs] type column; name and blobs also appear in --json.
  • Changed: pear provision's Provisioned: block and pear multisig link's output no longer end with a pear seed line—it moved into the hint block.
  • Changed: command summaries, descriptions, argument and flag help text clarified across every command, and per-field hints added covering constraints, interactions, and failure modes. pear --menu displays those hints.
  • Changed: --sidecar is hidden from help and marked internal.
  • Fixed: pear stage prints the ERR_INVALID_PROJECT_DIR message instead of a stack trace.

pear-build — v1.2.0, v1.1.2

  • Added (v1.2.0): pear build --config [path] points at the project's pear.json—mandatory for mobile targets.
  • Added (v1.2.0): each --<platform-arch>-app source is checked for existence up front.
  • Changed (v1.1.2): expected errors are rethrown through pear-errors.

pear-runtime-updater — v3.4.0

  • Added: a skipUpdate option—an async predicate that, when it returns truthy, skips that update check.

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. Pear 3.3.0 bundles v6.33.1; v6.33.2 is the current release.

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.

bare-inspect — v3.1.5

  • Changed: inspect() includes an object's symbol-keyed properties in its output alongside the string keys.

bare-http1 — v4.5.8

  • Fixed: an agent socket leak when sockets half-close.

Internal — deps bump

bare-buffer v3.7.0, bare-url v2.5.2, hypercore-storage v3.2.1, paparam v1.13.0, pear-ipc v6.13.0, rocksdb-native v3.17.4, and udx-native v1.21.1. No documented surface changes.

2026-08-12 — Pear 3.2.0

Pear 3.2.0 is a feature release on top of Pear 3.1.0. Nothing in it is breaking: it adds an interactive command menu, lets pear seed exit once peers are synced, and tightens up pear gc and pear provision.

pear (CLI) — v3.2.0

  • Added: pear --menu launches an interactive, terminal-driven menu for browsing commands.
  • Added: pear seed --until-sync <key> exits once every specified peer has fully synced; repeat the flag to wait for more than one.
  • Changed: pear cores skips cores with zero contiguous length by default and reports each core's length; pass --all-cores to include the skipped ones.
  • Changed: pear gc cores's link argument is now required—it previously cleared every core in the store when omitted.
  • Changed: pear dump's dir argument is now optional—handy with --list, which already sets it to - for you.
  • Changed: pear seed's stats gain a semver field alongside driveLength.
  • Changed: --json error objects gain a code field alongside success and message.
  • Removed: pear gc sidecars, with no direct replacement.
  • Fixed: --json output now emits command errors as valid JSON instead of malformed output.
  • Fixed: pear seed --json's driveKey, discoveryKey, contentKey, and whoami are normalized to z32—previously raw hex.
  • Fixed: pear provision error messages.
  • Fixed: pear provision --dry-run no longer writes to the real <target-link>—it syncs into a throwaway local store instead.
  • Fixed: pear gc cores resolves content cores before clearing, and no longer reports skipped cores (writable, or already gone) as cleared.
  • Fixed: pear build shows help when --package is missing, instead of failing partway through.

2026-07-30 — Pear 3.1.0 and module updates

Pear 3.1.0 is the first feature release on top of Pear v3 (below). Nothing in it is breaking: it adds core inspection, speeds up vanity key generation, and fills in reporting gaps left by the v3 restructure.

pear (CLI) — v3.1.0

  • Added: pear cores lists an application's cores—one pear:// link per core, suffixed (writable) when this device holds the key pair—followed by a totals summary.
  • Added: pear touch --vanity generates vanity keys across multiple threads instead of one.
  • Changed: pear info now reports productName, version, upgrade, and verlink.
  • Changed: pear multisig asks you to confirm the password before it is used.
  • Fixed: pear info and pear changelog output corrections, and password prompts no longer ignore backspace.
  • Sidecar errors are now persisted rather than lost with the process—see Sidecar logs.

pear (CLI) — v3.0.1

  • Fixed: pear build resolves package-relative paths correctly.
  • Fixed: Linux runs check for libatomic up front instead of failing later.
  • Fixed: pear install guards against an unset SHELL.

pear-runtime-updater — v3.3.0

  • Added: a network monitor, so the updater reacts to connectivity changes.
  • Fixed: errors raised when closing during an update, or immediately before one started.

pear-build — v1.1.1

  • Fixed: package.json is read and parsed directly instead of via require, which fixes package-relative resolution during pear build.
  • Added: test coverage for win32-arm64.

pear-install — v1.2.2, v1.2.1

  • Fixed (v1.2.2): pear install guards against an unset SHELL when detecting your shell config.
  • Added (v1.2.1): Node 20 and 21 support, and --timeout <seconds> now works as documented.

Hypercore, Hyperdrive, HyperDHT, and Corestore also shipped updates around this time—see Bare's release overview for those building-block/helper-module changes.

2026-07 — Pear v3

Pear v3 completes the split announced in Pear Evolution: the runtime moves out of the CLI and into the embeddable Pear OTA (pear-runtime) library, and the CLI focuses on deployment and installation.

pear (CLI) — v3

  • Breaking: pear run removed. Launch applications by embedding Pear OTA instead—see Migrate from pear run to Pear OTA. Running it now exits with pear run has been removed.
  • Breaking: pear release removed. The single-key release pointer is replaced by quorum cosigning—use pear provision + pear multisig.
  • Breaking: pear presets, pear shift, and pear drop removed. For resetting an app's storage, see Manage installed applications.
  • Breaking: the ambient global.Pear API is gone with pear run. The Pear API page is retained for reference only.
  • Breaking: --no-ask (all commands), pear stage --compact, and pear sidecar --mem/--key flags removed; pear data slims down to dht and multisig subcommands.
  • Breaking: pear://<alias> shorthand links removed. Refer to applications by their full pear://<key> link.
  • Added: pear install <link> installs applications from peers directly into the OS application folder (provided by pear-install).
  • Added: pear multisig keys paths, pear info --multisig, pear sidecar shutdown|inspect, and pear gc cores [link].
  • Changed: pear build is now provided by the standalone pear-build module.
  • Changed: pear seed reports whoami and drive length, encodes all keys as z32, and cleans up its colored output.
  • Fixed: pear stage --truncate, first-run pear dump failures, and several pear seed edge cases.

pear-runtime (Pear OTA) — v1.3.1

  • The embeddable OTA-update library is now branded Pear OTA in these docs; the package name stays pear-runtime.
  • Constructor accepts store + swarm (supply your own Corestore/Hyperswarm, together), storage, delay, and bundled options—see the Options reference.
  • PearRuntime.run() workers started from a Bare process run as Bare threads; thread workers do not expose IPC.stdin/stdout/stderr.

See also

On this page