Going to production¶
simple-vc is deliberately minimal. did:key is great for learning and
peer-to-peer trust, but a real deployment usually needs more:
| Need | Why did:key isn't enough | Where to go |
|---|---|---|
| Revocation | The key is the DID; you can't revoke a credential. | Status List 2021 / Bitstring Status List |
| Key rotation | Rotating the key changes the DID. | did:web, did:ion, did:ebsi |
| Wallets & exchange | No standard request/response flow here. | OpenID4VC (OID4VCI / OID4VP) |
| Selective disclosure | Whole credential is revealed. | SD-JWT VC, BBS+ |
A walt.id path¶
walt.id is an open-source SSI stack (issuer, verifier and wallet APIs). A typical local setup:
# docker-compose.yml (illustrative)
services:
issuer:
image: waltid/issuer-api:latest
ports: ['7002:7002']
verifier:
image: waltid/verifier-api:latest
ports: ['7003:7003']
wallet:
image: waltid/wallet-api:latest
ports: ['7001:7001']
Then:
- Issue via the issuer API (OID4VCI): create a credential offer, the wallet claims it.
- Verify via the verifier API (OID4VP): create a presentation request, the wallet responds with a Verifiable Presentation.
The mental model you learned here — issuer signs, verifier checks against a DID — carries over directly; walt.id adds the exchange protocols, revocation and wallet.
Migration checklist¶
- [ ] Choose a DID method that supports rotation (
did:webis the easiest start). - [ ] Add a revocation mechanism (status list).
- [ ] Adopt OID4VCI / OID4VP for issuance and presentation.
- [ ] Move keys into a KMS/HSM instead of local seeds.
- [ ] Decide on the proof format (JWT VC, SD-JWT VC, or JSON-LD).