LogoPear Docs

Command Line Interface (CLI)

Showing every release, with badges on the differences.

Pear CLI: stage, seed, build, install, and day-to-day development commands.

stable

The Command Line Interface is the primary interface for Pear Development.

New to the CLI? Run pear --menu (Pear 3.2.0+) to browse every command from a filterable list and fill in its flags as a form, instead of memorizing them. See Browse commands with the interactive menu.

This page tracks Pear 3.3.0. Several commands were removed in v3—most notably pear run, which is replaced by embedding the Pear OTA (pear-runtime) library. Removed commands are kept below with a badge and migration guidance.

Anything a release adds or removes carries an inline badge—New in 3.1.0 or Removed in 3.1.0—so you can tell whether your build has it. Run pear versions to check what you are on, and see the Release Overview for the full history.

Install & upgrade

The fastest way to install Pear is the installer at install.pears.com—it also works via npx if you'd rather go through npm:

curl https://install.pears.com/pear.sh | sh
irm https://install.pears.com/pear.ps1 | iex
npx pear
docker run -it --rm tetherto/pear

This bootstraps Pear onto the system. Complete the setup by following the PATH instructions the installer prints, then run pear directly. To install it globally through npm instead, use npm i -g pear—and every pear <cmd> also works as npx pear <cmd>, which is handy for running commands from a directory other than the one you installed into. npm and Node.js are only the delivery mechanism: after install, pear runs on Bare, not Node.

The tetherto/pear Docker image runs Pear inside Ubuntu 24.04 with pear and pear-install ready to go—a low-risk way to try out Pear apps without installing anything on the host.

Moving from Pear v2 to v3

Run npx pear to move onto the v3 platform. From v3 on, the CLI is a standalone binary that keeps itself up to date over the air through Pear OTA—so you no longer reinstall from npm for platform updates. Several commands were removed in v3 (see the removed badges below); if your application relied on the removed pear run runtime or the global Pear API, follow Migrate from pear run to Pear OTA and review the Release Overview.

Interactive menu

New in 3.2.0 Run pear --menu for an interactive, terminal-driven menu that walks through the available commands instead of remembering flags—handy when exploring the CLI for the first time. It requires an interactive terminal (TTY); running it from a script or a non-interactive shell exits immediately with pear --menu requires an interactive terminal. See Browse commands with the interactive menu for a walkthrough.

New in 3.3.0 Every argument and flag now carries a per-field hint covering its constraints, its interactions with other flags, and how it fails. The menu surfaces those hints as you move through a command's fields; pear help <command> does not show them.

Next-step hints

New in 3.3.0 The deployment commands—pear touch, pear stage, pear provision, and most pear multisig subcommands (keys get, link, request, sign, verify, commit—but not keys paths, keys add, keys remove, or keys list)—print a short hint block after their result, naming the command that usually comes next. A pear stage that wrote, for example, suggests seeding the staged version and provisioning it for preview.

Hints are advisory terminal output, not results. They are written after the command's own output, and they are suppressed under --json, so nothing about them affects a script that parses JSON.

Two commands moved existing output into a hint rather than adding one, which does change their default human-readable output:

  • pear provision's Provisioned: block no longer ends with a Seed with: heading and a pear seed <link> line.
  • pear multisig link's output no longer ends with a seed: pear seed <link> line.

In both cases the same pear seed command now appears in the hint block below the result instead.

Scripting with --json

Most commands accept --json—use it for anything that parses a command's result. The default, human-readable output is meant for a person at a terminal and can change wording or formatting between releases; the JSON shape is the stable contract to script against.

--json output is newline-delimited JSON (NDJSON): one object per line, each shaped {"cmd", "tag", "data"}. Intermediate tags are command-specific—pear changelog --json tags each release "changelog", for example—so filter on tag rather than assuming a fixed number of lines.

Most commands close the stream with a tag: "final" object whose data carries success alongside any result fields, as pear touch --json does with {"success": true, "key": "…", "link": "pear://…"}. Two exceptions to code defensively around: some commands emit no final object at all—pear versions --json emits only its platform, runtimes, libraries, and modules tags—and some emit a bare final with no data, as pear multisig keys list --json does. Treat a missing success as "no status reported" rather than as failure.

