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 3 weeks ago

166 files
2f841825d4c1
back to HEAD
icons/14.8 KB · 6 months ago
public/336.7 KB · 6 months ago
scripts/1.4 KB · 6 months ago
src/912.9 KB · 6 months ago
background/181.5 KB · 6 months ago
content/113.1 KB · 6 months ago
crypto/79.5 KB · 6 months ago
popup/475.2 KB · 6 months ago
shared/54.5 KB · 6 months ago
sync/9.0 KB · 6 months ago
tests/434.2 KB · 6 months ago
.gitignore124 B · 6 months agomanifest.firefox.json1.4 KB · 6 months agomanifest.json1.3 KB · 6 months agopackage-lock.json270.3 KB · 6 months agopackage.json1.7 KB · 6 months agopeach_audit_instructions.docx40.4 KB · 6 months agopeach_audit_v130.mdApril 202610.6 KB · 6 months agopeach_audit_v1410.mdEvery source file read, every message handler traced, every security surface examined.18.5 KB · 6 months agopeach_audit_v1424.mdKit version: 1.0 Audit date: 2026-04-21 Auditor: June ([email protected]) / assisted by Claude Code Version under test: Peach 1.4.24 Build / commit: 09386e1 (branch main) Test environment: macOS 15.3 (Darwin 25.3.0), white-box source review of the published repository at /Users/june/projects/peach-browser.41.5 KB · 6 months agopeach_audit_v1425.mdSource audit: peach_audit_v1424.md (score 70/100) Remediation spec: peach_remediation_spec.md Audit date: 2026-04-21 Auditor: June ([email protected]) / assisted by Claude Code Version under test: Peach post-remediation (working tree at /Users/june/projects/peach-browser) Scope: verification of findings closed by the PR 1 + PR 2 remediation bundle.15.4 KB · 6 months agopeach_audit_v1430.mdDate: 2026-04-22 Scope: Everything except sync (per peach_audit_instructions.docx §1.4) Baseline: v1.4.29 Deliverable version: v1.4.3021.3 KB · 6 months agopeach_completion_spec.mdGenerated: 2026-04-20 Current version: 1.1.1 Target: production-quality, daily-driver password manager26.2 KB · 6 months agopeach_daily_driver_build_guide.docx30.3 KB · 6 months agopeach_daily_driver_build_guide.mdpeach51.9 KB · 6 months agopeach_demo_update_spec.mdTarget: peachpasswords.com — HeroDemo.astro Extension version: 1.4.12 Goal: make the website demo show the real extension as faithfully as possible42.7 KB · 6 months agopeach_faithful_spec.mdv1.4.1 target35.4 KB · 6 months agopeach_gaps_spec.mdGenerated: 2026-04-20 Current version: 1.2.2 Scope: All features promised on peachpasswords.com that are not yet implemented, plus the licensing system required to sell anything.34.1 KB · 6 months agopeach_icon_injection_spec.mdPeach v1.4.0 target10.1 KB · 6 months agopeach_passkeys_spec.mdPeach v1.5.0 target26.1 KB · 6 months agopeach_shine_spec.mdPeach v1.4.0 target19.0 KB · 6 months agopeach_sync_spec.mdGenerated: 2026-04-20 Scope: The complete peer-to-peer sync system for Peach Pro.19.3 KB · 6 months agopeach_vault_integrity_spec.md*For implementation by Opus.30.7 KB · 6 months agopeach-site.png652.5 KB · 6 months agoplaywright.config.ts808 B · 6 months agostatus.mdGenerated: 2026-04-19 Version: 1.0.4 Type: Chrome Extension (Manifest V3)6.8 KB · 6 months agotest-extension.mjs4.3 KB · 6 months agotsconfig.background.json430 B · 6 months agotsconfig.json461 B · 6 months agotsconfig.tests.json122 B · 6 months agovite.config.ts1.3 KB · 6 months agovitest.config.ts250 B · 6 months ago
819c2b01c71cfix(security): enforce Firefox passkey rpId against the browser-attested sender origin, not page-supplied payload.origin — closes cross-origin assertion/credential forgery; verify clientDataJSON origin; scope HAS_CREDENTIALS+GET_PASSKEY_FOR_DOMAIN to caller origin (CRITICAL) (v3.6.123)5 months ago77d4f52c16bbindependent security audit — full line-by-line review begins5 months ago00429fe70a82refactor: remove dead chrome.storage.sync paired-device migration — registry is local-only, no sync evacuation path needed; zero storage.sync references in paired-devices.ts (v3.6.122)5 months ago811c39d3ce63audit resolution complete — all findings resolved v3.6.1215 months ago9767a70364eafix(data): PeachScript passkey entry encodes all login fields — totp, notes, tags, email, canary, additionalUrls, passwordChangedAt, breach preserved on export; backward-compatible via JSON blob (v3.6.121)5 months ago2b15bb2c1fddfix(security): Firefox passkey rpId↔origin validation — reject cross-origin rpId spoofing in handleFirefoxPasskeyCreate/Get via new isValidRpId (v3.6.120)5 months agodd13df9e1692fix(sync): derive sync identity from rootKey not derivedKey — vault_id, Noise XX static key, Ed25519 signing key and per-entry envelope keys stay stable across password rotation (v3.6.119)5 months ago2de264de1091feat: expose getRootKeyHex — stable per-vault root key, invariant across password change (already escrowed via recovery words + pw_root_*); foundation for password-independent sync identity (v3.6.118)5 months ago13728285815bdocs: inline notes for tombstone accumulation, per-entry LWW limitation, flags2 format caution; expand Projects.md §3.8 with full permission list and justifications (v3.6.117)5 months ago3bc26b9c7542fix(security): GET_ENTRY_FOR_FILL sends 6-digit TOTP code not seed — autofill+tray can't derive future codes; edit form uses new GET_ENTRY_FOR_EDIT to keep the seed; correct stale HKDF comment in chirp-sync-vault-adapter (v3.6.116)5 months ago9a0edc58db45fix(sw): await restoreFromSession before setupMessageHandler — no spurious lock screen on service-worker respawn (v3.6.115)5 months ago2c1167340654fix(data): updateEntry and deleteEntry roll back in-memory state on persist failure — no disk/memory divergence on quota error (v3.6.114)5 months agob0d0f5e59a28fix(sync): per-entry modifiedAt/deletedAt monotonic — clock-skew no longer discards local edits in LWW merge (v3.6.113)5 months agob5de3f75e43afix(sync): sync_received writes do not advance vault version — no-op sync optimisation restored, prevents ping-pong (v3.6.112)5 months ago19da2c5da38dfix(data): normalizeEntry preserves passwordChangedAt — aged-password health uses correct date across lock/unlock (v3.6.111)5 months ago66b318659107fix: DESTROY_VAULT preserves peach_license and peach_pro_celebrated — Pro survives vault reset; drop unused beforeEach import unblocking typecheck (v3.6.110)5 months ago49d919333ee0audit resolution — all findings — begins at v3.6.1095 months agoc51527dada23add comprehensive live audit report — findings plus CONFIRMED-CORRECT inventory (docs only)5 months ago1318b332a48bcomprehensive live audit v3.6.109 — read-only phase begins5 months agoe50cd95264aafix: complete*Request safe-wraps 'Invalid requestId' from Chrome-cancelled requests (conditional-UI gets cancel fast); onRequestCanceled now clears unlock waiters; log every proxy entry point; 3 new tests (v3.6.109)5 months ago5c2e4bb0970adiag: log every branch in handleCreateRequest, setupPasskeyProxy, attachPasskeyProxy, denyAllPendingPasskeyRequests — instant-fail with no SW errors leaves no signal otherwise (v3.6.108)5 months ago549991994e90test: add passkey-chrome-ceremony.test.ts (20 tests) and browser.test.ts (17 tests) — locks down isUvpaa unconditional true, locked-vault wait-for-unlock, page-origin clientDataJSON, signCount persistence, Pro gating, attach-target selection; covers Chromium derivatives (Brave/Edge/Vivaldi/Opera/Arc) and Firefox derivatives (LibreWolf/Floorp) via feature detection (v3.6.107)5 months ago46a7aa189940before comprehensive passkey test coverage5 months ago2c99399f84d6fix: isUvpaa returns true unconditionally (was gated on unlock — caused 'passkey can't be created on this device'); handleCreateRequest now waits for unlock instead of immediately rejecting (v3.6.106)5 months ago9b1e359cf8d6fix: clientDataJSON.origin uses page origin (active tab) instead of https://<rpId> — fixes passkey create/get on Google subdomains (v3.6.105)5 months agoccf38e50bdc9before passkey clientDataJSON origin fix5 months ago3401db8ce65afeat: TOTP popup on multi-digit OTP boxes — no icon, fill all boxes at once (v3.6.104)5 months ago601ee3c2c1abfix: skip individual OTP digit boxes (maxlength=1) in all icon injection paths (v3.6.103)5 months agof262c65e6083support email-first, password-step, and all multi-step login flows (v3.6.102)5 months ago2b15820d0bc0before form detection regression investigation5 months ago7ab9d24c2796release v3.6.101 to Firefox AMO (signed xpi)5 months ago7a2e7c26d978rename extension to 'Peach Password Manager' and bump to v3.6.1015 months ago953f200f4fd4add release.ts, setup-chrome-release.sh, and release/release:chrome npm scripts5 months agod4460bd9f432before chrome release pipeline setup5 months ago1eb81220588efix: inline popup search reaches full vault + back-arrow returns to silver platter (v3.6.100)5 months agod9877efa8475before fix: vault-wide search from silver platter + back-to-platter affordance5 months agoa79d48cbd868docs: record v3.6.99 inline popup search affordance + carried-over v3.6.985 months agoaa7bb5ef2536feat: add type-to-search escape hatch from inline popup silver platter (v3.6.99)5 months ago827c7e4a4890fix: Codex restore preserves stringified slot payloads + bootstrap native sync runner from popup (v3.6.98)5 months ago8266c804b32ebefore saving carried-over codex slot fix + native sync bootstrap + adding inline-popup search affordance5 months agod450644cd03ddocs: record shared Koh discipline memory5 months agod4cbd1899697before adding koh discipline memory5 months ago31c72b10861afix: Improve Codex PDF restore parity and shortfall handling (v3.6.95)5 months ago3845dc12335fbefore codex master repair — all fixes5 months ago170ec6d1d817docs: Add detailed Codex import findings5 months ago7bcab6978a52docs: Record Codex import exploration findings5 months agod5781a023a33checkpoint: before Codex import/page-count exploration5 months agoc0bfacc04e65update tests to allow empty login passwords — reflects email+OTP account support5 months ago72b4d869e53dallow login entries with no password — support email+OTP accounts; update Get Peach Pro URL to Polar checkout (v3.6.94)5 months ago35bc480f3621add web-ext sign script, source packaging, and one-command release (v3.6.93)5 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]