Skip to content

FAQ & troubleshooting

Is this production-ready SSI?

It's a learning-grade, offline foundation. did:key has no revocation or key rotation, so for production (wallets, revocation, exchange protocols) graduate to a full stack — see Going to production.

Why did:key instead of did:web or a ledger?

Because the public key is embedded in the identifier, a verifier resolves it offline — no registry, no network. That's the simplest possible way to understand issue/verify.

verifyCredentialJwt throws instead of returning false

That's by design: an invalid signature, an expired credential, or a malformed JWT throws. Wrap it in try/catch.

Can I persist an identity?

Yes — store the 32-byte privateKey from generateDidKey() securely and re-create the same DID later with generateDidKey(seed).

JWT or JSON-LD proofs?

This library uses JWT (JWS/EdDSA) VCs — compact and interoperable with the JOSE ecosystem. JSON-LD Data Integrity proofs are equally valid W3C VCs but more involved.

Does it work in the browser?

The crypto (@noble/curves) is isomorphic, but did-jwt/resolvers target Node; test your target runtime. For browser wallets, a full SSI SDK is usually a better fit.