pear touch is the practical exception: its default output is already nothing but the bare pear://<key> link on its own line, so it's safe to consume directly without --json—for example LINK=$(pear touch).

For commands that take a subcommand, where you put --json matters—and it is not the same for all of them, because each command declares the flag at a different level of its tree:

CommandPositionWorksRejected
pear data, pear gcbefore the subcommandpear data --json dhtpear data dht --json
pear multisigafter the subcommandpear multisig keys list --jsonpear multisig --json keys list

The wrong position is rejected with ✖ Unrecognized Flag: --json, so a script that guesses will fail loudly rather than silently emit human-readable text.

New in 3.2.0 A command that fails under --json emits {"cmd", "tag": "error", "data": {"success": false, "code", "message"}} instead of human-readable error text—code is new in 3.2.0. On 3.1.0 and earlier, --json errors could print malformed (non-JSON) output.

Building and staging

Generate a link, assemble a deployment folder, and sync it to the network—in that order, since build and stage both need a link to work with.

pear touch [flags]

Creates a Pear link. Pear links hold a key, this is the basis for application discovery.

Default output is just the pear://<key> link on its own line—safe to capture directly in a script (LINK=$(pear touch)) without needing --json.

New in 3.3.0 A next-step hint follows the link, summarizing which deployment path to take—stage for local and development checks, provision for prerelease and QA, multisig for production—and suggesting pear stage --dry-run <link> <dir>. It is written after the link and suppressed under --json, so LINK=$(pear touch) still captures just the link.

  --json              Newline delimited JSON output
  --vanity <vanity>   Generate a link starting with this z32 prefix
  --help|-h           Show help

--vanity mines for a key whose z32-encoded form starts with the given prefix. It works by generating keys until one starts with what you asked for, so the value must contain only z32 characters—anything else is rejected with Vanity key must contain only z32 characters—and generation slows sharply as the prefix grows. Prefixes longer than four characters print a warning, and because it goes to stderr rather than stdout, LINK=$(pear touch --vanity pear) still captures just the link. New in 3.1.0 Not available on 3.0.1 or earlier.

pear build [flags]

Create a project deployment folder.

Assembles per-OS electron-forge makes—one per target architecture—into the multi-architecture deployment directory that pear stage reads from disk: a package.json plus a by-arch/<platform-arch>/app/ tree.

Each make runs on its own OS, so transfer the per-platform outputs to one machine first, then pass each via its --<platform-arch>-app flag. Run pear build from outside the application source tree (or point --target at a sibling folder) so the deployment output is never re-staged into itself—see stage size increases. If you omit --target, the directory is auto-named <name>-<version> from package.json.

As of Pear v3, pear build is provided by the standalone pear-build module and integrated into the CLI.

New in 3.2.0 Running pear build without --package now prints this command's help instead of failing partway through the build.

New in 3.3.0 --config [path] points pear build at the project's pear.json. It is mandatory for mobile targets (--ios-*, --android-arm64). Added by pear-build v1.2.0, which ships with Pear 3.3.0; the same release also checks up front that each --<platform-arch>-app source actually exists.

  --package [path]               Path to project package.json
  --target [path]                Target build dir
  --config [path]                Path to project pear.json (mandatory for mobile)
  --darwin-arm64-app [path]      Path to Mac ARM64 app
  --darwin-x64-app [path]        Path to Mac x64 app
  --linux-arm64-app [path]       Path to Linux ARM64 app
  --linux-x64-app [path]         Path to Linux x64 app
  --win32-x64-app [path]         Path to Windows x64 app
  --win32-arm64-app [path]       Path to Windows ARM64 app
  --ios-arm64 [path]             Path to iOS ARM64 folder (ota bundle and assets)
  --ios-arm64-simulator [path]   Path to iOS ARM64-Simulator folder (ota bundle and assets)
  --ios-x64-simulator [path]     Path to iOS x64-Simulator folder (ota bundle and assets)
  --android-arm64 [path]         Path to Android ARM64 folder (ota bundle and assets)
  --json                         Newline delimited JSON output
  --help|-h                      Show help

