{"id":50894132,"url":"https://github.com/bigdestiny2/pearbrowser-desktop","last_synced_at":"2026-06-15T23:02:23.450Z","repository":{"id":352656358,"uuid":"1215957981","full_name":"bigdestiny2/pearbrowser-desktop","owner":"bigdestiny2","description":"The browser for the peer-to-peer web. macOS / Windows / Linux. Browse hyper://, run pear:// apps, publish your own sites — pinned 24/7 on the HiveRelay backbone. window.pear.swarm.v1 gives pages direct Hyperswarm access. Apache-2.0.","archived":false,"fork":false,"pushed_at":"2026-06-09T19:56:43.000Z","size":1261,"stargazers_count":1,"open_issues_count":1,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-09T21:21:46.304Z","etag":null,"topics":["browser","decentralized","holepunch","hyperdrive","hyperswarm","p2p","pear-runtime","peer-to-peer"],"latest_commit_sha":null,"homepage":"https://github.com/bigdestiny2/pearbrowser-desktop","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bigdestiny2.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-20T12:26:39.000Z","updated_at":"2026-06-09T19:03:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/bigdestiny2/pearbrowser-desktop","commit_stats":null,"previous_names":["bigdestiny2/pearbrowser-desktop"],"tags_count":11,"template":false,"template_full_name":null,"purl":"pkg:github/bigdestiny2/pearbrowser-desktop","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bigdestiny2%2Fpearbrowser-desktop","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bigdestiny2%2Fpearbrowser-desktop/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bigdestiny2%2Fpearbrowser-desktop/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bigdestiny2%2Fpearbrowser-desktop/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bigdestiny2","download_url":"https://codeload.github.com/bigdestiny2/pearbrowser-desktop/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bigdestiny2%2Fpearbrowser-desktop/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34383468,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-15T02:00:07.085Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["browser","decentralized","holepunch","hyperdrive","hyperswarm","p2p","pear-runtime","peer-to-peer"],"created_at":"2026-06-15T23:02:21.910Z","updated_at":"2026-06-15T23:02:23.442Z","avatar_url":"https://github.com/bigdestiny2.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PearBrowser Desktop\n\nA peer-to-peer browser, app store, and site publisher for macOS, Windows, and Linux, built on the Pear Runtime.\n\n**No accounts. No DNS. No servers.** Sites are Hyperdrives, addressed by public key, pinned 24/7 on the [HiveRelay](https://github.com/bigdestiny2/P2P-Hiverelay) backbone. The publisher's laptop being offline doesn't matter — the relays carry the bytes.\n\n**Current release:** `v0.4.5` · production length `5440` · pinned on 5+ relays · 365-day TTL · HiveRelay backbone `v0.8.12`.\n\n## Run it\n\n```sh\nnpm i -g pear\npear\npear run pear://tco5k7h38uoxatedp1wongdbhjxow1x7jiwm3t1i9cujbebhsbty\n```\n\nOne install, one key, works on all three desktop platforms — Pear downloads the matching native runtime on first launch. The key above is **content-addressed and stable**: when we ship a new release, the same key starts serving the new version. Existing installs hot-sync on next launch.\n\n\u003e **Heads up:** `pear run` is officially deprecated in Pear runtime `v2.4.0` (\"use `pear-runtime` module instead for embeddable runtime with P2P OTA updates\"). It still works today; the migration path is to ship as a signed native installer (see [Distribution](#distribution) below). The `pear run pear://...` command above continues to work for the foreseeable future.\n\n## What's inside\n\n### Browse (v0.4.x)\n- Multi-tab browsing with proper keyboard shortcuts: `⌘T` new tab · `⌘W` close · `⌘L` focus URL bar · `⌘1`–`⌘9` switch · `⌘R` reload · `⌘⇧I` devtools\n- `hyper://` URL bar accepting hex (64-char) or z-base-32 (52-char) keys\n- Localhost HTTP proxy resolves Hyperdrive content for the Chromium engine\n- Per-tab back/forward history; tabs persist across launches and survive panel switches\n- URL bar autocomplete from your bookmarks + history Hyperbees (↑↓ to navigate, Enter to pick)\n- \"About this site\" panel (ⓘ button): drive key in hex + z-base-32 with copy buttons, scheme + path, one-click bookmark toggle\n\n### Apps\n- Paste any `pear://` link → opens in its own isolated window\n- Load a decentralized catalog Hyperdrive → install / launch / uninstall apps\n- Default catalog auto-loads on first Apps-tab visit (`hyper://0c35d12fd9b1…/` — featuring PearBrowser, HiveRelay, P2P Builders)\n- Featured apps: **Keet** · **PearPass** · **[HiveWorm](https://github.com/bigdestiny2/hiveworm)** (a multiplayer life-sim that uses `window.pear.swarm.v1` directly)\n\n### Publish (P2P Sites)\n- Block editor: heading, paragraph, image, link, list, quote, code, raw HTML/CSS/JS, divider\n- One-click publish + auto-pin to HiveRelay\n- Replication confirmation — the editor only reports \"published\" after `waitForDurable()` confirms at least one relay has actually replicated the drive\n- Drive identified by keyed-BLAKE2b discoveryKey (fixed in HiveRelay 0.8.0; we ship `0.8.12`)\n- Ed25519-signed unseed for revocation\n\n### Library\n- Bookmarks + history stored in a local Hyperbee (private, local-only by default)\n- Cross-launch persistence; powers the URL-bar autocomplete\n\n### Identity (BIP-39)\n- 12-word backup phrase + Restore-from-phrase (\"Moving to a new device?\" framing in Settings)\n- Per-app sub-keys derived from your root identity — every site you grant login to sees a different `appPubkey`\n- Apps that have logged you in are listed in Settings → Connected Apps; revocable individually or bulk\n\n### Login consent\n- `window.pear.login()` from any `hyper://` page → modal with per-scope toggles → CMD_LOGIN_RESOLVE\n- Scopes: `profile:name`, `profile:avatar`, `profile:email`, `profile:website` (extendable)\n- See [docs/SWARM-V1.md](./docs/SWARM-V1.md) for the surrounding identity model\n\n### `window.pear.swarm.v1` (v0.3+)\n- Direct Hyperswarm access for `hyper://` pages — full P2P, no proxy round-trip\n- Three trust tiers: drive-derived topics (no prompt) · mint-then-rejoin · arbitrary topics (consent sheet)\n- Per-app rate limits, 1 MB/s/peer cap, persistent grants in `swarm-grants.bee`\n- Full spec: [docs/SWARM-V1.md](./docs/SWARM-V1.md)\n\n### Settings\n- **Identity:** public key, Backup Phrase, Restore from phrase\n- **Profile:** display name, bio, avatar URL, website, email — opt-in fields apps see when you grant a login\n- **Connected Apps:** per-app login grants list, revoke individually or all\n- **Relays:** add / remove / mark-primary URLs · toggle hybrid-fetch vs pure-P2P · live capability advertisement pills showing version + region + transports (`hyperswarm` · `dht-relay-ws`)\n- **Storage:** path, usage, clear cache, reset data (signed-unseed every pinned site first)\n\n## Architecture\n\n```\n┌──────────────────────────────────────────────────────────┐\n│  Chromium renderer  (React + htm, no build step)         │\n│  - Multi-tab Browse / Apps / Sites / Library / Settings  │\n│  - window.pear.swarm.v1 / window.pear.login() in iframes │\n└────────────────────────────┬─────────────────────────────┘\n                             │ WebSocket (length-prefixed JSON) ws://127.0.0.1:9876\n                             ▼\n┌──────────────────────────────────────────────────────────┐\n│  Bare main process                                       │\n│  ├── HiveRelayClient        (Protomux, signed seed/unseed, 0.8.12)\n│  ├── Hyperswarm             (HyperDHT + UDX)\n│  ├── Corestore              (auto-managed primaryKey, decoupled from identity)\n│  ├── Hyperdrive             (per-site namespace)\n│  ├── Hyperbee × 5           (bookmarks, history, profile, contacts, swarm-grants)\n│  ├── Identity               (BIP-39 entropy → ed25519 root → per-app sub-keys)\n│  ├── SwarmBridge            (per-page swarm.v1 channels + tier policy)\n│  └── HyperProxy             (http://127.0.0.1:PORT/hyper/\u003ckey\u003e/path)\n└──────────────────────────────────────────────────────────┘\n```\n\nThree independent keypairs — BIP-39 identity, HiveRelay publisher key, Corestore primaryKey — all with separate backup stories. Identity regeneration never bricks the store; storage resets never orphan your pinned sites (signed unseeds first).\n\n## Develop\n\n```sh\ngit clone https://github.com/bigdestiny2/pearbrowser-desktop\ncd pearbrowser-desktop\nnpm install\npear run --dev .\n```\n\nUI files use htm + React (no build step). Backend in `backend/` is CommonJS. See `package.json` `pear` field for runtime config, and `pear.json` for multisig signing config.\n\n## Release pipeline\n\nSolo publisher, two steps:\n\n```sh\n./scripts/release-prod.sh         # pear stage + pear release (deprecated path)\nnode scripts/pin-self-on-hiverelay.js   # re-pin the new length on relays\n```\n\n`pear release` is deprecated in Pear runtime `v2.4.0` but still works and we use it deliberately — the replacement (`pear provision` + `pear multisig` quorum-cosigning) is designed for multi-publisher releases. A solo 1-of-1 multisig is pure ceremony with no security gain.\n\n**When to migrate to multisig:** when we add a co-signer (genuine quorum security), or when Pear actually removes `pear release` (not just deprecates it). The link config + provision target are pre-staged in `pear.json` so the migration is just plumbing — see the `_comment` field there.\n\n## Operator scripts\n\n| Script | What |\n|---|---|\n| `scripts/pin-self-on-hiverelay.js` | Seed the desktop's own production drive on the HiveRelay backbone. Run after every release. |\n| `scripts/publish-and-pin.js \u003cdir\u003e` | Publish a directory as a Hyperdrive + auto-pin to relays. |\n| `scripts/unseed-drive.js \u003ckey\u003e` | Send a signed unseed (publisher-only). |\n| `scripts/extract-drive.js \u003ckey\u003e` | Pull a drive's full content out to a local directory. |\n| `scripts/list-drive.js \u003ckey\u003e` | Diagnose what's inside a drive's manifest. |\n| `scripts/check-relays.js` | Discovery probe — print all HiveRelays reachable via DHT. |\n| `scripts/release-prod.sh` | The two-step release pipeline above. |\n\n## Distribution\n\nThe `appling/` directory contains the multi-architecture native shell — Bare + CMake builds for macOS / Windows / Linux. Currently optional (most users `pear run` the production key); future v0.5+ will ship signed installers via `pear build` (Pear runtime v2.5.0+).\n\n```sh\ncd appling\nnpm i\nbare-make generate\nbare-make build                      # produces unsigned .app/.exe/.deb\n```\n\nCode signing is per-platform:\n- macOS: `MACOS_SIGNING_IDENTITY` in `appling/CMakeLists.txt`\n- Windows: `WINDOWS_SIGNING_SUBJECT` / `WINDOWS_SIGNING_THUMBPRINT`\n- Linux: no signing required\n\n## Companion projects\n\n| Repo | What |\n|---|---|\n| [`bigdestiny2/hyper-fetch`](https://github.com/bigdestiny2/hyper-fetch) | ~5 KB JS library — read `hyper://` drives from any browser via the HiveRelay HTTP gateway. Pair with PearBrowser to embed hyper:// content in regular web pages. |\n| [`bigdestiny2/hiveworm`](https://github.com/bigdestiny2/hiveworm) | Featured multiplayer life-sim. Uses `window.pear.swarm.v1` for direct peer gossip. Live at `pear://d1xbkcpc…`. |\n| [`bigdestiny2/P2P-Hiverelay`](https://github.com/bigdestiny2/P2P-Hiverelay) | The always-on relay backbone keeping the whole network alive (`v0.8.12`). |\n| [`bigdestiny2/PearBrowser`](https://github.com/bigdestiny2/PearBrowser) | Mobile-focused sibling — iOS / Android port. Bare-kit-based. |\n\n## Credits\n\nBuilt on the Holepunch / Pear stack:\n\n- [Pear Runtime](https://pears.com) — Bare JS + Chromium for desktop\n- [Hyperswarm](https://github.com/holepunchto/hyperswarm) — peer discovery + NAT traversal\n- [Hyperdrive](https://github.com/holepunchto/hyperdrive) — P2P filesystems\n- [Hyperbee](https://github.com/holepunchto/hyperbee) — P2P key/value store\n- [Corestore](https://github.com/holepunchto/corestore) — Hypercore multiplexing\n- [HiveRelay](https://github.com/bigdestiny2/P2P-Hiverelay) — always-on pin infrastructure\n\n## License\n\nApache-2.0 (upstream backend reuse) / MIT (desktop additions). See [LICENSE](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbigdestiny2%2Fpearbrowser-desktop","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbigdestiny2%2Fpearbrowser-desktop","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbigdestiny2%2Fpearbrowser-desktop/lists"}