Skip to content

Commit 2963ba3

Browse files
authored
Merge pull request #4011 from swcurran/1.5.0rc0
2 parents 61cd2d7 + 9b1c58f commit 2963ba3

26 files changed

+8437
-13392
lines changed

CHANGELOG.md

Lines changed: 73 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,71 @@
11
# ACA-Py Changelog
22

3+
## 1.5.0rc0
4+
5+
### January 7, 2026
6+
7+
ACA-Py 1.5.0 is a significant release that advances the platform’s modernization and modularization goals. The most substantial changes are the upgrade to **Python 3.13** and the continued evolution of ACA-Py toward a **plugin-oriented architecture**, including the removal of the legacy v1.0 credential exchange protocols (issue credential and present proof) from the core agent.
8+
9+
With this release, the v1.0 credential exchange protocols have been fully removed from ACA-Py core and are now expected to be provided via plugins where required. This aligns with earlier deprecation signals and reinforces a cleaner separation between the core agent and optional protocol implementations.
10+
11+
This release also includes important fixes to the migration process from the `askar` wallet type to `askar-anoncreds`, necessary for upgrades of deployments adopting the newest AnonCreds libraries. Several follow-on fixes and cleanups were also made to the **Kanon Storage** capability added in [Release 1.4.0](#140), addressing connection management/pooling behavior.
12+
13+
Additional improvements include enhanced scenario test logging and diagnostics, recoverable and event-driven revocation registry management, improvements to Docker image versioning, the introduction of a **plugin installer** to simplify deployment and management of external ACA-Py plugins, and the usual dependabot updates.
14+
15+
### 1.5.0 Breaking Changes
16+
17+
This release includes **intentional breaking changes** as part of ACA-Py’s ongoing modernization:
18+
19+
- **Removal of v1.0 credential exchange protocols from core**
20+
- The v1.0 *issue credential* and *present proof* protocols have been removed from ACA-Py core. Deployments that still depend on these protocols must transition to plugin-based implementations or migrate to newer protocol versions. This change is part of the broader move toward a plugin-driven protocol architecture.
21+
- **Python runtime upgrade to 3.13**
22+
- ACA-Py now targets **Python 3.13**. Environments pinned to earlier Python versions will need to upgrade their runtime and validate third-party dependency compatibility.
23+
24+
While not breaking at the API level, implementers should also be aware of behavioral and configuration changes related to:
25+
26+
- Migration from `askar` to `askar-anoncreds`
27+
- Kanon Storage connection handling and pooling behavior
28+
29+
These areas should be explicitly tested when upgrading to 1.5.0.
30+
31+
### 1.5.0 Deprecation Notices
32+
33+
The `acapy_agent.revocation_anoncreds` package has been deprecated and relocated to `acapy_agent.anoncreds.revocation` for improved consistency across the codebase. The change should only affect [ACA-Py Plugins] that implement AnonCreds, but other developers should also take note.
34+
35+
The `wallet-type` configuration value `askar` is now deprecated and all deployments still using that wallet type should migrate to either the `askar-anoncreds` or (ideally) `kanon-anoncreds` wallet types.
36+
37+
AIP 1.0 protocols that were [previously announced as deprecated](#140-deprecation-notices) have now been removed from ACA-Py core. Implementers still using those protocols **MUST** adjust their configuration to load those protocols from the respective plugins, or better, upgrade to their AIP 2.0 equivalents.
38+
39+
### 1.5.0 Categorized PR List
40+
41+
- **Core Platform and Architecture**
42+
- Upgrade python to 3.13 [#3911](https://github.com/openwallet-foundation/acapy/pull/3911) [jamshale](https://github.com/jamshale)
43+
- Feature: Add plugin installer [#3955](https://github.com/openwallet-foundation/acapy/pull/3955) [PatStLouis](https://github.com/PatStLouis)
44+
- Feature: semantic image versioning for released images [#3976](https://github.com/openwallet-foundation/acapy/pull/3976) [esune](https://github.com/esune)
45+
- **Protocol Changes and Credential Exchange**
46+
- Remove present proof v1 [#3981](https://github.com/openwallet-foundation/acapy/pull/3981) [jamshale](https://github.com/jamshale)
47+
- feat: Remove issuance v1 protocols [#3923](https://github.com/openwallet-foundation/acapy/pull/3923) [jamshale](https://github.com/jamshale)
48+
- feat: Add option to remove credex on failure [#3947](https://github.com/openwallet-foundation/acapy/pull/3947) [TheTechmage](https://github.com/TheTechmage)
49+
- **AnonCreds, Revocation, and Wallet Migration**
50+
- chore: Remove some more indy refs from anoncreds module [#4004](https://github.com/openwallet-foundation/acapy/pull/4004) [jamshale](https://github.com/jamshale)
51+
- Recoverable, event-driven revocation registry management [#3831](https://github.com/openwallet-foundation/acapy/pull/3831) [ff137](https://github.com/ff137)
52+
- Fix issues with anoncreds upgrade [#3991](https://github.com/openwallet-foundation/acapy/pull/3991) [jamshale](https://github.com/jamshale)
53+
- fix: encode revocation tag in tails upload URL (issue 1580) [#3996](https://github.com/openwallet-foundation/acapy/pull/3996) [sonivijayk](https://github.com/sonivijayk)
54+
- **Kanon Storage and Database Stability**
55+
- fix(kanon):updated connection cleanup to share 1 thread and added logging to detect connection leakage [#3963](https://github.com/openwallet-foundation/acapy/pull/3963) [vinaysingh8866](https://github.com/vinaysingh8866)
56+
- fix: minor fix to avoid pool exhaustion and deadlocks [#3958](https://github.com/openwallet-foundation/acapy/pull/3958) [vinaysingh8866](https://github.com/vinaysingh8866)
57+
- Fix for handler for postgres [#3992](https://github.com/openwallet-foundation/acapy/pull/3992) [vinaysingh8866](https://github.com/vinaysingh8866)
58+
- **Testing, Logging, and Diagnostics**
59+
- feat: Only log failing scenarios [#4005](https://github.com/openwallet-foundation/acapy/pull/4005) [jamshale](https://github.com/jamshale)
60+
- chore: Lower scenario test logging to info level [#4000](https://github.com/openwallet-foundation/acapy/pull/4000) [jamshale](https://github.com/jamshale)
61+
- feat: Add logging to scenario tests [#3983](https://github.com/openwallet-foundation/acapy/pull/3983) [jamshale](https://github.com/jamshale)
62+
- **Documentation and Cleanup**
63+
- Sonivijayk/fix/issue 2319 docs update to remove indy usage [#3997](https://github.com/openwallet-foundation/acapy/pull/3997) [sonivijayk](https://github.com/sonivijayk)
64+
- **Dependabot PRs**
65+
- [Link to list of Dependabot PRs in this release](https://github.com/openwallet-foundation/acapy/pulls?q=is%3Apr+is%3Amerged+merged%3A2025-11-15..2026-01-06+author%3Aapp%2Fdependabot+)
66+
- **Release management pull requests**:
67+
- 1.5.0rc0 [\#4011](https://github.com/openwallet-foundation/acapy/pull/4011) [swcurran](https://github.com/swcurran)
68+
369
## 1.4.0
470

571
### November 15, 2025
@@ -101,12 +167,12 @@ In an upcoming ACA-Py release, we will be dropping from the core ACA-Py reposito
101167

102168
Release 1.3.2 includes a privacy-related change that also introduces a breaking change for some deployments -- including those using [acapy-vc-authn-oidc](https://github.com/openwallet-foundation/acapy-vc-authn-oidc).
103169

104-
- **Removal of `by_format` from webhook payloads** ([#3837](https://github.com/openwallet-foundation/acapy/pull/3837))
105-
In a recent update, ACA-Py webhook events for credential and presentation v2.0 exchanges included a `by_format` field by default, instead of only when used with the `ACAPY_DEBUG_WEBHOOKS` configuration parameter. `by_format` contains sensitive protocol payload data and, in some cases, could result in **personally identifiable information (PII) being logged**. This behavior has been reverted.
170+
- **Removal of `by_format` from webhook payloads** ([#3837](https://github.com/openwallet-foundation/acapy/pull/3837))
171+
In a recent update, ACA-Py webhook events for credential and presentation v2.0 exchanges included a `by_format` field by default, instead of only when used with the `ACAPY_DEBUG_WEBHOOKS` configuration parameter. `by_format` contains sensitive protocol payload data and, in some cases, could result in **personally identifiable information (PII) being logged**. This behavior has been reverted.
106172

107-
**Impact when upgrading:**
173+
**Impact when upgrading:**
108174
- If your deployment relies on the `by_format` field in webhook events you need to ensure the startup parameter `ACAPY_DEBUG_WEBHOOKS` is activated.
109-
- Most applications that simply respond to the state of v2.0 credential exchanges (e.g., `credential_issued`, `presentation_verified`) are not affected.
175+
- Most applications that simply respond to the state of v2.0 credential exchanges (e.g., `credential_issued`, `presentation_verified`) are not affected.
110176
- Applications that parsed or logged the `by_format` contents must ensure the `ACAPY_DEBUG_WEBHOOKS` configuration is set, or better, update their logic to not require that information.
111177

112178
Because this change addresses a **privacy issue** (PII leakage), it is being included in the 1.3.x patch series rather than requiring a minor release increment.
@@ -795,7 +861,7 @@ With the focus of the pull requests for this release on stabilizing the implemen
795861
- The webhook sent after receipt of presentation by a verifier has been updated to include all of the information needed by the verifier so that the controller does not have to call the "Verify Presentation" endpoint. The issue with calling that endpoint after the presentation has been received is that there is a race condition between the controller and the ACA-Py cleanup process deleting completed Present Proof protocol instances. See [\#3081](https://github.com/hyperledger/aries-cloudagent-python/pull/3081) for additional details.
796862
- A fix to an obscure bug includes a change to the data sent to the controller after publishing multiple, endorsed credential definition revocation registries in a single call. The bug fix was to properly process the publishing. The breaking change is that when the process (now successfully) completes, the controller is sent the list of published credential definitions. Previously only a single value was being sent. See PR [\#3107](https://github.com/hyperledger/aries-cloudagent-python/pull/3107) for additional details.
797863
- The configuration settings around whether a multitenant wallet uses a single database vs. a database per tenant has been made more explicit. The previous settings were not clear, resulting in some deployments that were intended to be a database per tenant actually result in all tenants being in the same database. For details about the change, see [\#3105](https://github.com/hyperledger/aries-cloudagent-python/pull/3105).
798-
864+
799865
#### 1.0.0 Categorized List of Pull Requests
800866

801867
- LTS Support Policy:
@@ -2444,7 +2510,7 @@ stuff needed for a healthy, growing codebase.
24442510
- Multitenacy updates and fixes
24452511
- feat: create new JWT tokens and invalidate older for multitenancy [\#1725](https://github.com/hyperledger/aries-cloudagent-python/pull/1725) ([TimoGlastra](https://github.com/TimoGlastra))
24462512
- Multi-tenancy stale wallet clean up [\#1692](https://github.com/hyperledger/aries-cloudagent-python/pull/1692) ([dbluhm](https://github.com/dbluhm))
2447-
2513+
24482514
- Dependencies and internal code updates/fixes
24492515
- Update pyjwt to 2.4 [\#1829](https://github.com/hyperledger/aries-cloudagent-python/pull/1829) ([andrewwhitehead](https://github.com/andrewwhitehead))
24502516
- Fix external Outbound Transport loading code [\#1812](https://github.com/hyperledger/aries-cloudagent-python/pull/1812) ([frostyfrog](https://github.com/frostyfrog))
@@ -2597,7 +2663,7 @@ The following is an annotated list of PRs in the release, including a link to ea
25972663
- Update docker scripts to use new & improved docker IP detection [#1565](https://github.com/hyperledger/aries-cloudagent-python/pull/1565)
25982664
- Release Adminstration:
25992665
- Changelog and RTD updates for the pending 0.7.3 release [#1553](https://github.com/hyperledger/aries-cloudagent-python/pull/1553)
2600-
2666+
26012667
## 0.7.2
26022668

26032669
### November 15, 2021

Managing-ACA-Py-Doc-Site.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ and mkdocs configuration.
2020

2121
When the GitHub Action fires, it runs a container that carries out the following steps:
2222

23-
- Checks out the triggering branch, either `main` or `docs-v<version>` (e.g `docs-v1.4.0`).
23+
- Checks out the triggering branch, either `main` or `docs-v<version>` (e.g `docs-v1.5.0`).
2424
- Runs the script [scripts/prepmkdocs.sh], which moves and updates some of the
2525
markdown files so that they fit into the generated site. See the comments in
2626
the scripts for details about the copying and editing done via the script. In
@@ -97,7 +97,7 @@ To delete the documentation version, do the following:
9797
- Check your `git status` and make sure there are no changes in the branch --
9898
e.g., new files that shouldn't be added to the `gh-pages` branch. If there are
9999
any -- delete the files so they are not added.
100-
- Remove the folder for the RC. For example `rm -rf 1.4.0rc1`
100+
- Remove the folder for the RC. For example `rm -rf 1.5.0rc0`
101101
- Edit the `versions.json` file and remove the reference to the RC release in
102102
the file.
103103
- Push the changes via a PR to the ACA-Py `gh-pages` branch (don't PR them into

PUBLISHING.md

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ a major, minor or patch release, per [semver](https://semver.org/) rules.
66

77
Once ready to do a release, create a local branch that includes the following updates:
88

9-
1. Create a local PR branch from an updated `main` branch, e.g. "1.4.0".
9+
1. Create a local PR branch from an updated `main` branch, e.g. "1.5.0rc0".
1010

1111
2. See if there are any Document Site `mkdocs` changes needed. Run the script
1212
`./scripts/prepmkdocs.sh; mkdocs`. Watch the log, noting particularly if
@@ -94,6 +94,14 @@ cd docs; rm -rf generated; sphinx-apidoc -f -M -o ./generated ../acapy_agent/ $
9494
cd docs; sphinx-build -b html -a -E -c ./ ./ ./_build; cd ..
9595
```
9696

97+
Sphinx can be run with docker -- at least the first step. Here is the command to use:
98+
99+
```sh
100+
cd docs; cp -r ../docker_agent .; rm -rf generated; docker run -it --rm -v .:/docs sphinxdoc/sphinx sphinx-apidoc -f -M -o ./generated ./acapy_agent/ $(find ./acapy_agent/ -name '*tests*'); rm -rf docker_agent; cd ..
101+
```
102+
103+
For the build test, the RTD Sphinx theme needs to be added to the docker image, and I've not figured out that yet.
104+
97105
7. Search across the repository for the previous version number and update it
98106
everywhere that makes sense. The CHANGELOG.md entry for the previous release
99107
is a likely exception, and the `pyproject.toml` in the root **MUST** be
@@ -138,16 +146,16 @@ cd docs; sphinx-build -b html -a -E -c ./ ./ ./_build; cd ..
138146

139147
Published images are automatically tagged with multiple tags for flexibility:
140148

141-
- **Regular Releases** (e.g., `1.4.0`):
142-
- `py3.12-1.4.0` - Python version specific tag
143-
- `1.4.0` - Semantic version tag
144-
- `1.4` - Major.minor tag (moves to latest patch release)
149+
- **Regular Releases** (e.g., `1.5.0`):
150+
- `py3.12-1.5.0` - Python version specific tag
151+
- `1.5.0` - Semantic version tag
152+
- `1.5` - Major.minor tag (moves to latest patch release)
145153
- `latest` - Only assigned if this is the highest semantic version
146154

147-
- **Release Candidates** (e.g., `1.4.0-rc1`):
148-
- `py3.12-1.4.0-rc1` - Python version specific RC tag
149-
- `1.4.0-rc1` - Semantic version RC tag
150-
- **Note**: RC releases do NOT receive major.minor (`1.4`) or `latest` tags
155+
- **Release Candidates** (e.g., `1.5.0-rc0`):
156+
- `py3.12-1.5.0-rc0` - Python version specific RC tag
157+
- `1.5.0-rc0` - Semantic version RC tag
158+
- **Note**: RC releases do NOT receive major.minor (`1.5`) or `latest` tags
151159

152160
The `latest` tag is explicitly managed by comparing semantic versions across all
153161
releases. It will only be applied to the highest non-RC semantic version. For
@@ -171,7 +179,7 @@ cd docs; sphinx-build -b html -a -E -c ./ ./ ./_build; cd ..
171179
[publish.yml]: https://github.com/openwallet-foundation/acapy/blob/main/.github/workflows/publish.yml
172180

173181
12. When a new release is tagged, create a new branch at the same commit with
174-
the branch name in the format `docs-v<version>`, for example, `docs-v1.4.0`.
182+
the branch name in the format `docs-v<version>`, for example, `docs-v1.5.0`.
175183
The creation of the branch triggers the execution of the [publish-docs]
176184
GitHub Action which generates the documentation for the new release,
177185
publishing it at [https://aca-py.org]. The GitHub Action also executes when

docs/deploying/ContainerImagesAndGithubActions.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,16 @@ Click [here](https://github.com/openwallet-foundation/acapy/pkgs/container/acapy
4242

4343
The following is the ACA-Py container images tagging format:
4444

45-
**Regular Releases** (e.g., publishing version `1.4.0`):
46-
- `pyV.vv-X.Y.Z` - Python version specific tag (e.g., `py3.12-1.4.0`)
47-
- `X.Y.Z` - Semantic version tag (e.g., `1.4.0`)
48-
- `X.Y` - Major.minor version tag (e.g., `1.4`), automatically moves to the latest patch release
49-
- `latest` - Automatically assigned to the highest semantic version (non-RC) release
50-
51-
**Release Candidates** (e.g., publishing version `1.4.0-rc1`):
52-
- `pyV.vv-X.Y.Z-rcN` - Python version specific RC tag (e.g., `py3.12-1.4.0-rc1`)
53-
- `X.Y.Z-rcN` - Semantic version RC tag (e.g., `1.4.0-rc1`)
54-
- **Note**: RC releases do NOT receive major.minor (`X.Y`) or `latest` tags
45+
**Regular Releases** (e.g., `1.5.0`):
46+
- `py3.12-1.5.0` - Python version specific tag
47+
- `1.5.0` - Semantic version tag
48+
- `1.5` - Major.minor tag (moves to latest patch release)
49+
- `latest` - Only assigned if this is the highest semantic version
50+
51+
**Release Candidates** (e.g., `1.5.0-rc0`):
52+
- `py3.12-1.5.0-rc0` - Python version specific RC tag
53+
- `1.5.0-rc0` - Semantic version RC tag
54+
- **Note**: RC releases do NOT receive major.minor (`1.5`) or `latest` tags
5555

5656
**Nightly Builds**:
5757
- `pyV.vv-nightly-YYYY-MM-DD` - Date-stamped nightly build

docs/features/PlugIns.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,9 +107,9 @@ When plugins are installed, ACA-Py logs detailed information including:
107107

108108
Example log output:
109109
```
110-
INFO: Auto-installing plugins from acapy-plugins repository: webvh, connection_update (current ACA-Py version (1.4.0))
111-
INFO: Installing plugin: webvh (version: 1.4.0)
112-
INFO: Successfully installed plugin: webvh (version: 1.4.0)
110+
INFO: Auto-installing plugins from acapy-plugins repository: webvh, connection_update (current ACA-Py version (1.5.0))
111+
INFO: Installing plugin: webvh (version: 1.5.0)
112+
INFO: Successfully installed plugin: webvh (version: 1.5.0)
113113
```
114114

115115
### Checking Installed Plugin Versions

0 commit comments

Comments
 (0)