v4.0.0
v4.0.0 Release Summary
We’re excited to announce the release of v4.0.0, which marks a significant milestone in our platform's evolution. This release is packed with new features, improvements, and critical changes that streamline development, enhance integration with webhook events, and simplify protocol interactions. Read on for all the details!
✨ New Features
NATS for Webhook Event Processing & SSE Changes
We’ve replaced our Webhook service, previously reliant on Redis, with NATS JetStream and Benthos for storing and processing webhook events. This update significantly improves scalability and reliability for event processing. As a result, all consumers are now recommended to use NATS for webhook event subscriptions.
Additionally, the deprecated /webhooks
and websocket endpoints have been completely removed. Several SSE endpoints have also been removed as part of this migration, simplifying the system. The following SSE endpoints are no longer available:
/sse/{wallet_id}
/sse/{wallet_id}/{topic}
/sse/{wallet_id}/{topic}/{desired_state}
/sse/{wallet_id}/{topic}/{field}/{field_id}
Moving forward, there is only one SSE endpoint:
/sse/{wallet_id}/{topic}/{field}/{field_id}/{desired_state}
For all other event subscriptions, we recommend switching to NATS.
DID-Rotate and DID-Exchange Protocol Support
We’ve introduced support for DID-Rotate and DID-Exchange methods, providing more flexible DID management throughout the lifecycle of a connection.
Notably, connections established using the DID-Exchange protocol can now utilize the hangup feature, which automatically deletes the connection record for both parties. Previously, with the old connections protocol, deleting a connection record would leave the other party with an unusable connection, as they would not be aware of its deletion. With DID-Exchange, this issue is resolved, and connections are automatically hung up when the DID-Exchange record is deleted.
The old connections protocol has now been marked as deprecated in favor of DID-Exchange.
To clarify: connection records themselves are not deprecated—they are still fetched and returned the same way. However, if a connection is established using DID-Exchange, the connection_protocol
field in the record will now be labeled as didexchange/1.0
, instead of connections/1.0
.
Issuer & Verifier Image URL in Trust Registry
We’ve introduced an image_url
field for both issuers and verifiers in the trust registry, allowing a visual representation to accompany their names. Tenant-admins can now onboard or update actors with an image using the PUT /tenant-admin/{wallet_id} endpoint, enhancing the clarity and recognition of trusted parties in the registry.
Swagger Replaced by Scalar
You will notice that our API Docs have gotten a make-over, as the Swagger OpenAPI documentation interface has been replaced with Scalar. Scalar offers a sleeker, more modern interface for exploring our API documentation. It’s easier to navigate, and we hope you’ll love the new look and feel!
🗑️ Deprecations and 💥 Breaking Changes
Protocol Version Cleanup
With the removal of v1 protocol support, there’s no longer a need to specify a protocol_version
in your requests. We now default to v2, simplifying interactions and ensuring the latest features are used.
Deprecation of Old Connections Protocol
The old connections protocol has officially been deprecated. We recommend migrating to the DID-Exchange protocol for all new integrations to benefit from improved DID management and secure connection flows. Please see the Action Required section for more detail.
Webhook Event Changes
As stated in the new features: websocket subscription of webhook events is now removed; bulk fetching using the deprecated /webhooks endpoint is also no longer available; and some of the SSE endpoints mentioned above have been removed.
📝 Documentation Improvements
We’ve added several new and detailed documentation guides to help you get the most out of our platform. These additions provide clear guidance on managing proofs, revocations, and restrictions during verification processes:
- Self-Attested Proofs: Learn how to handle and process self-attested attributes when responding to proof requests.
- Predicate Proofs: Detailed guides on using predicates in proofs, allowing verifiers to request conditions on attributes, such as proving someone is over a certain age without revealing the actual value.
- Revocation: Updated instructions on managing credential revocation, including how to handle revoked credentials during verification and ensure validity using NATS-based event subscriptions.
- Proof Restrictions: New guidance on applying restrictions to proofs, allowing verifiers to set conditions on attributes, such as schema, issuer, or attribute values.
You can explore these guides in more detail on our public docs page.
👷 Developer Improvements
Kubernetes Native Development with Mise, Kind, and Tilt
We’ve officially migrated away from ./manage up
and Docker Compose in favor of a Kubernetes-native setup using Mise, Kind, and Tilt. This powerful combination enables live reloading and a more standardized development environment. Say goodbye to local inconsistencies and embrace a more seamless workflow! 🎉
❗ Action Required
To ensure smooth transitions and compatibility, please review the following:
-
For webhook consumers: If you’re still using SSE or websockets for webhook event subscription, you’ll need to switch to NATS JetStream. Please contact us if you need help with this integration.
-
Connections protocol: Please begin migrating to use the DID-Exchange protocol, as the old one is deprecated. You'll find that the flow is now much simpler: every issuer has a public DID, and a tenant can now connect to them directly in a single call, using the new
/connections/did-exchange/create-request
endpoint. For connections with verifiers that don't have a public DID, please use the Out-Of-Band protocol instead of the connections protocol. If you need any assistance with this migration, please contact us. -
Protocol version changes: Please search for where you make use of specifying a
protocol_version
in the issuer or verifying flows. This field can be removed as it will now have no effect. The v1 protocol is no longer supported, and we now default to using the recommended v2 protocols.
We also recommend regenerating any OpenAPI clients to reflect all the latest changes.
We hope you enjoy the improvements in v4.0.0! If you have any questions or need further assistance, feel free to reach out.
What's Changed
- ✅ K6 collections by @wdbasson in #1007
- ⬆️ Upgrade fastapi, sqlalchemy, starlette by @ff137 in #1009
- ⬆️ Upgrade dependencies: fastapi, pydantic by @ff137 in #1018
- 📝 Add self-attested example docs by @cl0ete in #954
- 📝 Requested predicates proofs by @cl0ete in #826
- 🧑💻 🔨 🔧 👷 Mise, Kind, and Tilt by @rblaine95 in #955
- 📝 Add revocation docs by @cl0ete in #784
- 🧑💻 Reduce Redis and Postgres resource presets by @rblaine95 in #1020
- 📝 Add restrictions docs by @cl0ete in #832
- ⬆️ Update lock files by @ff137 in #1033
- 👷 Add Reset NATS Step by @rblaine95 in #1034
- 👷 🧑💻 Redis-Insight in Tilt by @rblaine95 in #1035
- 👷 🧑💻 Single Replica NATS Jetstream by @rblaine95 in #1038
- remove deepcopy by @wdbasson in #1037
- 👷 🧑💻 Single Replica Redis Cluster by @rblaine95 in #1039
- 🧑💻 Set NATS KV and Stream Replicas by @rblaine95 in #1040
- 🐛 fix log config: create new empty logger for each main module by @ff137 in #1041
- 🧐 Install DDTrace by @rblaine95 in #1042
- ⏪ Don't install DDTrace on Agents by @rblaine95 in #1043
- 🧐 Install Protobuf in Aca-Py Agents by @rblaine95 in #1044
- ♻️✨ K6: Waypoint ha validation by @wdbasson in #1045
- 💚 Fix k6 run_tests.sh by @wdbasson in #1046
- ✨Waypoint by @cl0ete in #1008
- 🎨 Black Format Tiltfiles by @rblaine95 in #1047
- 🧑💻 Add mise tasks for updating poetry lockfiles and ⬆️ Update dependencies by @ff137 in #1048
- Expire Redis keys after each pytest by @wdbasson in #1051
- 👷 Add Style Check for Tiltfiles by @rblaine95 in #1050
- 👷 Reset NATS after each pytest by @wdbasson in #1052
- ⬆️ Upgrade
fastapi
,anyio
andpylint
by @ff137 in #1066 - 👷 Fix Tilt CI by @rblaine95 in #1070
- ⚡ 🧑💻 More efficient docker cache usage by @rblaine95 in #1069
- ⬆️ Bump helmfile/helmfile-action from 1.9.1 to 1.9.2 by @dependabot in #1068
- 🧑💻 Programmatically detect IP address by @rblaine95 in #1053
- 🧑💻 Docker remove Kind Registry and Docker Cache by @rblaine95 in #1072
- ✅ K6 fault tolerance by @wdbasson in #1071
- ✅ Fix getWalletIndex function by @wdbasson in #1074
- ➕ 📝 Disable Redoc, replace Swagger with Scalar by @rblaine95 in #1075
- ⬆️ Upgrade dependencies:
uvicorn
,aiohttp
,ddtrace
by @ff137 in #1094 - ⚡💥✨🚀 Replace Redis webhook events with NATS Jetstream by @ff137 in #1095
- ⬆️ Pre-Commit 4.0 by @rblaine95 in #1098
- 👷 Use Github Org
CHARTS_PAT
secret by @rblaine95 in #1100 - ⬆️ Bump SonarSource/sonarcloud-github-action from 3.0.0 to 3.1.0 by @dependabot in #1097
- 🔥 ⚰️ Remove Redis and Webhooks Web from Tilt by @rblaine95 in #1099
- 👷 Remove Redis from CICD by @rblaine95 in #1101
- 🗑️ Remove v1 protocol version and default to v2 by @ff137 in #902
- 🔥 Remove redis, websockets, sse, and webhooks services by @ff137 in #1102
- ⬆️ Upgrade
pre-commit
andblack
to latest by @ff137 in #1111 - 🎨 apply formatting to sh and js scripts by @ff137 in #1112
- 🎨 resolve remaining repo code scanning warnings by @ff137 in #1113
- Revert ":art: resolve remaining repo code scanning warnings" by @ff137 in #1114
- ✨ Add issuer/verifier
image_url
to trustregistry by @cl0ete in #983 - ⬆️ Upgrade poetry version and update lock files by @ff137 in #1121
- ⬆️ Helmfile
0.169
, Helm3.16.2
, Tailscale1.76.0
by @rblaine95 in #1123 - 📌 Pin
xk6
and plugins by @rblaine95 in #1124 - 📌 Explicitly pin k6 to
v0.52.0
by @rblaine95 in #1125 - ✨ Implement DID Exchange and DID Rotate methods and 🗑️ deprecate connections protocol by @ff137 in #1119
- 🐛 Fix endorser Nats connection going stale by @cl0ete in #1122
Full Changelog: v3.4.0...v4.0.0