We are excited to announce a new major release of
This new release brings together a bunch of fixes and features that we've been working on recently, including some from the community (thank you for your contributions!).
You can get a detailed list of changes in
the release description. Depending on how you're
Veramo you might be impacted by some breaking changes that had to be added in this release.
Added support for DIDComm v2
@veramo/did-comm package got a boost of functionality with new support for DIDComm v2 over HTTP. This plugin now
exports 3 new methods:
packDIDCommMessage()- encrypt and/or sign a message for sending.
sendDIDCommMessage()- send a packed message to a recipient DID.
unpackDIDCommMessage()- decode stored messages.
As you may have guessed, the existing
sendMessageDIDCommAlpha1() method should no longer be used. We hope that the
name of the method already suggested instability. This will be removed in Veramo 4.x.
To send a message you now pack it and then send the packed message:
According to DIDComm v2 spec, the recipient DID document must have a
DIDCommMessaging service endpoint and
keyAgreementKey listed. The key agreement key is used to pack (encrypt) the message and the service endpoint is
where the message is sent.
Added a basic plugin for DID discovery
We imagine that apps dealing with DIDs may need some look-up capabilities, so we created a
DIDDiscovery plugin that
can mediate this. Multiple DIDDiscovery providers will be asked to find matches based on a query string. We provide 2
basic providers for this, one covers DID aliases and another covers DIDs that are the subject of Credentials with
These basic providers only look in the local database for these matches. Future providers could search other data stores, or find DIDs by keys or by .well-known/did-config matches... you name it. Imagination is the limit here.
Added generic signing and shared-secret capabilities
@veramo/key-manager now exports 2 new methods:
keyManagerSign()- support all signing algorithms that lower level key management systems provide.
keyManagerSharedSecret()- compute shared secrets between a locally managed secret key and an external public key.
These are supposed to start phasing out the previous methods
The new signer can accommodate multiple algorithms implemented by
Example 1. signing JWT:
Example 2. signing an ethereum transaction:
DIDComm v2 out of the box with
If you are using
@veramo/did-provider-web it is now easier than ever to receive DIDComm messages.
did-provider-web bootstraps your new
did:web with Ed25519 and X25519 keys to be used for
keyAgreement as well
as listing an HTTP
DIDCommMessaging endpoint by default.
Just as before, you still have to configure your express app with the proper hostname(s) to match your
Simpler setup for react-native
@veramo/kms-local-react-native is not needed any more. It is now replaced by
@veramo/kms-local which can be used in
all environments. Some extra ceremony is still needed on react-native but the overall experience should be simpler.
Take a look at the React-native tutorial to see how to set that up.