peach-browser

@june

A free, open source, local-first password manager for Chrome, Firefox, and Android.

TypeScript

v5.3.12 · 1,780 saves · 70,179 lines · updated 2 weeks ago

275 files
761e69236230
back to HEAD
icons/6.4 KB · 5 months ago
public/619.5 KB · 5 months ago
scripts/57.1 KB · 5 months ago
src/2.4 MB · 4 months ago
background/632.8 KB · 4 months ago
aes.test.ts2.2 KB · 6 months agoaes.tsaes.ts — AES-256-GCM encrypt/decrypt primitives for vault storage.4.2 KB · 5 months agoalarms.test.ts5.3 KB · 5 months agoalarms.ts2.3 KB · 5 months agochirp-identity.tsLocal-device identity helpers for the chirp-sync architecture.4.9 KB · 5 months agochirp-sync-coordinator.test.ts12.1 KB · 5 months agochirp-sync-coordinator.tsChirp Sync — Phase 2 manifest-diff coordinator.11.8 KB · 5 months agochirp-sync-runner.test.ts15.2 KB · 5 months agochirp-sync-runner.tsProduction sync runner — composes the live vault adapter, WebSocket transport, and coordinator into the function the dispatcher injects via setSyncRunner.6.1 KB · 5 months agochirp-sync-static.test.tsIV.7 — Static safety assertions for Chirp Sync.4.5 KB · 5 months agochirp-sync-vault-adapter.test.ts17.6 KB · 5 months agochirp-sync-vault-adapter.tsProduction adapter that backs runChirpSyncInitiator with the live vault.11.5 KB · 5 months agoclipboard.test.ts3.2 KB · 6 months agoclipboard.ts1.8 KB · 6 months agocodex-handlers.test.tsTests for src/background/codex-handlers.ts.6.1 KB · 5 months agocodex-handlers.tscodex-handlers.ts — message handlers that back the Peach Codex flow.10.4 KB · 5 months agocommands.tsKeyboard command handler — routing for summon-inline: 1.2.5 KB · 6 months agoentry.ts2.6 KB · 5 months agohealth.test.ts4.2 KB · 5 months agohealth.tshealth.ts — Pro advanced vault health analysis.5.1 KB · 5 months agoindex.ts1.3 KB · 5 months agolicense.ts4.9 KB · 5 months agomessages.adversarial.test.tsmessages.adversarial.test.ts — Layer 3 §3.3 adversarial message handler tests.37.3 KB · 5 months agomessages.test.ts27.5 KB · 5 months agomessages.tsmessages.ts — the only background message handler.56.9 KB · 4 months agoml.ts6.0 KB · 5 months agonotes.test.ts9.3 KB · 5 months agopaired-devices.test.ts5.9 KB · 5 months agopaired-devices.tsPaired-device registry — v3 chirp-sync.6.4 KB · 5 months agopasskey-chrome-ceremony.test.tspasskey-chrome-ceremony.test.ts — covers the Chrome chrome.webAuthenticationProxy ceremony path that the Firefox-proxy test file does NOT exercise.30.3 KB · 5 months agopasskey-crypto.test.ts6.0 KB · 6 months agopasskey-crypto.ts11.1 KB · 5 months agopasskey-deny-on-close.test.tspasskey-deny-on-close.test.ts — M8/COR-0092.8 KB · 5 months agopasskey-firefox-proxy.test.tspasskey-firefox-proxy.test.ts — covers the v2.12.0 Firefox content-script proxy path.17.2 KB · 5 months agopasskey.ts48.6 KB · 4 months agorecovery-pending.tsPersistent flag set while the user has just created a vault and is reading their 12 recovery words but has not yet typed the 3 confirmation words.1.2 KB · 5 months agorecovery-words.test.ts19.1 KB · 5 months agorecovery.adversarial.test.tsrecovery.adversarial.test.ts — Layer 3 §3.2 adversarial recovery words tests.19.2 KB · 5 months agoself-test.test.ts329 B · 5 months agoself-test.tsself-test.ts — Known-Answer Test (KAT) for the Peach crypto stack.2.6 KB · 5 months agosync-trigger.test.ts7.5 KB · 5 months agosync-trigger.tssync-trigger.ts — central sync dispatcher.5.6 KB · 5 months agovault-history.test.tsVault history tests.9.7 KB · 5 months agovault.adversarial.test.tsvault.adversarial.test.ts — Layer 3 §3.1 adversarial vault tests.32.7 KB · 5 months agovault.test.ts37.3 KB · 5 months agovault.tsvault.ts — sole owner of vault state and chrome.storage vault keys.92.7 KB · 4 months ago
content/334.9 KB · 4 months ago
crypto/61.9 KB · 5 months ago
popup/1.1 MB · 4 months ago
codex/195.7 KB · 5 months ago
aztec.tsaztec.ts — Aztec 2D barcode generation with round-trip verification.12.7 KB · 5 months agobrowser-bundle.test.ts674 B · 5 months agocodex.adversarial.test.tscodex.adversarial.test.ts — Layer 3 §3.4 adversarial Codex tests.21.4 KB · 5 months agocodex.suite.test.tscodex.suite.test.ts — cross-cutting regression suite for the Codex pipeline.9.9 KB · 5 months agocodex.test.ts19.0 KB · 5 months agoconfirmation.tsPick 3 distinct positions in [1, 12] for the recovery-words confirmation gate.601 B · 5 months agoerasure.tserasure.ts — Reed-Solomon erasure coding around the WASM library.13.9 KB · 5 months agogenerate.test.ts17.1 KB · 5 months agogenerate.tsgenerate.ts — full Codex generation pipeline.15.9 KB · 5 months agohelpers.tshelpers.ts — shared utilities for Codex generation and restoration.7.8 KB · 5 months agonode-wasm.tsNode-only WASM byte loader for Vitest.1.1 KB · 5 months agopdf-import.test.tspdf-import.test.ts — coverage for the testable surface of the PDF import path.12.5 KB · 5 months agopdf-import.tspdf-import.ts — restore from a Codex PDF instead of a camera scan.22.4 KB · 5 months agopdf-layout.tspdf-layout.ts — A4 Codex page geometry shared between the generator and the PDF importer.1.4 KB · 5 months agopdf.tspdf.ts — render the printable Codex PDF.8.1 KB · 5 months agoreed-solomon.tsBrowser-safe wrapper around the Reed-Solomon WASM exports.4.8 KB · 5 months agorestore.test.tsrestore.test.ts — coverage for ChunkBuffer, parseRawScan, reconstructAndVerify.11.0 KB · 5 months agorestore.tsrestore.ts — Peach Codex restoration library (popup-side).11.1 KB · 5 months agors-loader.tsrs-loader.ts — load the Reed-Solomon erasure WASM module.2.4 KB · 5 months agoscanner.tsscanner.ts — camera-based Aztec scanning for Codex restoration.1.8 KB · 5 months ago
components/87.8 KB · 5 months ago
styles/270.8 KB · 4 months ago
views/502.5 KB · 4 months ago
Add.tsx32.0 KB · 5 months agoChirpSync.tsxChirpSync — the v3 Settings → Sync surface.19.8 KB · 5 months agoCodexGenerateView.test.tsx@vitest-environment jsdom2.1 KB · 5 months agoCodexGenerateView.tsxPeach Codex — generation view.21.8 KB · 5 months agoCodexRestoreView.tsxPeach Codex — restoration view.23.6 KB · 5 months agocontracts.test.tsx@vitest-environment jsdom36.8 KB · 4 months agoEntry.tsx75.0 KB · 4 months agoExport.csv.test.ts@vitest-environment jsdom1002 B · 5 months agoExport.tsxSignal-conditioned views in this file must use <Show>, never a signal-conditioned early return (if (signal()) return <X/>).19.9 KB · 5 months agoHealth.test.tsx@vitest-environment jsdom2.5 KB · 5 months agoHealth.tsx20.6 KB · 5 months agoImport.tsxSignal-conditioned views in this file must use <Show>, never a signal-conditioned early return — see Projects.md §4.1.32.2 KB · 5 months agoLock.tsx39.5 KB · 5 months agoNoteEditor.toHtml.test.ts@vitest-environment jsdom3.6 KB · 5 months agoNoteEditor.tsx7.6 KB · 5 months agoNotesEditor.tsx8.3 KB · 5 months agoNotesMode.tsx2.9 KB · 5 months agoNotesTOC.tsx4.5 KB · 5 months agoOnboarding.tsx4.6 KB · 5 months agoPanic.tsx6.0 KB · 6 months agoPasskeyApproval.tsx2.1 KB · 6 months agoProCelebration.tsx646 B · 5 months agoRecoveryWordDisplay.tsx8.9 KB · 5 months agoRecoveryWordEntry.tsx10.9 KB · 5 months agoSettings.tsx74.4 KB · 5 months agoTrashView.tsx5.7 KB · 6 months agovault-search.test.ts3.3 KB · 4 months agovault-search.ts4.8 KB · 4 months agoVault.tsx26.3 KB · 4 months agoview-test-utils.tsx1.0 KB · 6 months ago
App.tsx67.8 KB · 5 months agochirp-pair-capacitor.test.ts3.7 KB · 5 months agochirp-pair-capacitor.tsCapacitor adapter for the initiator-role pairing server, plus the mDNS peer-discovery listener that fires the sync trigger when a known paired device appears on the local network.7.9 KB · 5 months agochirp-pair.test.ts7.5 KB · 5 months agochirp-pair.tsPopup-side orchestrator for Phase-1 chirp pairing.13.3 KB · 5 months agocopy.tsPopup-side copy helper.1.1 KB · 6 months agofirefox-passkey.tsfirefox-passkey.ts — popup-context WebAuthn caller for the Firefox path.4.0 KB · 6 months agogenerator-policy.ts2.2 KB · 5 months agoindex.html1.1 KB · 5 months agoindex.tsx610 B · 5 months ago
shared/259.3 KB · 4 months ago
backup.test.ts2.8 KB · 6 months agobackup.ts7.4 KB · 6 months agobridge.ts1.6 KB · 5 months agobrowser.test.tsbrowser.test.ts — locks down feature-detected browser identification.6.5 KB · 5 months agobrowser.tsbrowser.ts — feature-detected browser identifier shared by background, popup, and content scripts.1.3 KB · 6 months agochirp-handshake.test.ts6.4 KB · 5 months agochirp-handshake.tsPost-chirp pairing handshake.11.0 KB · 5 months agochirp-pairing.test.ts7.8 KB · 5 months agochirp-pairing.tsAudio pairing driver — orchestrates the two-chirp exchange that bootstraps trust between two devices in the same room.10.2 KB · 5 months agochirp-payload.test.ts3.5 KB · 5 months agochirp-payload.tsAudio pairing payload — 64 bytes on the wire.4.4 KB · 5 months agochirp-sync-transport.test.tsSubnet-probe rate-limit tests.2.9 KB · 5 months agochirp-sync-transport.tsWebSocket sync transport — v3 chirp-sync Phase 2.8.4 KB · 5 months agocodex-types.tscodex-types.ts — shared shapes for the Peach Codex.10.0 KB · 5 months agoconfig.tsWeb3Forms access key for the in-app feedback form (Settings → feedback).827 B · 5 months agodevice-manifest.test.ts4.2 KB · 5 months agodevice-manifest.tsDevice manifest — v2 brief §4.3.8.1 KB · 5 months agodomain.ts657 B · 6 months agofavicon.test.ts1.2 KB · 6 months agofavicon.tsResolves a favicon URL for a given domain.3.4 KB · 4 months agogenerate.test.ts2.6 KB · 5 months agogenerate.ts2.6 KB · 5 months agoggwave.test.ts4.7 KB · 5 months agoggwave.tsggwave loader — thin async wrapper around the ggwave-wasm module.6.5 KB · 5 months agoimport.test.ts13.4 KB · 6 months agoimport.tsany is intentional throughout this module (L17/I3/QUA-010): import files are user-supplied external JSON whose schemas vary by source app and version (1Password CPG, Bitwarden, CXF, generic CSV).16.1 KB · 5 months agolocal-network.tsLocal network discovery — minimal helper used by chirp pairing.1.2 KB · 5 months agoml.ts1.4 KB · 6 months agonative.tsMobile platform detection helpers used by popup views to gate Capacitor-only paths.848 B · 5 months agonoise-js.test.tsNoise NK auth proof regression test.6.9 KB · 5 months agonoise-js.tsNoise NK initiator for Android / Capacitor.13.0 KB · 5 months agonoise-xx.test.ts3.4 KB · 5 months agonoise-xx.tsNoise XX (mutual auth) — used for every Phase-2 WebSocket connection after the audio chirp pairing has stamped each side into the other's paired-device registry.8.1 KB · 5 months agopasskey-flags.tspasskey-flags.ts — single switch for the Firefox passkey content-script proxy.2.1 KB · 6 months agopasskey-utils.test.ts1.2 KB · 5 months agopasskey-utils.tspasskey-utils.ts — WebAuthn relying-party-id validation.2.2 KB · 5 months agorecovery-word-list.tsrecovery-word-list.ts — 2048-word recovery word list for Peach vault recovery.20.1 KB · 5 months agorecovery-words.tsrecovery-words.ts — BIP39-compatible recovery word encoding for Peach vault recovery.5.4 KB · 5 months agoshortcuts.test.ts@vitest-environment jsdom4.0 KB · 6 months agoshortcuts.tsshortcuts.ts — keybinding schema, defaults, matcher, formatter.6.7 KB · 6 months agostorage.ts537 B · 5 months agosync-identity.test.ts2.9 KB · 5 months agosync-identity.tsSync identity — long-term X25519 keypair tied to the vault, not the device installation.7.0 KB · 5 months agosync-types.tsChirp Sync — type definitions (Master Brief v2).7.6 KB · 5 months agotypes.tstypes.ts — cross-boundary types and the MessageType union.16.2 KB · 4 months ago
tests/445.0 KB · 5 months ago
.amoignore1.2 KB · 5 months ago.gitignore124 B · 6 months ago.nvmrc8 B · 5 months agobun.lock123.2 KB · 5 months agomanifest.firefox.json2.6 KB · 4 months agomanifest.json1.8 KB · 4 months agopackage-lock.json288.4 KB · 4 months agopackage.json2.8 KB · 4 months agoplaywright.config.ts808 B · 6 months agopnpm-lock.yaml169.9 KB · 5 months agotsconfig.background.json490 B · 5 months agotsconfig.json521 B · 5 months agotsconfig.tests.json122 B · 6 months agovite.config.mobile.ts1.2 KB · 5 months agovite.config.ts2.7 KB · 5 months agovitest.config.ts461 B · 5 months ago
94fda772d1b5fix: Show full used-email picker in entry editor (v4.9.9)2 months agod550f48a729dfix: Restore Advanced control for passkey entries (v4.9.8)2 months ago03887ea0c034docs: define cross-platform contract sync policy2 months ago72efe45f61c2record 2fa-icon-spam fix and v4.9.7 gates in CONTINUITY.md2 months agoda74e3f68636collapse OTP-signaling split-digit boxes (no maxlength) to a single icon on box[0] instead of one per box2 months ago2c20a75301a0record six-fix bugfix session and v4.9.6 gates in CONTINUITY.md2 months agoa945b931a1c5bump version 4.9.5 to 4.9.6 across package.json and both manifests2 months agoc54ae32c7d48treat markup-only or zero-width contenteditable bodies as blank so a new note with nothing typed is never saved2 months ago2adb75e4873erun the main content script in all frames so Peach can fill login forms inside overlay/nested iframes2 months ago4488f3459d17detect single-digit OTP boxes by maxlength attribute so type=number 2FA boxes no longer each get a peach icon2 months ago8b8b37f3866fbrighten the Settings version corner to a gentle readable off-white instead of 10% alpha2 months ago5de797f88705suppress keyboard shortcuts on lock screen so typing a password cannot trigger new-entry and escape2 months ago3b0605503593render passkey entries with favicon or coloured initials instead of search-like key icon2 months ago0a86c74f2b4cfix lock action icon to render accent at rest instead of only on hover2 months agoe3cda06167abfeat: Rename paired devices locally (v4.9.4)2 months ago7c75b22961a9fix: Bound cumulative locked sync inbox (v4.9.3)2 months agof5eeec05e167feat: Add opaque locked background sync spool (v4.9.2)2 months agoe40a67cca1a3clear MV3 session key in lock() so a manual lock is not silently undone by the next SW restart2 months ago0e9a9f1e1ac5strip accentGlow machinery from RuneBackground, runes drift subtly on their own at base opacity2 months agoc2d065090bf8bump version to 4.9.1 and rebuild dist-chrome and dist-firefox2 months ago6d22b523c75frestore PeachMark above lock-screen eyebrow, add peach-lock-mark sizing, tighten eyebrow tracking/weight2 months ago501417f17d18slow down accent glow pulse (0.08-0.20 speed, 5-9s lifetime) and tighten rune row spacing (LINE_H 3.8→2.8)2 months agod72d7694ef20bump version to 4.9.0 in package.json and manifests2 months ago96373f8a028dfix indentation in Lock.tsx unlock view after layout changes2 months agob80860877bb4add canvas null check, mock RuneBackground in tests, all tests pass2 months ago9c22e753d364fix unused variables in glow update loop, lint and typecheck pass clean2 months agofe0416317f36center hero content on unlock view, remove hero art CSS, add text-align center to headline2 months ago6a73c5c3a0bbremove LockRuneCanvas and PeachMark hero art from lock screen, add RuneBackground with accentGlow2 months agofa601515c1a3add accentGlow prop to RuneBackground with sine-wave pulse glow slots2 months ago14c3e3aa08fadocs: record v4.8.9 Chrome and Firefox release2 months ago0da75a28a141docs: record combined credential browser verification2 months ago507ed37227b1fix: preserve TOTP during passkey consolidation (v4.8.9)2 months ago752c6edfb19fdocs: continuity — peach-android v2.14.12 mirrors the 64-char device-name cap2 months ago2a311f0d3062docs: continuity — record device-name cap hardening (v4.8.8)2 months ago847806bd2188feat: cap peer device names at 64 chars on every inbound seam (v4.8.8)2 months agoc387e8a41f26docs: continuity — record sync-alert overflow fix outcome (v4.8.7)2 months ago44a2d34bbdddfix: contain device-trust alert banners inside the 320px shell (v4.8.7)2 months ago65feee9c1752docs: Refresh README for Peach Sync and Android beta2 months agoddbf04f40670docs: continuity — record deletion + biome-repair outcomes and save bundling note (v4.8.6)2 months agoac28263c9b98test: revive two orphaned mesh-propagation receiver tests (v4.8.6)2 months ago41b6448ed641refactor: delete dead GET_ADOPTION_MATERIAL/COMPLETE_PAIRING handlers (v4.8.5)2 months agoae66726c3c86docs: continuity — record Codex Security F1/F2/F3 resolution and verification (v4.8.4)2 months agoe3f31d626cb8style: drop lint violations introduced by security fixes (v4.8.4)2 months ago7cf0e6d4b0c4fix: canary webhook filter rejects IPv4-mapped IPv6 private literals (v4.8.4)2 months ago2945bb7a571afix: bind Firefox passkey completion to the pending ceremony (v4.8.3)2 months agoc3c0d13e0280fix: gate key-material and pairing handlers to extension-page senders (v4.8.2)2 months ago1fc1bb91666btest: fix flaky tampered-ciphertext crypto test (v4.8.1)2 months ago351f84bfff6efeat: collapse sync alert toasts by type with counter + flip + dismiss-all; strip mesh diag (v4.8.0)2 months agode56d93b26cefix: treat wsPort/relayUrl null same as undefined in manifest validation + normalise (v4.7.9)2 months agoceeb0d1edf66fix: accept wsPort:0 as valid no-port sentinel in manifest validation (v4.7.8)2 months ago

