{"id":17136260,"url":"https://github.com/openwallet-foundation/acapy","last_synced_at":"2026-03-03T00:12:00.770Z","repository":{"id":37271236,"uuid":"193556007","full_name":"openwallet-foundation/acapy","owner":"openwallet-foundation","description":"ACA-Py is a foundation for building decentralized identity applications and services running in non-mobile environments.","archived":false,"fork":false,"pushed_at":"2026-01-13T02:24:06.000Z","size":102431,"stargazers_count":477,"open_issues_count":169,"forks_count":533,"subscribers_count":23,"default_branch":"main","last_synced_at":"2026-01-13T03:35:47.910Z","etag":null,"topics":["aca-py","hyperledger-indy","indy-catalyst","trust-over-ip","verifiable-credentials","verifiable-organizations-network","verifiable-origins","von"],"latest_commit_sha":null,"homepage":"https://aca-py.org","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/openwallet-foundation.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":"GOVERNANCE.md","roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":"MAINTAINERS.md","copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-06-24T18:12:14.000Z","updated_at":"2026-01-12T15:40:56.000Z","dependencies_parsed_at":"2022-07-10T14:17:16.379Z","dependency_job_id":"7646ad71-df33-4b5d-8642-bc532803fcdb","html_url":"https://github.com/openwallet-foundation/acapy","commit_stats":{"total_commits":4466,"total_committers":112,"mean_commits":39.875,"dds":0.8105687416032243,"last_synced_commit":"dab1f30ae1974ab80117779d5e3c29ba8139ada7"},"previous_names":["openwallet-foundation/acapy","hyperledger/aries-cloudagent-python"],"tags_count":132,"template":false,"template_full_name":null,"purl":"pkg:github/openwallet-foundation/acapy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openwallet-foundation%2Facapy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openwallet-foundation%2Facapy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openwallet-foundation%2Facapy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openwallet-foundation%2Facapy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/openwallet-foundation","download_url":"https://codeload.github.com/openwallet-foundation/acapy/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/openwallet-foundation%2Facapy/sbom","scorecard":{"id":475396,"data":{"date":"2025-08-14T21:23:30Z","repo":{"name":"github.com/openwallet-foundation/acapy","commit":"83f280c32a39c73a39f84a3a003ddf9c30529703"},"scorecard":{"version":"v5.2.1","commit":"ab2f6e92482462fe66246d9e32f642855a691dc1"},"score":7.9,"checks":[{"name":"Code-Review","score":10,"reason":"all changesets reviewed","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#code-review"}},{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#security-policy"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#dangerous-workflow"}},{"name":"Dependency-Update-Tool","score":10,"reason":"update tool detected","details":["Info: detected update tool: Dependabot: .github/dependabot.yml:1"],"documentation":{"short":"Determines if the project uses a dependency update tool.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#dependency-update-tool"}},{"name":"Maintained","score":10,"reason":"30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'contents' permission set to 'read': .github/workflows/nightly.yml:63","Warn: jobLevel 'packages' permission set to 'write': .github/workflows/nightly.yml:64","Warn: jobLevel 'contents' permission set to 'write': .github/workflows/publish-docs.yml:17","Info: jobLevel 'contents' permission set to 'read': .github/workflows/publish.yml:45","Info: jobLevel 'contents' permission set to 'read': .github/workflows/publish.yml:97","Info: jobLevel 'contents' permission set to 'read': .github/workflows/snyk-lts.yml:20","Info: jobLevel 'contents' permission set to 'read': .github/workflows/snyk.yml:16","Info: topLevel 'contents' permission set to 'read': .github/workflows/bdd-integration-tests.yml:13","Info: topLevel 'pull-requests' permission set to 'read': .github/workflows/bdd-integration-tests.yml:14","Warn: topLevel 'checks' permission set to 'write': .github/workflows/bdd-integration-tests.yml:15","Info: topLevel 'contents' permission set to 'read': .github/workflows/bdd-interop-tests.yml:13","Info: topLevel 'pull-requests' permission set to 'read': .github/workflows/bdd-interop-tests.yml:14","Warn: topLevel 'checks' permission set to 'write': .github/workflows/bdd-interop-tests.yml:15","Info: topLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:10","Info: topLevel 'contents' permission set to 'read': .github/workflows/format.yml:9","Info: topLevel 'pull-requests' permission set to 'read': .github/workflows/format.yml:10","Warn: topLevel 'checks' permission set to 'write': .github/workflows/format.yml:11","Info: topLevel 'contents' permission set to 'read': .github/workflows/nightly.yml:9","Info: topLevel 'pull-requests' permission set to 'read': .github/workflows/nightly.yml:10","Warn: topLevel 'checks' permission set to 'write': .github/workflows/nightly.yml:11","Info: topLevel 'contents' permission set to 'read': .github/workflows/pip-audit.yml:7","Warn: topLevel 'checks' permission set to 'write': .github/workflows/pr-tests.yml:9","Info: topLevel 'contents' permission set to 'read': .github/workflows/pr-tests.yml:7","Info: topLevel 'pull-requests' permission set to 'read': .github/workflows/pr-tests.yml:8","Info: topLevel 'contents' permission set to 'read': .github/workflows/publish-docs.yml:11","Info: topLevel 'contents' permission set to 'read': .github/workflows/publish.yml:27","Info: topLevel 'contents' permission set to 'read': .github/workflows/pythonpublish.yml:8","Info: topLevel 'contents' permission set to 'read': .github/workflows/scenario-integration-tests.yml:13","Info: topLevel 'pull-requests' permission set to 'read': .github/workflows/scenario-integration-tests.yml:14","Warn: topLevel 'checks' permission set to 'write': .github/workflows/scenario-integration-tests.yml:15","Info: topLevel permissions set to 'read-all': .github/workflows/scorecard.yml:21","Info: topLevel 'contents' permission set to 'read': .github/workflows/snyk-lts.yml:15","Info: topLevel 'contents' permission set to 'read': .github/workflows/snyk.yml:11","Info: topLevel 'contents' permission set to 'read': .github/workflows/sonar-merge-main.yml:8","Warn: topLevel 'checks' permission set to 'write': .github/workflows/sonar-merge-main.yml:9","Info: topLevel 'contents' permission set to 'read': .github/workflows/sonar-pr.yml:10","Info: topLevel 'pull-requests' permission set to 'read': .github/workflows/sonar-pr.yml:11","Warn: topLevel 'checks' permission set to 'write': .github/workflows/sonar-pr.yml:12","Warn: topLevel 'contents' permission set to 'write': .github/workflows/tag-recreate-lts.yml:11","Warn: topLevel 'packages' permission set to 'write': .github/workflows/tag-recreate-lts.yml:12"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#token-permissions"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#license"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":10,"reason":"SAST tool detected","details":["Info: SAST configuration detected: CodeQL","Info: SAST configuration detected: Snyk","Info: SAST configuration detected: Snyk","Info: all commits (30) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#sast"}},{"name":"Pinned-Dependencies","score":3,"reason":"dependency not pinned by hash detected -- score normalized to 3","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/tag-recreate-lts.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/openwallet-foundation/acapy/tag-recreate-lts.yml/main?enable=pin","Warn: containerImage not pinned by hash: .devcontainer/Dockerfile:3","Warn: containerImage not pinned by hash: demo/docker-agent/Dockerfile.acapy:1: pin your Docker image by updating ghcr.io/openwallet-foundation/acapy-agent:py3.12-1.3.1 to ghcr.io/openwallet-foundation/acapy-agent:py3.12-1.3.1@sha256:64ff7a2888eb6714f6b1499aa5b6c6fcb4ca674579b11d587b6ff1f23706e664","Warn: containerImage not pinned by hash: demo/docker-test/db/Dockerfile:1: pin your Docker image by updating postgres:17 to postgres:17@sha256:19ad070ea172efd48d7cae52297caaf845a3625728674bbc1a6efb679ab7befe","Warn: containerImage not pinned by hash: demo/elk-stack/elasticsearch/Dockerfile:4","Warn: containerImage not pinned by hash: demo/elk-stack/extensions/enterprise-search/Dockerfile:4","Warn: containerImage not pinned by hash: demo/elk-stack/extensions/filebeat/Dockerfile:3","Warn: containerImage not pinned by hash: demo/elk-stack/extensions/fleet/Dockerfile:3","Warn: containerImage not pinned by hash: demo/elk-stack/extensions/heartbeat/Dockerfile:3","Warn: containerImage not pinned by hash: demo/elk-stack/extensions/metricbeat/Dockerfile:3","Warn: containerImage not pinned by hash: demo/elk-stack/kibana/Dockerfile:4","Warn: containerImage not pinned by hash: demo/elk-stack/logstash/Dockerfile:4","Warn: containerImage not pinned by hash: demo/elk-stack/setup/Dockerfile:4","Warn: containerImage not pinned by hash: demo/multi-demo/Dockerfile.acapy:1: pin your Docker image by updating ghcr.io/openwallet-foundation/acapy-agent:py3.12-1.3.1 to ghcr.io/openwallet-foundation/acapy-agent:py3.12-1.3.1@sha256:64ff7a2888eb6714f6b1499aa5b6c6fcb4ca674579b11d587b6ff1f23706e664","Warn: containerImage not pinned by hash: demo/playground/Dockerfile.acapy:1: pin your Docker image by updating ghcr.io/openwallet-foundation/acapy-agent:py3.12-1.3.1 to ghcr.io/openwallet-foundation/acapy-agent:py3.12-1.3.1@sha256:64ff7a2888eb6714f6b1499aa5b6c6fcb4ca674579b11d587b6ff1f23706e664","Warn: containerImage not pinned by hash: demo/playground/examples/Dockerfile.test.runner:1: pin your Docker image by updating python:3.12-slim to python:3.12-slim@sha256:d67a7b66b989ad6b6d6b10d428dcc5e0bfc3e5f88906e67d490c4d3daac57047","Warn: containerImage not pinned by hash: docker/Dockerfile:2","Warn: containerImage not pinned by hash: docker/Dockerfile:15","Warn: containerImage not pinned by hash: docker/Dockerfile.bdd:1","Warn: containerImage not pinned by hash: docker/Dockerfile.demo:2","Warn: containerImage not pinned by hash: docker/Dockerfile.fixpermissions:5","Warn: containerImage not pinned by hash: docker/Dockerfile.run:2: pin your Docker image by updating python:3.12-slim-bookworm to python:3.12-slim-bookworm@sha256:42cf2422587a3dac0e0a3674a4d86f01570d5d7260588f3845f51e6176d8134b","Warn: containerImage not pinned by hash: docker/Dockerfile.test:2","Warn: containerImage not pinned by hash: docs/mkdocs-dockerfile.yml:1: pin your Docker image by updating squidfunk/mkdocs-material to squidfunk/mkdocs-material@sha256:bb7b015690d9fb5ef0dbc98ca3520f153aa43129fb96aec5ca54c9154dc3b729","Warn: containerImage not pinned by hash: scenarios/Dockerfile:1: pin your Docker image by updating python:3.10 to python:3.10@sha256:c69e40390fbbcbe98785d0bec0e93a9308850c6727edba2293bba4c79bdaffb5","Warn: downloadThenRun not pinned by hash: .devcontainer/Dockerfile:9-16","Warn: pipCommand not pinned by hash: demo/playground/examples/Dockerfile.test.runner:5","Warn: pipCommand not pinned by hash: docker/Dockerfile:4","Warn: pipCommand not pinned by hash: docker/Dockerfile:96-100","Warn: pipCommand not pinned by hash: docker/Dockerfile.bdd:4","Warn: pipCommand not pinned by hash: docker/Dockerfile.demo:16","Warn: pipCommand not pinned by hash: docker/Dockerfile.demo:26","Warn: pipCommand not pinned by hash: docker/Dockerfile.demo:32","Warn: pipCommand not pinned by hash: docker/Dockerfile.run:15","Warn: pipCommand not pinned by hash: docker/Dockerfile.test:12","Warn: pipCommand not pinned by hash: docs/mkdocs-dockerfile.yml:2","Warn: downloadThenRun not pinned by hash: scenarios/Dockerfile:7","Warn: pipCommand not pinned by hash: .devcontainer/post-install.sh:8","Warn: pipCommand not pinned by hash: .devcontainer/post-install.sh:9","Warn: pipCommand not pinned by hash: .devcontainer/post-install.sh:12","Warn: pipCommand not pinned by hash: .github/workflows/pip-audit.yml:19","Warn: pipCommand not pinned by hash: .github/workflows/pip-audit.yml:20","Warn: pipCommand not pinned by hash: .github/workflows/publish-docs.yml:31","Warn: pipCommand not pinned by hash: .github/workflows/pythonpublish.yml:26","Warn: pipCommand not pinned by hash: .github/workflows/pythonpublish.yml:27","Info:  29 out of  30 GitHub-owned GitHubAction dependencies pinned","Info:  22 out of  22 third-party GitHubAction dependencies pinned","Info:   2 out of  26 containerImage dependencies pinned","Info:   0 out of   2 downloadThenRun dependencies pinned","Info:   0 out of  18 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#pinned-dependencies"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/publish.yml:30"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#packaging"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#branch-protection"}},{"name":"CI-Tests","score":10,"reason":"15 out of 15 merged PRs checked by a CI test -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project runs tests before pull requests are merged.","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#ci-tests"}},{"name":"Contributors","score":10,"reason":"project has 38 contributing companies or organizations","details":["Info: found contributions from: 1CRM, BCDevOps, ICCS-ISAC, Indicio-tech, OdysseyMomentum, OpSecId, PSPC-SPAC-buyandsell, Quartech, animo, anon solutions, bcgov, bcgov-c, becker-carroll, cloudcompass, decentralized-identity, didx-xyz, dutch-trust-network, full stack developer, hyperledger, indicio-tech, kynetx, neoteric technologies, ntt data services, nyit-vancouver, odysseyhack, openid, openwallet-foundation, opsecid, pebble-dev, petri dish development, portage cybertech, senior solutions architect @quartech, shopify, sicpa-dlab, sk telecom, sktston, sovrin-foundation, ula-aca"],"documentation":{"short":"Determines if the project has a set of contributors from multiple organizations (e.g., companies).","url":"https://github.com/ossf/scorecard/blob/ab2f6e92482462fe66246d9e32f642855a691dc1/docs/checks.md#contributors"}}]},"last_synced_at":"2025-08-19T15:09:13.948Z","repository_id":37271236,"created_at":"2025-08-19T15:09:13.948Z","updated_at":"2025-08-19T15:09:13.948Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28472625,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-15T22:13:38.078Z","status":"ssl_error","status_checked_at":"2026-01-15T22:12:11.737Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aca-py","hyperledger-indy","indy-catalyst","trust-over-ip","verifiable-credentials","verifiable-organizations-network","verifiable-origins","von"],"created_at":"2024-10-14T20:01:28.055Z","updated_at":"2026-01-15T22:18:16.941Z","avatar_url":"https://github.com/openwallet-foundation.png","language":"Python","funding_links":[],"categories":["🛠 Tools \u0026 Technologies","Python"],"sub_categories":[],"readme":"# ACA-Py -- A Cloud Agent - Python  \u003c!-- omit in toc --\u003e\n\n![Python](https://img.shields.io/badge/python-3.13-blue.svg)\n[![PyPI version](https://img.shields.io/pypi/v/acapy-agent)](https://pypi.org/project/acapy-agent/)\n[![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=openwallet-foundation_acapy\u0026metric=ncloc)](https://sonarcloud.io/summary/new_code?id=openwallet-foundation_acapy)\n[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=openwallet-foundation_acapy\u0026metric=coverage)](https://sonarcloud.io/summary/new_code?id=openwallet-foundation_acapy)\n[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=openwallet-foundation_acapy\u0026metric=security_rating)](https://sonarcloud.io/summary/new_code?id=openwallet-foundation_acapy)\n[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=openwallet-foundation_acapy\u0026metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=openwallet-foundation_acapy)\n[![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/openwallet-foundation/acapy/badge)](https://scorecard.dev/viewer/?uri=github.com/openwallet-foundation/acapy)\n[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/openwallet-foundation/acapy)\n\nACA-Py is a production-ready, open-source self-sovereign identity (SSI) agent for building non-mobile decentralized trust services—such as verifiable credential issuers, holders, and verifiers—using any language capable of sending and receiving HTTP requests. Maintained by the OpenWallet Foundation, ACA-Py began in the Hyperledger Indy/AnonCreds/Aries ecosystem and has evolved to include support multiple verifiable credential formats and exchange protocols. It serves as a foundational building block for Trust Over IP-based ecosystems.\n\nFull access to an organized set of all of the ACA-Py documents is available at [https://aca-py.org](https://aca-py.org).\nCheck it out! It's much easier to navigate than the ACA-Py GitHub repo for reading the documentation. ACA-Py documentation is also AI-generated on the [DeepWiki] website at [DeepWiki ACA-Py]. DeepWiki provides a chatbot interface that can be used to ask questions about ACA-Py and get answers based on the documentation.\n\n[DeepWiki]: https://deepwiki.com\n[DeepWiki ACA-Py]: https://deepwiki.com/openwallet-foundation/acapy\n\nVisit the ACA-Py Plugins Store at [https://plugins.aca-py.org](https://plugins.aca-py.org) to find ready-to-use functionality to add to your ACA-Py deployment, and to learn how to build your own plugins.\n\n## Overview\n\nACA-Py is a foundation for building Verifiable Credential (VC) ecosystems. It operates in the second and third layers of the [Trust Over IP Model](https://trustoverip.org/wp-content/uploads/model-panel-full-2048x1146.png) using a variety of verifiable credential formats and protocols. ACA-Py runs on servers (cloud, enterprise, IoT devices, and so forth), and is not designed to run on mobile devices.\n\nACA-Py includes support for the concepts and features that make up [Aries Interop Profile (AIP) 2.0](https://github.com/decentralized-identity/aries-rfcs/tree/main/concepts/0302-aries-interop-profile#aries-interop-profile-version-20). [ACA-Py’s supported features](./docs/features/SupportedRFCs.md) include, most importantly, protocols for issuing, verifying, and holding verifiable credentials using both [Hyperledger AnonCreds] verifiable credential format, and the [W3C Standard Verifiable Credential Data Model] format using JSON-LD with LD-Signatures and BBS+ Signatures. Coming soon -- issuing and presenting [Hyperledger AnonCreds] verifiable credentials using the [W3C Standard Verifiable Credential Data Model] format.\n\n[Hyperledger AnonCreds]: https://www.lfdecentralizedtrust.org/projects/anoncreds\n[W3C Standard Verifiable Credential Data Model]: https://www.w3.org/TR/vc-data-model/\n\nTo use ACA-Py you create a business logic \"controller\" that talks to an ACA-Py instance (sending HTTP requests and receiving webhook notifications), and ACA-Py handles the various protocols and related functionality. Your controller can be built in any language that supports making and receiving HTTP requests; knowledge of Python is not needed. Together, this means you can focus on building VC solutions using familiar web development technologies, instead of having to learn the nuts and bolts of low-level cryptography and Trust over IP-type protocols.\n\nThis [checklist-style overview document](./docs/features/SupportedRFCs.md) provides a full list of the features in ACA-Py.\nThe following is a list of some of the core features needed for a production deployment, with a link to detailed information about the capability.\n\n## LTS Releases\n\nThe ACA-Py community provides periodic releases with new features and\nimprovements. Certain releases are designated by the ACA-Py maintainers as\nlong-term support (LTS) releases and listed in this document. Critical bugs and\nimportant (as determined by the ACA-Py Maintainers) fixes are backported to\nthe active LTS releases. Each LTS release will be supported with patches for **9\nmonths** following the designation of the **next** LTS Release. For more details see\nthe [LTS strategy](./LTS-Strategy.md).\n\n### LTS Docker Images\n\nACA-Py publishes Git tags in the format `x.y-lts` (e.g., `1.2-lts`) along with \ncorresponding Docker images to the GitHub Container Registry (GHCR) for each LTS release. These \nDocker images are tagged with a stable `-lts` suffix, making it easier for developers to rely on \na consistent and maintained version line.\n\nYou can pull the latest LTS image for version `1.2` using the following image tag:\n\n```bash\nghcr.io/openwallet-foundation/acapy-agent:py3.12-1.2-lts\n```\n\nThe `-lts` tags are kept up to date with the latest patch releases from the corresponding \n`*.lts` branches. This ensures that consumers of the LTS Docker images always receive the most recent, \nsupported version within that release series.\n\n**Current LTS releases:**\n\n- Release [1.3](https://github.com/openwallet-foundation/acapy/releases/tag/1.3.1) **Current LTS Release**\n- Release [1.2](https://github.com/openwallet-foundation/acapy/releases/tag/1.2.5) **End of Life: April 2026**\n- Release [0.12](https://github.com/openwallet-foundation/acapy/releases/tag/0.12.8) **End of Life: October 2025**\n\n**Past LTS releases:**\n\n- Release [0.11](https://github.com/openwallet-foundation/acapy/releases/tag/0.11.3) **End of Life: January 2025**\n\nUnless specified in the **Breaking Changes** section of the ACA-Py\n[CHANGELOG](./CHANGELOG.md), all LTS patch releases will be able to be deployed\n**without** an upgrade process from its prior release. Minor/Major release upgrades\nsteps (if any) of ACA-Py are tested and documented in the ACA-Py\n[CHANGELOG](./CHANGELOG.md) per release and in the project documents published\nat [https://aca-py.org](https://aca-py.org) from the markdown files in this\nrepository.\n\nACA-Py releases and release notes can be found on the [GitHub releases\npage](https://github.com/openwallet-foundation/acapy/releases).\n\n### Multi-Tenant\n\nACA-Py supports \"multi-tenant\" scenarios. In these scenarios, one (scalable) instance of ACA-Py uses one database instance, and are together capable of managing separate secure storage (for private keys, DIDs, credentials, etc.) for many different actors. This enables (for example) an \"issuer-as-a-service\", where an enterprise may have many VC issuers, each with different identifiers, using the same instance of ACA-Py to interact with VC holders as required. Likewise, an ACA-Py instance could be a \"cloud wallet\" for many holders (e.g. people or organizations) that, for whatever reason, cannot use a mobile device for a wallet. Learn more about multi-tenant deployments [here](./docs/features/Multitenancy.md).\n\n### Mediator Service\n\nStartup options allow the use of an ACA-Py as a DIDComm [mediator](https://github.com/decentralized-identity/aries-rfcs/tree/main/concepts/0046-mediators-and-relays#summary) using core DIDComm protocols to coordinate its mediation role. Such an ACA-Py instance receives, stores and forwards messages to DIDComm agents that (for example) lack an addressable endpoint on the Internet such as a mobile wallet. A live instance of a public mediator based on ACA-Py is available [here](https://indicio-tech.github.io/mediator/) from [Indicio, PBC](https://indicio.tech). Learn more about deploying a mediator [here](./docs/features/Mediation.md). See the [DIDComm Mediator Service](https://github.com/openwallet-foundation/didcomm-mediator-service) for a \"best practices\" configuration of an Aries mediator.\n\n### Indy Transaction Endorsing\n\nACA-Py supports a Transaction Endorsement protocol, for agents that don't have write access to an Indy ledger.  Endorser support is documented [here](./docs/features/Endorser.md).\n\n### Scaled Deployments\n\nACA-Py supports deployments in scaled environments such as in Kubernetes environments where ACA-Py and its storage components can be horizontally scaled as needed to handle the load.\n\n### VC-API Endpoints\n\nA set of endpoints conforming to the vc-api specification are included to manage w3c credentials and presentations. They are documented [here](./docs/features/JsonLdCredentials.md#vc-api) and a postman demo is available [here](./docs/features/JsonLdCredentials.md#vc-api).\n\n## Example Uses\n\nThe business logic you use with ACA-Py is limited only by your imagination. Possible applications include:\n\n- An interface to a legacy system to issue verifiable credentials\n- An authentication service based on the presentation of verifiable credential proofs\n- An enterprise wallet to hold and present verifiable credentials about that enterprise\n- A user interface for a person to use a wallet not stored on a mobile device\n- An application embedded in an IoT device, capable of issuing verifiable credentials about collected data\n- A persistent connection to other agents that enables secure messaging and notifications\n- Custom code to implement a new service.\n\n## Getting Started\n\nFor those new to SSI, Wallets, and ACA-Py, there are a couple of Linux Foundation edX courses that provide a good starting point.\n\n- [Identity in Hyperledger: Indy, Aries and Ursa](https://www.edx.org/course/identity-in-hyperledger-aries-indy-and-ursa)\n- [Becoming a Hyperledger Aries Developer](https://www.edx.org/course/becoming-a-hyperledger-aries-developer)\n\nThe latter is the most useful for developers wanting to get a solid basis in using ACA-Py and other Aries Frameworks.\n\nAlso included here is a much more concise (but less maintained) [Getting Started Guide](./docs/gettingStarted/README.md) that will take you from knowing next to nothing about decentralized identity to developing Aries-based business apps and services. You’ll run an Indy ledger (with no ramp-up time), ACA-Py apps and developer-oriented demos. The guide has a table of contents so you can skip the parts you already know.\n\n### Understanding the Architecture\n\nThere is an [architectural deep dive webinar](https://www.youtube.com/watch?v=FXTQEtB4fto\u0026feature=youtu.be) presented by the ACA-Py team, and [slides from the webinar](https://docs.google.com/presentation/d/1K7qiQkVi4n-lpJ3nUZY27OniUEM0c8HAIk4imCWCx5Q/edit#slide=id.g5d43fe05cc_0_77) are also available. The picture below gives a quick overview of the architecture, showing an instance of ACA-Py, a controller and the interfaces between the controller and ACA-Py, and the external paths to other agents and public ledgers on the Internet.\n\n![drawing](./aca-py_architecture.png)\n\nYou can extend ACA-Py using plug-ins, which can be loaded at runtime.  Plug-ins are mentioned in the [webinar](https://docs.google.com/presentation/d/1K7qiQkVi4n-lpJ3nUZY27OniUEM0c8HAIk4imCWCx5Q/edit#slide=id.g5d43fe05cc_0_145) and are [described in more detail here](./docs/features/PlugIns.md). An ever-expanding set of ACA-Py plugins can be found\nin the [ACA-Py Plugins repository]. Check them out -- it might already have the very plugin you need!\n\n[ACA-Py Plugins repository]: https://plugins.aca-py.org\n\n### Installation and Usage\n\nUse the [\"install and go\" page for developers](./docs/features/DevReadMe.md) if you are comfortable with decentralized trust concepts. ACA-Py can be run with Docker without installation (highly recommended), or can be installed [from PyPi](https://pypi.org/project/acapy-agent/). In the repository `/demo` folder there is a full set of demos for developers to use in getting up to speed quickly. Start with the [Traction Workshop] to go through a complete ACA-Py-based Issuer-Holder-Verifier flow in about 20 minutes. Next, the [Alice-Faber Demo](./docs/demo/README.md) is a great way for developers try a zero-install example of how to use the ACA-Py API to operate a couple of Agents. The [Read the Docs](https://aries-cloud-agent-python.readthedocs.io/en/latest/) overview is also a way to understand the internal modules and APIs that make up an ACA-Py instance.\n\nIf you would like to develop on ACA-Py locally note that we use Poetry for dependency management and packaging. If you are unfamiliar with poetry please see our [cheat sheet](./docs/deploying/Poetry.md)\n\n[Traction Workshop]: ./docs/demo/ACA-Py-Workshop.md\n\n## About the ACA-Py Admin API\n\nThe [overview of ACA-Py’s API](./docs/features/AdminAPI.md) is a great starting place for learning about the ACA-Py API when you are starting to build your own controller.\n\nAn ACA-Py instance puts together an OpenAPI-documented REST interface based on the protocols that are loaded. This is used by a controller application (written in any language) to manage the behavior of the agent. The controller can initiate actions (e.g. issuing a credential) and can respond to agent events (e.g. sending a presentation request after a connection is accepted). Agent events are delivered to the controller as webhooks to a configured URL.\n\nTechnical note: the administrative API exposed by the agent for the controller to use must be protected with an API key (using the --admin-api-key command line arg) or deliberately left unsecured using the --admin-insecure-mode command line arg. The latter should not be used other than in development if the API is not otherwise secured.\n\n## Troubleshooting\n\nThere are a number of resources for getting help with ACA-Py and troubleshooting\nany problems you might run into. The\n[Troubleshooting](./docs/testing/Troubleshooting.md) document contains some\nguidance about issues that have been experienced in the past. Feel free to\nsubmit PRs to supplement the troubleshooting document! Searching the [ACA-Py\nGitHub issues](https://github.com/openwallet-foundation/acapy/issues)\nmay uncovers challenges you are having that others have experienced, often\nwith solutions. As well, there is the \"aca-py\"\nchannel on the OpenWallet Foundation Discord chat server ([invitation\nhere](https://discord.gg/openwalletfoundation)).\n\n## Credit\n\nThe initial implementation of ACA-Py was developed by the Government of British Columbia’s Digital Trust Team in Canada. To learn more about what’s happening with decentralized identity and digital trust in British Columbia, checkout the [BC Digital Trust] website.\n\n[BC Digital Trust]: https://digital.gov.bc.ca/digital-trust/\n\nSee the [MAINTAINERS.md](./MAINTAINERS.md) file for how to find a list of the current ACA-Py\nmaintainers, and guidelines for becoming a Maintainer. We'd love to have you\njoin the team if you are willing and able to carry out the [duties of a Maintainer](./MAINTAINERS.md#the-duties-of-a-maintainer).\n\n## Contributing\n\nPull requests are welcome! Please read our [contributions guide](./CONTRIBUTING.md) and submit your PRs. We enforce [developer certificate of origin](https://developercertificate.org/) (DCO) commit signing — [guidance](https://github.com/apps/dco) on this is available. We also welcome issues submitted about problems you encounter in using ACA-Py.\n\n## License\n\n[Apache License Version 2.0](https://github.com/openwallet-foundation/acapy/blob/main/LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenwallet-foundation%2Facapy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopenwallet-foundation%2Facapy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopenwallet-foundation%2Facapy/lists"}