Pear loads applications remotely from peers and allows anyone to create and share applications with peers.
Pear is an installable Peer-to-Peer (P2P) Runtime, Development & Deployment platform.
Build, share & extend unstoppable, zero-infrastructure P2P applications for Mobile, Desktop & Terminal.
Welcome to the Internet of Peers
– Holepunch, the P2P Company
- API - Application-Programming-Interface
- CLI - Command-Line-Interface
- link - a
pear://link, afile://link or an absolute/relative dir path - P2P - Peer-to-Peer
Throughout the documentation, indications of stability are provided. Some modules are well-established and used widely, making them highly unlikely to ever change. Other modules may be new, experimental, or known to have risks associated with their use.
The following stability indices have been used:
| Stability | Description |
|---|---|
| stable | Unlikely to change or be removed in the foreseeable future |
| experimental | New, untested, or has known issues |
| deprecated | Being removed or replaced in the future |
| unstable | May change or be removed without warning |
Peer-to-Peer applications built on, deployed with, running on Pear.
- Keet: A peer-to-peer chat and video-conferencing application with end-to-end encryption.
Pear is a native point-to-point peer-to-peer capable platform that consists of a runtime binary, an API, userland modules, a command-line interface, an on-demand daemon and an application shell to provide the capabilities to develop & deploy production P2P applications. With JavaScript and beyond.
Pear's runtime binary is built on Bare, a small and modular JavaScript runtime for desktop and mobile. Like Node.js, it provides an asynchronous, event-driven architecture for writing applications in the lingua franca of modern software. Unlike Node.js, embedding and cross-device are supported as core use cases, aiming to run just as well on mobile as desktop.
- Pear CLI
- Pear Configuration
- Pear API
- Bare API
- Templates
- Node.js Compatability
- Recommended Practices
- Troubleshooting
- Frequently Asked Questions
- Migration
Guides on using Pear Runtime to build and share peer-to-peer applications.
- Getting Started
- Starting a Pear Desktop Project
- Making a Pear Desktop Application
- Starting a Pear Terminal Project
- Making a Pear Terminal Application
- Sharing a Pear Application
- Releasing a Pear Application
- Making a Bare Mobile Application
- Creating a
pear initTemplate
Collection of How-tos using the essential peer-to-peer building-blocks in Pear applications.
- How to connect two peers by key with HyperDHT
- How to connect to many peers by topic with Hyperswarm
- How to replicate and persist with Hypercore
- How to work with many Hypercores using Corestore
- How to share append-only databases with Hyperbee
- How to create a full peer-to-peer filesystem with Hyperdrive
The Pear global API is minimal and not intended as a standard library.
Application & Integration libraries are supplied via installable modules prefixed with pear-.
Pear modules related directly to application environment.
| Module | Description | Systems | Stability |
|---|---|---|---|
| pear-crasher | Uncaught exceptions & uncaught rejections crash logger | stable | |
| pear-message | Send inter-app pattern-matched object messages | stable | |
| pear-messages | Receive object messages that match a given object pattern | stable | |
| pear-pipe | Parent-app-connected pipe, the other end of pear-run pipe | stable | |
| pear-run | Run Pear child app by link. Returns a pipe to the child pipe | stable | |
| pear-updates | Receive platform and application update notifications | stable | |
| pear-user-dirs | Get the path of user-specific directories | stable | |
| pear-versions | Platform, Application and Runtime versions | stable | |
| pear-wakeups | Receive wakeup events, including link clicks external to app | stable |
Pear modules that supply User Interface runtime capabilities.
| Module | Description | Systems | Stability |
|---|---|---|---|
| pear-electron | Pear User-Interface Library for Electron" | stable | |
| pear-bridge | Local HTTP bridge for pear-electron applications | stable |
Pear modules for general usage, including applications per case.
| Module | Description | Systems | Stability |
|---|---|---|---|
| pear-drop | Drop data, including application reset | stable | |
| pear-dump | Synchronize files from link to dir peer-to-peer or from-disk | stable | |
| pear-gracedown | Pear graceful closer. For use with pipe.autoexit = false |
stable | |
| pear-info | Read Pear project information by link | stable | |
| pear-link | Parser-Serializer for pear:// links. Includes alias resolution |
stable | |
| pear-opwait | Pear operation stream promise wrapper | stable | |
| pear-release | Set application production release version length | stable | |
| pear-seed | Seed or reseed a Pear app drive by link | stable | |
| pear-stage | Synchronize from-disk to app drive peer-to-peer | stable | |
| pear-stamp | Interleave locals into a template, sync and stream | stable |
Pear modules to assist with developing & debugging
| Module | Description | Systems | Stability |
|---|---|---|---|
| pear-inspect | Securely enable remote debugging protocol over Hyperswarm | stable | |
| pear-hotmods | For pear-electron UI apps. Frontend framework-agnostic live-reload |
stable |
Pear modules for runtime integrations. Such as pear-electron.
| Module | Description | Systems | Stability |
|---|---|---|---|
| pear-appdrive | Read-only Hyperdrive API subset interface for application drives | stable | |
| pear-aliases | List of aliases for pear://<alias> links |
stable | |
| pear-api | global.Pear API class | stable | |
| pear-changelog | Changelog parsing and diffing | stable | |
| pear-constants | Shared Pear constants | stable | |
| pear-cmd | Command parser & definitions | stable | |
| pear-errors | Shared Pear error types | stable | |
| pear-gunk | Shared builtins, overrides & linker mappings | unstable | |
| pear-ipc | Interprocess Communication library | stable | |
| pear-ref | IO handle reference counter & tracker | stable | |
| pear-rti | Runtime Information state bootstrap for API building | stable | |
| pear-state | Shared state structure & capabilities | stable | |
| pear-terminal | Terminal User Interface library | stable | |
| pear-tryboot | Used with pear-ipc, tries to boot sidecar on connect failure |
stable |
Modules that supply point-to-point peer-to-peer connection and storage capabilities.
The essential building-blocks for building powerful P2P applications using Pear.
| Name | Description | Systems | Stability |
|---|---|---|---|
| hypercore | A distributed, secure append-only log for creating fast, scalable P2P applications | stable | |
| hyperbee | An append-only B-tree running on a Hypercore. Allows sorted iteration and more | stable | |
| hyperdrive | A secure, real-time, efficient distributed P2P file-system | stable | |
| autobase | A "virtual Hypercore" layer over many Hypercores owned by many different peers | stable | |
| hyperdht | The Distributed Hash Table (DHT) powering Hyperswarm | stable | |
| hyperswarm | A high-level API for finding and connecting to peers by topic | stable |
Helper modules can be used together with the building-blocks to create cutting-edge P2P tools and application-modules.
| Name | Description | Systems | Stability |
|---|---|---|---|
| corestore | A Hypercore factory that simplifiest managing Hypercore collections | stable | |
| localdrive | A file system interoperable with Hyperdrive | stable | |
| mirror-drive | Mirror between a Hyperdrive and/or Localdrive | stable | |
| @hyperswarm/secret-stream | Securely create connections between peers in a Hyperswarm | stable | |
| compact-encoding | Binary encoding schemes for efficient parser-serializers. | stable | |
| protomux | Multiplex multiple message oriented protocols over a stream | stable |
Pear's native runtime is Bare. The Bare global API is minimal and not intended as a standard library.
Standard runtime functionality is provided via a installable modules. prefixed with bare-.
| Module | Description | Systems | Stability |
|---|---|---|---|
| bare-abort | Cause abnormal program termination and generate a crash report | stable | |
| bare-ansi-escapes | Parse and produce ANSI escape sequences | stable | |
| bare-assert | Assertion library for JavaScript | stable | |
| bare-atomics | Native synchronization primitives for JavaScript | stable | |
| bare-buffer | Native buffers for JavaScript | stable | |
| bare-bundle | Application bundle format for JavaScript | stable | |
| bare-channel | Inter-thread messaging for JavaScript | stable | |
| bare-console | WHATWG debugging console for JavaScript | stable | |
| bare-crypto | Cryptographic primitives for JavaScript | stable | |
| bare-daemon | Create and manage daemon processes in JavaScript | stable | |
| bare-dgram | Native UDP for JavaScript | stable | |
| bare-dns | Domain name resolution for JavaScript | stable | |
| bare-encoding | WHATWG text encoding interfaces for JavaScript | stable | |
| bare-env | Environment variable support for JavaScript | stable | |
| bare-events | Event emitters for JavaScript | stable | |
| bare-fetch | WHATWG Fetch implementation for Bare | stable | |
| bare-form-data | Form data support for Bare | stable | |
| bare-format | String formatting for JavaScript | stable | |
| bare-fs | Native file system for JavaScript | stable | |
| bare-hrtime | High-resolution timers for JavaScript | stable | |
| bare-http1 | HTTP/1 library for JavaScript | stable | |
| bare-https | HTTPS library for JavaScript | stable | |
| bare-inspect | Inspect objects as strings for debugging | stable | |
| bare-inspector | V8 inspector support for Bare | stable | |
| bare-ipc | Lightweight pipe-based IPC for Bare | stable | |
| bare-logger | Low-level logger for Bare with system log integration | stable | |
| bare-module | Module support for JavaScript | stable | |
| bare-os | Operating system utilities for JavaScript | stable | |
| bare-pack | Bundle packing for Bare | stable | |
| bare-path | Path manipulation library for JavaScript | stable | |
| bare-performance | Performance monitoring for Bare | stable | |
| bare-pipe | Native I/O pipes for JavaScript | stable | |
| bare-queue-microtask | Microtask queuing for Bare | stable | |
| bare-readline | Line editing for interactive CLIs with command history | stable | |
| bare-realm | Realm support for Bare | stable | |
| bare-repl | Read-Evaluate-Print-Loop environment for JavaScript | stable | |
| bare-rpc | https://github.com/holepunchto/librpc ABI compatible RPC for Bare | stable | |
| bare-semver | Minimal semantic versioning library for Bare | stable | |
| bare-signals | Native signal handling for JavaScript | stable | |
| bare-stream | Streaming data for JavaScript | stable | |
| bare-structured-clone | Structured cloning algorithm for JavaScript | stable | |
| bare-subprocess | Native process spawning for JavaScript | stable | |
| bare-tcp | Native TCP sockets for JavaScript | stable | |
| bare-timers | Native timers for JavaScript | stable | |
| bare-tls | Transport Layer Security (TLS) streams for JavaScript | stable | |
| bare-tty | Native TTY streams for JavaScript | stable | |
| bare-type | Cross-realm type predicates for Bare | stable | |
| bare-unpack | Bundle unpacking for Bare | stable | |
| bare-url | WHATWG URL implementation for JavaScript | stable | |
| bare-worker | Higher-level worker threads for JavaScript | stable | |
| bare-ws | WebSocket library for JavaScript | stable | |
| bare-zlib | Stream-based zlib bindings for JavaScript | stable | |
| bare-zmq | Low-level ZeroMQ bindings for JavaScript | stable |
Compatibility modules for Node.js builtins in Bare can be found in bare-node.
Beyond the Pear CLI these ecosystem P2P CLI tools are additionally useful for day-to-day development and operations.
| Name | Description | Systems | Stability |
|---|---|---|---|
| Hypershell | A CLI to create and connect to P2P E2E encrypted shells | stable | |
| Hypertele | A swiss-knife proxy powered by hyperdht |
stable | |
| Hyperbeam | A one-to-one and end-to-end encrypted internet pipe | stable | |
| Hyperssh | A CLI to run SSH over the DHT. | stable | |
| Drives | CLI that interacts with hyperdrive & localdrive |
stable |