For the full release walkthrough, see Deploy a Pear desktop app and Build desktop distributables.

Synchronize local changes to pear hypercores.

To generate a link, see pear touch.

Pear links hold a key, this is the basis for application discovery.

Outputs diff information and project link.

Each time new changes are staged, the length will increase. This change can be replicated to any peer who know the link and is connected. If they run pear info <link>, they will see the length update even if the application is not being seeded. Connections can potentially linger after seeding an application but will eventually close.

  --dry-run|-d       Execute a stage without writing
  --ignore <paths>   Don't stage these comma-separated paths
  --purge            Also delete already-staged files that now match the ignore list
  --only <paths>     Only stage these comma-separated paths
  --truncate <n>     Advanced. Truncate the project to this version length. Destructive — later versions are dropped
  --json             Newline delimited JSON output
  --help|-h          Show help

New in 3.3.0 --dry-run does not guard --truncate. If both are passed, the drive is truncated for real before any dry-run check runs.

--ignore supports glob patterns (*, **) and a leading ! to un-ignore. --only does not—it matches by exact path or directory prefix. Both add to rather than replace the corresponding list in pear.json, and --purge also switches on automatically when pear.json sets stage.purge.

<dir> defaults to the directory you run the command from. If that directory has no package.json, Pear searches upward through its parents for one. Passing a versioned verlink as <link> is accepted, but only its key is used—staging always targets the current head and ignores the version segment. --truncate's n is the length segment of a verlink (pear://<fork>.<length>.<key>).

New in 3.3.0 An invalid project directory reports ERR_INVALID_PROJECT_DIR as a plain error message. On 3.2.0 and earlier it printed a full stack trace.

A stage that wrote ends with a next-step hint suggesting pear seed for the staged version, and pear touch plus pear provision --dry-run for a preview build. A --dry-run stage instead suggests re-running without the flag.

Production releases

Advance a staged build to a quorum-signed production release, replacing the single-key pear release command removed in v3.

Pre-production block sync.

Synchronizes blocks from a source link to a pre-production target link. The target can then be multi-signed against a production link. Use pear touch to generate the target link first.

Arguments:
  <source-verlink>       Versioned source link
  <target-link>          Target link to sync to, as generated by pear touch
  <production-verlink>   Versioned production link to sync against

Flags:
  --dry-run|-d           Execute provision to a disposable target
  --json                 Newline delimited JSON output
  --help|-h              Show help

Both <source-verlink> and <production-verlink> must carry a version—pear://<fork>.<length>.<key>. A bare link is rejected, because it resolves to the latest content instead of pinning one version.

New in 3.2.0 --dry-run now genuinely writes nothing to <target-link>—it downloads and diffs against a temporary local drive instead, never validates or joins the swarm for the real target, and deletes the temporary drive afterward. On 3.1.0 and earlier, a dry run still validated <target-link> and wrote to it for real, despite the flag's description.

A successful provision prints the resulting Verlink and Hashlink, then a next-step hint suggesting pear seed. New in 3.3.0 On 3.2.0 and earlier the pear seed <link> command was part of the Provisioned: block itself, under a Seed with: heading; from 3.3.0 it moved into the hint block and is suppressed under --json.

pear multisig [command]

Production signing coordination. Gate production releases behind a quorum of signing keys instead of a single machine's key. Since Pear v3 removed the single-key pear release command, quorum multisig (together with pear provision) is the path to production. See Set up multisig and Sign with multisig for the end-to-end flow.

CommandDescription
keys get [name=default]Get a signing key, initializing it if needed (--secret also prints the private key)
keys paths [name=default]Print paths to the public & private key files
keys listList signing keys
keys add <name> <public-key> [private-key]Import a signing keypair or add a known public key
keys remove <name>Remove a signing key—permanent, with no confirmation and no backup
linkPrint the project multisig link (derived from the multisig field in pear.json)
request <verlink>Create a multisig request from a versioned source link
sign <request> [name=default]Sign a multisig request with a local signing key
verify <source-link> <request> [...responses]Verify the request and responses (commit dry-run)
commit <source-link> <request> [...responses]Apply signatures to sync the source drive to the multisig drive (go live)
  --config [./pear.json]                 Path to the project's pear.json. Defaults to ./pear.json
  --peer-update-timeout <milliseconds>   How long to wait for peers to update, in milliseconds
  --force                                Skip sanity checks (request)
  --vanity <vanity>                      Generate a link starting with this z32 prefix (link)
  --json                                 Newline delimited JSON output
  --help|-h                              Show help