← newerolder →

details

Peach

A free, open source, local-first password manager for Chrome, Firefox, and Android.

Peach encrypts your vault on your device. No hosted vault, subscription, or account is required to use it.

peachpasswords.com


Features

  • Passwords, cards, and secure notes — keep your private data together in one encrypted vault
  • Inline autofill — fill and save credentials without leaving the page
  • TOTP built in — generate two-factor codes without a separate authenticator
  • Password health — find weak, reused, and exposed passwords
  • Portable backups — export and restore with PeachScript or a .peach file

Peach Pro adds:

  • Peach Sync — end-to-end encrypted sync across paired devices
  • Passkeys — save and use passkeys in Chrome and Firefox
  • Peach Codex — print an encrypted, scannable backup of your vault
  • Advanced vault health, Canary Entries, and duress tools

See the Peach website for current availability and Pro details.


Install


Open Source

Peach is released under the GPL v3. This repository contains Peach's Chrome and Firefox browser extensions. Android is maintained separately.

The source is hosted on Kepr, Asha Software's version control platform.


Security

Vault data is encrypted with AES-256-GCM and protected by Argon2id key derivation. Peach Sync authenticates paired devices and encrypts data in transit.

Implementation details live alongside the code:


Building

bun install --frozen-lockfile
bun run build

Builds are written to dist-chrome/ and dist-firefox/.


Built by Asha Software · [email protected]