Skip to content

docs: add migration guide for Indy to did:webvh AnonCreds issuance#4059

Merged
swcurran merged 7 commits into
openwallet-foundation:mainfrom
OpSecId:docs/indy-to-webvh-migration
Mar 2, 2026
Merged

docs: add migration guide for Indy to did:webvh AnonCreds issuance#4059
swcurran merged 7 commits into
openwallet-foundation:mainfrom
OpSecId:docs/indy-to-webvh-migration

Conversation

@PatStLouis
Copy link
Copy Markdown
Contributor

Adds a strategic guide for issuers transitioning from Indy-based AnonCreds credentials to did:webvh-rooted ones. Covers prerequisites, dual-issuance transition strategy, step-by-step setup, and impact on controllers and verifiers.

Closes #3885

Adds a strategic guide for issuers transitioning from Indy-based
AnonCreds credentials to did:webvh-rooted ones. Covers prerequisites,
dual-issuance transition strategy, step-by-step setup, and impact on
controllers and verifiers.

Closes openwallet-foundation#3885

Signed-off-by: Patrick St-Louis <patrick.st-louis@opsecid.ca>
Co-authored-by: Cursor <cursoragent@cursor.com>
esune
esune previously approved these changes Feb 19, 2026
Copy link
Copy Markdown
Member

@esune esune left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me, it should be enough for issuers and verifier to at least get started and work towards migrating.

Comment thread docs/deploying/IndyToWebVHMigration.md Outdated
Comment thread docs/deploying/IndyToWebVHMigration.md Outdated
1. Set up the did:webvh infrastructure (server, witness, plugin) alongside
your existing Indy configuration.
2. Create a did:webvh DID for your issuer.
3. Re-register your schemas and credential definitions under the new DID.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think the "Re-" is needed -- these are new objects. Picky, picky...

Comment thread docs/deploying/IndyToWebVHMigration.md Outdated
Comment thread docs/deploying/IndyToWebVHMigration.md Outdated
Copy link
Copy Markdown
Contributor

@swcurran swcurran left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall a really good document. Let's debate my points. As well, consider framing this as a generalized way to transition issuing from one credential format/type to another. I'd like the document title to change, but the general transition model can be repeated in other scenarios.

@PatStLouis
Copy link
Copy Markdown
Contributor Author

@swcurran I think a lot of this comes down to, how much should the issuer be limited by it's ecosystem? If an issuer needs to wait for all holders and verifiers to support their updated components, this creates a limitation on the least up to date entity.

Its hard to describe this in an upgrade guide with a decentralized ecosystem in mind. An issuer might not have a way to contact all verifiers. I think a lot of this wording can be massaged in the "transition" phase. Issuers might not know which wallet software stores their credentials, same for verifiers. Issuers can publish a notice of their upcoming changes, but may not have direct line of communication with wallet / service providers.

@PatStLouis
Copy link
Copy Markdown
Contributor Author

They might have "critical" lines of business where they just must keep issuing indy until all parties have updated their software, which may or may not be aligned with the issuer's technological choices.

@swcurran
Copy link
Copy Markdown
Contributor

Let's discuss. We can call these out, as you say, but what is the "recommended" way? I think the recommended way to get the holders/verifiers software updated/ready (as best you can in a decentralized world), and then do the transition.

If the criteria for keeping to issue the Indy-rooted credentials, how do you know what holder software has been updated? AFAIK the "discover features" protocol -- as useful as it is -- is not broadly implemented, and doesn't cover (for example) Indy to did:webvh transitions.

…assumption and ongoing Indy credential management

Signed-off-by: Patrick St-Louis <patrick.st-louis@opsecid.ca>
@PatStLouis
Copy link
Copy Markdown
Contributor Author

Addressed review feedback: reframed the guide around the full issuance process and a planned cutover (not dual-issuance), added the assumption that issuers/holders/verifiers already support did:webvh, and called out sharing new identifiers with verifiers before cutover and the need to keep managing already-issued Indy credentials (e.g. revocation). Also applied the copy edits (Phase 3 title, "register" not "re-register") and noted the pattern can apply to other VDR transitions.


## Key Differences at a Glance

| Aspect | Indy | did:webvh |
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A relative minor issue, but let me know what you think -- maybe a note early in the document? What you have in this table the "did:webvh Server AnonCreds Method" where the implementation is opinionated -- there is two extra elements in the DID (ns and id), plus a defined path to the resource. did:webvh itself can support any scheme -- "plain" did:webvh DIDs (no extra elements), any DID URL path. So we at least need to call that out vs. implying that this is what did:webvh requires.

It's too late for this, but I've wondered silently if the path should contain metadata such /resources/anoncreds-schema/{digest}. Did you consider that? Or the same mechanism that Indy used -- with the object type enumerated in the identifier.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's too late for this, but I've wondered silently if the path should contain metadata such /resources/anoncreds-schema/{digest}. Did you consider that? Or the same mechanism that Indy used -- with the object type enumerated in the identifier.

We can explore adding a resource type slug to the url, and require all attested resource to include this slug in their id. Since this is not currently the case, lets leave it out of the doc for now.

Comment thread docs/deploying/IndyToWebVHMigration.md Outdated
Comment thread docs/deploying/IndyToWebVHMigration.md Outdated
Comment thread docs/deploying/IndyToWebVHMigration.md Outdated
Comment thread docs/deploying/IndyToWebVHMigration.md Outdated
Copy link
Copy Markdown
Contributor

@swcurran swcurran left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Some comments that I think would make it a bit better (although it is great already). The only change is a clarification somewhere (presumably in the intro) that references the did:webvh AnonCreds Method is meant when it talks about switching to "did:webvh".

Comment thread mkdocs.yml Outdated
PatStLouis and others added 2 commits March 2, 2026 09:59
- mkdocs: rename nav entry to 'Migrating AnonCreds Issuance from Indy to did:webvh'
- Add Phase 4 (Remove Indy) with verifier/issuer notification and config cleanup
- Phase 2: expand verifier readiness (libraries + presentation request OR)
- Phase 2: add before/after example for presentation request restrictions
- Table: expand Indy identifier format with schema/cred def/DID elements
- Add note that did:webvh column describes Server AnonCreds Method convention

Signed-off-by: Patrick St-Louis <patrick.st-louis@opsecid.ca>
Made-with: Cursor
@PatStLouis
Copy link
Copy Markdown
Contributor Author

@swcurran I think I've addressed all your suggestions, aside from including a resource type slug in the uri!

@sonarqubecloud
Copy link
Copy Markdown

sonarqubecloud Bot commented Mar 2, 2026

@swcurran swcurran merged commit 22954da into openwallet-foundation:main Mar 2, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add document for how to move an Issuer from an Indy-based AnonCreds credential to one rooted in did:webvh

3 participants