A spec-compliant wallet. Issuers and verifiers talk to it over OpenID4VCI and OpenID4VP. Point real ones at it and the flows run end to end, with holder binding, SD-JWT VC and mdoc, status lists and trust lists.
/credential-offer?credential_offer_uri=…
/authorize?client_id=…&request_uri=…
/api/trustlist
These endpoints take the same query parameters as the custom-scheme links (openid-credential-offer://, openid4vp://). Replace everything before the ? with the endpoint URL.
eudi wallet accept 'openid4vp://authorize?client_id=…'
eudi wallet register
wallet register installs OS handlers for openid4vp://, eudi-openid4vp://, haip-vp://, openid-credential-offer:// and haip-vci://, so those links open this wallet. The wallet documentation has the full list of endpoints.
No issuer or verifier at hand? This deployment also hosts a demo issuer and a demo verifier.
How strictly this wallet checks incoming requests. Edit to test other profiles.
| Validation mode | |
| HAIP 1.0 | |
| Encrypted requests | |
| Session transcript | — |
| Preferred format | — |
Yours only, kept in a cookie. Reset clears it.
⚠ This browser only. CLI offers to the demo ignore it.
What another party needs in order to trust this wallet. Verifiers check the credentials it issues, issuers check the attestations it sends. Everything below chains to the same CA.
ETSI trust lists naming this wallet’s CA as the anchor.
This wallet is the web UI of eudi-dev, a developer toolkit for EUDI and OpenID4VC. The eudi CLI decodes, issues and presents credentials, runs this wallet locally and proxies wallet traffic.
brew install dominikschlosser/tap/eudi-dev
go install github.com/dominikschlosser/eudi-dev@latest
docker pull ghcr.io/dominikschlosser/eudi-dev
This is an independent open source project. It is not an official service of the European Commission or the European Union, has no affiliation with them, and is not endorsed by them.
Paste a raw SD-JWT or mDoc credential
Issues a credential with the wallet's issuer key and imports it. Only the format is required. Pick a template (for example german-pid-sdjwt) to fill the rest, everything stays editable.
Templates are reusable claim sets. Some are built in. Saving under an existing name overwrites it. Paste JSON below to import one.