--config points at a file that must carry a multisig field with publicKeys, quorum, and namespace—see Pear Application Configuration.

--peer-update-timeout defaults to 5000 milliseconds and only matters when --force is not set: it bounds the pre-commit checks that --force skips entirely. The wait for remote seeders after a commit takes no timeout at all and can block indefinitely—on any commit, not just the first—with Ctrl-C the only way out. --force skips verifying that the source drive's db and blobs cores are reachable and fully seeded at the requested version; without it, that step can block or fail when the source is poorly seeded.

sign's [name] selects the encrypted private key file created by keys get <name>, and signing prompts for the exact password used when that key was generated—there is no recovery if it is forgotten.

--vanity applies to the link subcommand only, deriving a multisig link whose key starts with the given prefix. New in 3.1.0 Not available on 3.0.1 or earlier.

A key <name> must match ^[\w-]+$—letters, numbers, hyphens, and underscores only. keys add's <public-key> must be z32-encoded, the same format keys get prints, whether passed as a literal string or as a path to a file holding one; passing the private key as a path keeps it out of shell history. keys paths prints its paths unconditionally and never checks that a key by that name was created. keys remove deletes both the public key file and, when present, the private key file.

New in 3.3.0 keys get, link, request, sign, verify, and commit end with a next-step hint naming the command that follows them in the signing flow. keys paths, keys add, keys remove, and keys list print no hint. link's output no longer carries its own trailing seed: pear seed <link> line—that moved into the hint block.

removed

Deprecated in Pear v2.6.5, removed as of Pear v3.

The single-key release pointer has been replaced by quorum-based production releases. Use pear provision to block-sync a pre-production target and pear multisig to cosign it onto a production link.

Distributing and running apps

Seed a link so peers can fetch it, then install the app it points to. pear run launched an app directly from a link in v2; apps now embed Pear OTA instead.

Announce a project link on the network and serve its blocks to peers. Runs until you exit, or until every --until-sync peer has fully synced.

Seeding will sparsely replicate the application. This means the entire history of the link is available, but most likely only the most recent version will be replicated.

  --no-tty                          Print plain log lines instead of the live terminal UI
  --until-sync <key>                Exit once this peer has synced. Pass multiple flags to wait for more peers
  --stats-interval <milliseconds>   Stats refresh interval in milliseconds
  --json                            Newline delimited JSON output
  --help|-h                         Show help

<link> accepts a versioned verlink, but only its key is used—pear seed always replicates the full, latest history and is never pinned to that version. --stats-interval defaults to 500 milliseconds with the live UI on, or 3000 milliseconds under --no-tty.

New in 3.2.0 --until-sync <key> takes a peer's public key (z32) and exits automatically once every specified peer has fully synced—pass the flag multiple times to wait for more than one peer. Useful for scripting a seed session that should end on its own instead of running indefinitely. The live view lists Seeding, Drive Key, Drive Length, Discovery Key, Content Key, Firewalled, NAT Type, Whoami and Network above an unlabelled log; the key to pass here is the one printed after each peer join or peer sync line.

New in 3.2.0 The seed session's stats (terminal display and --json stats tag) gained a semver field alongside driveLength. Also fixed: driveKey, discoveryKey, contentKey, and whoami in --json output are now z32-encoded strings, matching every other Pear key—on 3.1.0 and earlier they were raw hex.

Install a Pear application—or the Pear platform itself—from a pear:// link.

