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

217 files
aefd91f77276
back to HEAD
icons/7.3 KB · 6 months ago
public/468.8 KB · 5 months ago
scripts/35.1 KB · 5 months ago
src/1.9 MB · 5 months ago
background/535.3 KB · 5 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 agoclipboard.test.ts3.2 KB · 6 months agoclipboard.ts1.8 KB · 6 months agocodex-handlers.test.tsTests for src/background/codex-handlers.ts.4.6 KB · 5 months agocodex-handlers.tscodex-handlers.ts — message handlers that back the Peach Codex flow.9.9 KB · 5 months agocommands.tsKeyboard command handler — routing for summon-inline: 1.2.5 KB · 6 months agoentry.ts561 B · 5 months agohealth.test.ts4.9 KB · 6 months agohealth.tshealth.ts — Pro advanced vault health analysis.7.0 KB · 6 months agoindex.ts1.3 KB · 5 months agolicense.ts4.6 KB · 5 months agomessages.adversarial.test.tsmessages.adversarial.test.ts — Layer 3 §3.3 adversarial message handler tests.32.5 KB · 5 months agomessages.test.ts24.7 KB · 5 months agomessages.tsmessages.ts — the only background message handler.65.3 KB · 5 months agoml.ts6.0 KB · 5 months agonotes.test.ts9.3 KB · 5 months agopairing-completed-gate.test.tspairing-completed-gate.test.ts — M13/SEC-0054.9 KB · 5 months agopairing-server-state.tsTracks the active 6-digit pairing-server session.2.3 KB · 6 months agopasskey-crypto.test.ts6.0 KB · 6 months agopasskey-crypto.ts10.4 KB · 6 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.11.4 KB · 5 months agopasskey.ts35.0 KB · 5 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 agosync-coordinator.test.ts9.1 KB · 5 months agosync-coordinator.ts4.2 KB · 5 months agosync-identity-encryption.test.tssync-identity-encryption.test.ts — M12/SEC-0033.9 KB · 5 months agosync-info-sheet.test.ts6.5 KB · 5 months agosync-network.ts1.7 KB · 5 months agosync-pro-gate.test.ts6.1 KB · 5 months agosync-screen.test.ts6.6 KB · 5 months agosync-storage.ts5.1 KB · 5 months agosync.adversarial.test.tssync.adversarial.test.ts — Layer 3 §3.5 adversarial sync tests.31.1 KB · 5 months agovault-history.test.tsVault history tests.8.4 KB · 6 months agovault.adversarial.test.tsvault.adversarial.test.ts — Layer 3 §3.1 adversarial vault tests.32.7 KB · 5 months agovault.test.ts29.2 KB · 5 months agovault.tsvault.ts — sole owner of vault state and chrome.storage vault keys.86.2 KB · 5 months ago
content/280.9 KB · 5 months ago
crypto/46.9 KB · 5 months ago
popup/911.6 KB · 5 months ago
codex/114.5 KB · 5 months ago
components/50.7 KB · 5 months ago
styles/212.1 KB · 5 months ago
views/454.7 KB · 5 months ago
App.tsx69.5 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.html2.2 KB · 5 months agoindex.tsx610 B · 5 months ago
shared/143.3 KB · 5 months ago
backup.test.ts2.8 KB · 6 months agobackup.ts7.4 KB · 6 months agobridge.ts1.6 KB · 5 months agobrowser.tsbrowser.ts — feature-detected browser identifier shared by background, popup, and content scripts.1.3 KB · 6 months agocodex-types.tscodex-types.ts — shared shapes for the Peach Codex.6.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.794 B · 6 months agogenerate.test.ts2.1 KB · 6 months agogenerate.ts2.1 KB · 6 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.ts4.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 agopasskey-flags.tspasskey-flags.ts — single switch for the Firefox passkey content-script proxy.2.1 KB · 6 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-types.ts1.8 KB · 5 months agosync-wire.ts1.1 KB · 5 months agotypes.tstypes.ts — cross-boundary types and the MessageType union.16.1 KB · 5 months agowebsocket-sync-transport.ts3.6 KB · 5 months ago
tests/436.7 KB · 5 months ago
.gitignore124 B · 6 months ago.nvmrc8 B · 5 months agobun.lock123.2 KB · 5 months agomanifest.firefox.json1.9 KB · 5 months agomanifest.json1.5 KB · 5 months agopackage-lock.json275.2 KB · 5 months agopackage.json2.1 KB · 5 months agoplaywright.config.ts808 B · 6 months agopnpm-lock.yaml169.9 KB · 6 months agotsconfig.background.json490 B · 5 months agotsconfig.json521 B · 5 months agotsconfig.tests.json122 B · 6 months agovite.config.mobile.ts848 B · 5 months agovite.config.ts1.4 KB · 6 months agovitest.config.ts461 B · 5 months ago
c08326b6cda4expand hidden vault threat model in duress settings — clarifies what it protects against and what it doesn't5 months ago0a5a9828b51dpad .peach export to fixed size buckets (1KB/4KB/16KB/64KB/256KB) — prevents vault size inference from file size5 months agoe4ce0773cbbcadd zxcvbn strength gate (score ≥ 3) to PeachScript backup password export — prevents weak backup passwords5 months ago98fd3c5d6af4add rune decoder fuzz corpus — 17 edge cases covering off-by-one, surrogates, BOM, RTL, whitespace, DoS timing5 months ago22eb4b086791before security review fixes + Codex crash resolution — v2.51.0 target5 months ago0f4f5c81fffddocs: Refresh comprehensive audit report (v2.50.2)5 months ago18699cfb4043layer 5 refreshed threat model audit evidence5 months ago3986ae7fe563layer 4 refreshed quality and dependency audit evidence5 months agoae34eb9fb229layer 3 refreshed adversarial test audit evidence5 months ago2bfe90568efflayer 2 refreshed correctness audit evidence5 months ago4a1a760e453blayer 1 refreshed security audit evidence5 months ago5e28086808b8before performing peach comprehensive audit report5 months ago20339c232ec2v2.50.2 — second audit complete — 7/findings resolved — ready for Chrome and Firefox store submission5 months agoaabcd7149782bump version to 2.50.2 — second audit complete (7/findings resolved)5 months agof5bf6c4b5297AUD-007: expand adversarial payload sweep — 23 new variants × 38 handlers — 3078 tests pass5 months ago9f523400090dAUD-001: add rollup ^4.0.0 npm override to resolve transitive CVEs in @crxjs/vite-plugin5 months ago35d37116b93abefore AUD-001 @crxjs/vite-plugin upgrade — risky build-tool change5 months agoade57321a70fAUD-005: document extractable passkey key architectural tradeoff5 months ago7d6b4e5e48bdAUD-002: add payload validation for SEARCH_VAULT, COPY, ML_PREDICT_BATCH5 months ago9c2f6f2c9d34AUD-003: document canary webhook data disclosure in Entry settings UI and messages.ts5 months agoaa736dabac67AUD-004: extend Codex chunk hash and vault fingerprint to 128 bits with legacy 16-char fallback5 months ago8dda840a1a99AUD-006: reject sync timestamps beyond 5-minute clock skew budget5 months ago70c8750fd4f7before second audit fixes — findings AUD-001 through AUD-0075 months agoa52ed6dec231fix inline popup vault-locked detection — error string case mismatch (vault_locked vs VAULT_LOCKED) (v2.50.1)5 months ago2b5b0182cea3before inline popup vault-locked detection fix5 months ago715be6641d3ddocs: Add comprehensive pre-release audit report (v2.50.0)5 months ago8a0de1495074audit layer 5 threat model verification complete5 months ago362d9f9041f6audit layer 4 quality and dependency verification complete5 months agod9a6b4333c83audit layer 3 adversarial verification complete5 months agodbad8820dba0audit layer 2 current-code verification complete5 months agodf89f97b758faudit layer 1 current-code verification complete5 months ago64e9e51fad5dv2.50.0 — pre-release audit cycle (findings: 36 fixed, 1 deferred ANDROID, 1 accepted BUILD-DEP); manifest + package + lock bumped5 months agobeedabaee514before comprehensive audit report5 months ago46f3a940fc87docs: KNOWN_ISSUES.md — document L8 (ANDROID-DEFERRED-001) and L7 rollup residue (BUILD-DEP-001) deferrals5 months agofd5e23e83d9fpre-release audit complete — 38/findings resolved — 0 remaining — ready for store submission5 months agoaefd91f77276L18/I1+I2: verify CRYPTO-11 (deriveRootKeyFromDerivedKey active) and SEC-009 (AAD domain separation) both implemented5 months agoc2ec6e84637aL17/QUA-010: document intentional any usage in import.ts (external schema heterogeneity)5 months agoa3e298dd0300L16/SEC-010: validate incoming license signature before storing in applyIncomingVault5 months ago987a154bae24L15/SEC-009: slot-id domain separation in AES-GCM AAD (slot_a_v1, slot_b_v1, pw_root_v1, sync_identity_v1) with legacy VERSION_BYTE decrypt-fallback for migration5 months ago8b3a7582c2aeL14/COR-015: document verifyMainPassword real-vs-decoy intentionality5 months agofced847c8e54L13/COR-013: verify M4 covers all snapshot failure paths — single internal catch handles all callers5 months agoba629d89dda6L12/COR-011: add foreground idle autolock interval for native (Android)5 months ago54d245d5cf0fL11/COR-008: rollback in-memory entries if persistEntries fails in addEntry5 months agobd387b3b4237L10/THREAT-009: document reproducible build process (REPRODUCIBLE_BUILD.md, .nvmrc, engines)5 months ago1efabc88f7f7L9/THREAT-008: extend Codex chunk integrity hash from 32 to 64 bits5 months ago5bbbd6642f42L8/THREAT-007: deferred — Android SyncPlugin.kt not in current repo (mobile code removed); follow-up when Android target restored5 months ago9adfd28ef358L7/QUA-008: upgrade web-ext to 10.x, npm audit fix on production deps (0 prod vulns)5 months ago0a09511d4c3fL6/QUA-007: remove stale @ts-ignore directives in Lock.tsx — chrome types resolve cleanly5 months ago705a2fcd8d9aL5/QUA-004: standardize error codes to snake_case across messages.ts, vault.ts and add ErrorCode type union5 months ago214299cfc6f6L4/QUA-003: enable noUnusedLocals and noUnusedParameters; remove dead identifiers across src and tests5 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]