Skip to content
Me2eM

Deterministic Password Manager

One seed phrase, a strong unique password for every service — derived on the spot, on every device. Nothing stored, nothing to breach, nothing to reset.

Zero storage Same seed — same password Per-context isolation Nothing to reset

What you can build

A password manager with no vault: each service’s secret is derived from the user’s seed phrase and that service’s name — the same result on every device, forever, and never persisted anywhere. A new phone plus the twelve words restores every password.

How it works

A Handle per persona derives one secret per service context:

const work = await identity.deriveHandle('work');
const githubSecret = work.derivePassword('github.com', 32);
const jiraSecret   = work.derivePassword('jira.internal', 32);

@me2em/crypto adds the guard rails: Argon2id profiles for secrets a user must type rather than derive, and HIBP breach checks for the rare hand-chosen password.

Benefits

  • Zero storage. No vault file, no cloud sync, no breach surface — the password exists only at the moment of use.
  • Deterministic restoration. Same seed + same context → same secret, on every device, with nothing to sync.
  • Per-context isolation. A compromise of the work Handle never derives the personal Handle’s secrets.
  • No reset flows. No “forgot password” exists because no password is stored.

Trade-offs

  • The seed is the single point of failure. Lose the phrase — every derived password is gone; there is no recovery by design.
  • Rotation is structural. Changing a secret means changing its context name — plan per-service rotation instead of in-place updates.
  • Alpha. Package APIs are pre-1.0; pin versions.

References

Your scenario not listed here?

The protocol's terms are domain-neutral — new scenarios map to the same primitives. Start with a quick start or read how attestations carry delegatable trust.