pear install pear://<key> installs any application built with pear build, pulling it from the swarm and wiring it up locally so it can be launched and kept up to date over the air. It works for both applications and binaries. Installs go directly into the OS application folder.

  --only <paths>          Advanced. Filter by app filenames
  --timeout <seconds>     Advanced. Override network timeout (30s)
  --to <dir>              Advanced. Override install target directory
  --dht-bootstrap <nodes> Advanced. Custom DHT bootstrap
  --json                  Newline delimited JSON output
  --help|-h               Show help

As of Pear v3, pear install is part of the Pear CLI, provided by the standalone pear-install module. For example, install an application peer-to-peer with:

pear install pear://<key>

See Storage and distribution for the install model and the direction described in Pear Evolution.

pear run [flags] <link|dir> [...app-args]

removed

Deprecated in Pear v2.6.5, removed as of Pear v3.

Running pear run now exits with:

pear run has been removed.
Use the pear-runtime module instead: https://www.npmjs.com/package/pear-runtime

Applications are now launched by embedding the Pear OTA (pear-runtime) library, which provides over-the-air peer-to-peer updates, application storage, and Bare workers. See Migrate from pear run to Pear OTA for the move.

Read-only lookups against a project, an installed app, or the local platform state—none of these write anything.

View project changelog

Supply a link to view an application's changelog, read from the CHANGELOG.md at its drive root. Any Pear app can ship one—see Publish a changelog for your app for the file format and how to stage it.

Shows the Pear platform changelog by default (no link).

  --max|-m <n=10>    Maximum number of entries to show
  --of <semver=^*>   Only show entries matching this semver range. Default: latest major
  --full             Show entire changelog
  --json             Newline delimited JSON output
  --help|-h          Show help

