Skip to main content

Signing In to Apps

When a website or app supports "Sign in with mwen.io", you authenticate through your wallet — not by typing a username and password. This page explains what happens during sign-in and what the app can and cannot see.


How sign-in works

  1. Click Sign in with mwen.io on the app's website.
  2. The mwen.io extension popup opens, showing a consent screen.
  3. You review what the app is requesting, choose what to share, and click Approve.
  4. The app receives a cryptographic proof and logs you in — in under two seconds.

No password is sent to the app. No raw personal data leaves your wallet unless you explicitly share it.


The consent screen is the most important part of the sign-in flow. It shows you exactly what the app is asking for, claim by claim.

┌─────────────────────────────────────────────┐
│ shop.example.com wants to verify: │
│ │
│ ☑ Your identity (pseudonymous ID) │
│ ☑ Given name: Alice [Hide] │
│ ☑ Family name: Smith [Hide] │
│ 🔒 Over 18 (zero-knowledge proof) │
│ ☐ Birth date: 1990-05-15 [Show] │
│ ☑ Email: [email protected] [Hide] │
│ — Phone: Not set [disabled] │
│ │
│ Zero-knowledge proofs: birth date is │
│ never revealed to the app. │
│ │
│ [ Deny ] [ Approve ] │
└─────────────────────────────────────────────┘

Understanding the disclosure toggles

Each claim has one of these states:

StateMeaning
Checked / DisclosedThe claim value is shared with the app in readable form.
[Hide] toggleClick to hide the claim — the app knows it exists but cannot read the value.
[Show] toggleClick to share the claim — adds it to what the app will receive.
UncheckedThe claim is not shared at all. The app does not see the value or even the hash.
Disabled ("Not set")You have not added this claim to your profile. The toggle is inactive.
🔒 Zero-knowledgeThis claim is proven without revealing the value (see below).

You are in control of every claim. Change the toggles before approving.


Zero-knowledge age proofs

Age-related claims — Over 18, Over 21, Over 13 — work differently from other claims.

Instead of revealing your birth date, the wallet generates a zero-knowledge proof: a mathematical statement that proves the predicate is true (e.g. "this person is over 18") without disclosing the underlying birth date at all.

The 🔒 icon marks these claims. There is no toggle to show/hide the birth date for an age proof — it is structurally impossible for the app to see it.

If an app asks for your raw birth date separately (the birthdate scope), that is a different claim and does appear with a normal toggle.


Your pseudonymous identity

One claim — Your identity (pseudonymous ID) — is always included and cannot be toggled off. This is your did:jwk identifier for this specific app.

This identifier is:

  • Unique to this app. A different app gets a completely different identifier, even though both are derived from your same phrase.
  • Stable across sessions. The same app always sees the same identifier, so it can recognise you on future sign-ins.
  • Not linkable. If two apps compared identifiers, they would find completely unrelated values with no shared information.

What the app receives

After you approve, the app receives a signed, cryptographically verifiable package called a Verifiable Presentation. It contains only the claims you chose to share, signed with your per-app key.

The app can verify this package without calling any mwen.io server. Once it is verified, the app creates a session using your pseudonymous ID as your user identifier.

The app does not receive:

  • Your 24-word phrase.
  • Any key material.
  • Claims you hid or left unchecked.
  • Any information about other apps you have used.

Delegating future sign-ins (auto-approve)

After approving a sign-in, the wallet may offer an option: Auto-approve future requests from this app.

If you enable this:

  • Future sign-in requests from the same app (with the same scope) are approved silently, without showing a popup.
  • This is called a delegation grant.
  • You can view and revoke all delegation grants from the Connected Apps section.

Auto-approve is never applied to age proofs (ZK claims) — those always prompt for consent.


Denying a request

Click Deny on the consent screen at any time. The app will receive an error and the sign-in will be cancelled. Nothing is shared.