CHANGELOG.md must open with a header line (typically a # Title) followed by one release per ## <version> heading, newest first, where the first space-separated token of each heading is a SemVer version (a leading v is stripped). --of filters by that version, defaulting to the latest major; --full shows every entry. The parser is the pear-changelog module. To fetch the raw file instead, use pear dump pear://<key>/CHANGELOG.md.

Read project information. [dir] currently has no effect—pear info never reads it; it inspects the given link, or platform information when no link is given.

Supply a link to view application information.

Supply no argument to view platform information.

  --metadata       Print the project metadata
  --manifest       Print the app manifest
  --multisig       Print the multisig quorum and signing keys
  --key            Print the view key
  --json           Newline delimited JSON output
  --help|-h        Show help

--key, --metadata, and --multisig select sections: name any of them and only those print, in the order key, metadata, multisig. --manifest is not a selector—it prints the manifest and stops, so pairing it with --metadata or --multisig yields the manifest alone, and pairing it with --key still prints the key above it.

With --json, output arrives as three tagged objects before the closing final:

Tagdata
retrievingz32, onlyShowKey
keysproject, content, discovery
infolink, verlink, name, version, productName, upgrade

Filter on "tag": "info" for the manifest values and "tag": "keys" for the key triplet, rather than relying on ordering. verlink is the versioned pear://<fork>.<length>.<key> form and was added in 3.1.0.

Fixed in 3.1.0 On 3.0.1 and earlier, pear info and pear changelog can fail outright with ✖ Cannot read properties of undefined (reading 'key').

Synchronize files from a link to a directory.

To dump to stdout, use - in place of <dir>. New in 3.2.0 <dir> itself is now optional—handy with --list, which already sets it to - for you. On 3.1.0 and earlier, <dir> was required even when --list overrode it.

<link> can contain a path portion to dump a subset of the files for the Pear application. For example, to dump only the CHANGELOG.md from an application into a dump-dir directory run:

pear dump pear://<key>/CHANGELOG.md dump-dir/
  --dry-run|-d     Preview without writing any changes
  --checkout <n>   Dump the project as it was at this version length
  --only <paths>   Only dump these comma-separated paths
  --force|-f       Force overwrite existing files
  --list           List the paths inside the link instead of writing any files
  --no-prune       Keep destination files that are missing from the source
  --json           Newline delimited JSON output
  --help|-h        Show help

Pruning is on unless --no-prune is set, so a plain dump deletes anything in <dir> that is not at <link>. --only does not turn that off: paths it matches are still deleted from <dir> when they no longer exist at <link>. Add --no-prune alongside it to filter without removing anything. New in 3.3.0 On 3.2.0 and earlier this flag's help text claimed it implied --no-prune.

--force only matters when <dir> already holds files; an empty or not-yet-created <dir> never needs it. --dry-run and --no-prune have no effect when <dir> is - or --list is set—those modes only read and print, so there is nothing to skip writing or to delete. --checkout's n is the length segment of a verlink (pear://<fork>.<length>.<key>).

pear cores

List platform corestore cores.

New in 3.1.0 On 3.0.1 and earlier, pear cores fails with ✖ Unrecognized Argument at index 0 with value cores.

Lists the cores in the platform corestore, followed by a Total cores: <n> | Writable: <n> summary, or No cores when the store is empty.

New in 3.3.0 Output is a sorted, column-aligned table: application name, a [core]/[blobs] type column, the pear:// link, and the length/writable suffix. Rows are ordered named-first, then by name, then by drive, with a drive's [core] row ahead of its [blobs] row; a core with no application name renders -. On 3.2.0 and earlier the output is one plain line per core with no name and no type column.

myapp [core]  pear://<key> (length: 42, writable)
myapp [blobs] pear://<key> (length: 118, writable)
-     [core]  pear://<key> (length: 7)
Total cores: 3 | Writable: 2

The name column is padded to the widest name present and the type column to the width of [blobs]; every other gap is a single space.

New in 3.2.0 Cores with zero contiguous length are skipped by default and each row also reports the core's length—(length: <n>, writable) or (length: <n>). Pass --all-cores to include the skipped empty cores. "Empty" here means a contiguous length of zero—usually a core that was allocated and never written to, but also one holding only non-contiguous blocks. On 3.1.0, every core is listed regardless of length and the line only ever shows (writable).

  --all-cores   List all cores, including empty cores
  --json        Newline delimited JSON output
  --help|-h     Show help

With --json, each core is emitted as a "tag": "core" object carrying { link, writable } (plus length New in 3.2.0, and name, blobs, and drive New in 3.3.0drive is the metadata link a blobs core belongs to, and the core's own link otherwise), and the closing "tag": "final" object carries { count, writable }. Under --json the rows are emitted unsorted, as they are produced—the table ordering above is a terminal-output concern only.

Distinct from pear gc cores, which clears corestore cores rather than listing them.

pear data [flags] [command]

Explore the platform database.

The database contains metadata stored on this device used by the Pear runtime.

CommandsDescription
dhtDHT known-nodes cache
multisigMultisig records
--json      Newline delimited JSON output
--help|-h   Show help

Platform maintenance and diagnostics

Manage the background sidecar process, reclaim disk space, and check what's installed.

pear sidecar [command]

The Pear Sidecar is a local-running IPC server for corestore access.

This command instructs any existing sidecar process to shutdown and then becomes the sidecar.

CommandDescription
shutdownShut down the running sidecar
inspectEnable the running sidecar inspector
  --log-level <level>   Verbosity to log at — 0=off, 1=error, 2=info, or 3=trace
  --help|-h             Show help

Removed in 3.1.0 --log-labels, --log-fields, and --log-stacks were removed in 3.1.0; only --log-level remains. All three still work on 3.0.1 and earlier.

--log-level accepts either a number (03) or a name (OFF, ERR, INF, TRC, matched case-insensitively, so inf works too); it defaults to INF.

Persisted logs

New in 3.1.0 Log output is written to a file as well as the terminal, so sidecar errors and stack traces survive the process exiting—previously they were lost once it died.

  • Location: pear.log in the Pear platform directory.

  • Rotation: at 10 MB the current file is moved to pear.old.log, replacing any previous pear.old.log. Only those two files are ever kept.

  • Line format: the level padded to five characters, an ISO-8601 timestamp, the label in brackets, then the message:

    INF   2026-07-28T18:29:43.869Z [ sidecar ] - Sidecar Booted

    The terminal prints the same entry with the timestamp first (2026-07-28T18:29:43.869Z INF [ sidecar ] …), so parse the file rather than captured console output.

Entries above the active --log-level are dropped from both the file and the terminal, so raise the level before reproducing a fault you want captured.

pear gc [flags] [command]

Perform garbage collection and remove unused resources.

CommandsDescription
sidecars Removed in 3.2.0Clear running sidecars
cores <link|name>Clear the cores belonging to this link or app name

A core is a single append-only log in Pear's local corestore. pear gc cores deletes the blocks one core has stored on disk, freeing that space; the core itself stays in the corestore. It clears the link's metadata core first, then that core's content core if the first one cleared.

Removed in 3.2.0 pear gc sidecars is removed in 3.2.0, with no direct replacement. On 3.1.0 and earlier it clears any running sidecar process.

New in 3.2.0 pear gc cores's link argument becomes required (cores <link>)—on 3.1.0 and earlier it's optional, and omitting it clears every core in the store. Content cores are now resolved before clearing, and cores that were skipped (writable, or no longer in the corestore) are no longer reported as cleared.

  --force|-f    Clear writable cores without confirmation
  --json        Newline delimited JSON output
  --help|-h     Show help

Clearing by application name

New in 3.3.0 The argument accepts an application name as well as a pear:// link. Anything that does not start with pear:// is treated as a name and resolved against the corestore: Pear reads each metadata core's staged package.json and matches its name field. Names are not unique—if two staged applications share one, every matching application's cores are cleared. An unmatched name fails with No cores found with name <name> rather than clearing nothing silently.

Writable-core confirmation

New in 3.3.0 If any core in the resolved set is writable, pear gc cores now stops and demands typed confirmation before clearing anything:

⚠️  WARNING one or more cores of <link|name> are writable, clearing them cannot be undone. To confirm type "CLEAR"
Clear <link|name> cores? 

Only the literal uppercase CLEAR is accepted; anything else prints ✖ uppercase CLEAR to confirm. Pass --force (-f) to skip the prompt.

This changes scripted behavior. On 3.2.0 and earlier, a writable core was silently skipped and reported as such, so pear gc cores <link> never blocked. From 3.3.0 the same command waits on a prompt, and under --force it clears writable cores instead of skipping them. Add --force to any automation that clears cores it owns.

Answering the prompt with CLEAR has the same effect as --force: the writable cores are cleared, not skipped. A core the local corestore has never seen is skipped rather than treated as an error, and the output says which—Skipped clearing core ~ <link>. The core is writable or does not exist in the corestore. Writability is checked per link, on the metadata core, so a writable content core under a non-writable metadata core is skipped without ever raising the prompt.

pear versions

Output version information.

--modules|-m   Include module versions
--json         Newline delimited JSON output
--help|-h      Show help

--modules lists every package in Pear's own bundled dependencies (bare-*, hypercore-*, corestore, and so on)—not the dependencies of your project.

pear help [command]

View help for a command. With no argument, prints the full command overview.

Relatedly, running pear -v (no command) prints platform version information: the platform key as a versioned pear://<fork>.<length>.<key> link where available, plus the SemVer—or the dev root path on development installs. pear -v does not itself accept --json; for the machine-readable equivalent use pear versions --json instead.

Removed without a direct replacement

These four have no successor command—each is now rejected as an unrecognized command or argument rather than printing removal guidance.

pear presets [flags] [command]

removed

Deprecated in Pear v2.6.5, removed as of Pear v3.

Per-command default flags are no longer configurable through the CLI.

pear shift [flags] <source> <destination>

removed

Deprecated in Pear v2.6.5, removed as of Pear v3.

Moving user application storage between applications is no longer supported from the CLI.

pear drop [flags] [command]

removed

Deprecated in Pear v2.6.5, removed as of Pear v3.

pear drop was tied to the removed pear run model. See Manage installed applications for resetting application storage.

pear init

removed

pear init has been removed from the Pear CLI. Unlike pear run (which prints a dedicated removal message), init is no longer a recognized command, so it is rejected as an unknown argument—✖ Unrecognized Argument at index 0 with value init, followed by the top-level usage.

To scaffold a project, clone the official template instead—holepunchto/hello-pear-electron—and follow Start from the hello-pear-electron template.

See also

On this page