Aroha
Get started
All documentation

DocsReference

SDK Feature Matrix

This matrix comes from reading the source of each SDK in this repository on 2026-10-08, updated 2026-10-19 for task mandates, the conversation profile and the registry client in Go and Java. It records what the code does, not what we plan. If you change an SDK, update this page in the same PR.

Summary: TypeScript is the reference implementation. Python is beta. Go and Java are partial. All four implement the envelope with the hardened validation rules, v2 mandate tokens with full chain verification, and E-DID / Key Event Log verification, each tested against the shared vectors in packages/aroha-credentials/test-vectors/mandate-v2.json (plus cross-language interop tests). Task mandates, conversation-profile verification and the registry client are now in all four SDKs, with task-mandate vectors (task-mandate-v2.json, task-mandate-v2-cases.json) and live interop in both directions against TypeScript. Not yet outside TypeScript: multi-hop task-chain verification (@aroha-sdk/delegation), task receipts and disputes. All four SDKs define the same 19 message types and 35 error codes. did:aroha-web in Python, Go and Java is a port of the TypeScript resolver, checked against a TypeScript-generated vector. Each SDK's README is the source of truth at a given commit.

FeatureTypeScriptPythonGoJava
Package@aroha-sdk/core, @aroha-sdk/credentials, @aroha-sdk/registry (npm)aroha (PyPI)module github.com/ArohaLabs/aroha-protocol/sdks/go — not released: no sdks/go/v* tag; build from sourcecom.aroha-labs:aroha-sdk — not released (not on Maven Central); build from source
MaturityReferenceBetaPartialPartial
Envelope build + Ed25519 sign✅✅✅✅
Envelope verify (signature, expiry, nonce replay)✅✅✅✅
Intent / cart / payment mandates: issue + verify✅ (v2)✅ (v2)✅ (v2)✅ (v2)
Mandate chain verification✅ (verifyMandateChain, @aroha-sdk/credentials)✅ (verify_mandate_chain)✅ (VerifyMandateChain)✅ (verifyMandateChain)
Mandate token v2 wire format (JCS of {mandate, v: 2}, embedded chain, required issuedAt)✅✅✅✅
Envelope validation rules (5-min max TTL, created skew check, signature before nonce, per-sender nonce keys)✅✅✅✅
Rotatable DIDs (did:aroha:E…) and Key Event Log verification✅✅✅✅
did:aroha-web (current schema)✅✅✅✅
Task mandates (issue, attenuate, verify, enforce)✅✅ (aroha.task_mandate)✅ (mandate.IssueTaskMandate, EnforceTaskConstraints)✅ (TaskMandate)
Saga (Reserve → Commit → Cancel, compensation) — orchestration extension✅ (@aroha-sdk/orchestrator 1.4.0 on npm; source no longer in this repository)✅✅✅
Registry client (register / discover / resolve)✅ (@aroha-sdk/registry)✅ (aroha.hub, HTTP)✅ (registry)✅ (ArohaRegistryClient)
Conversation profile verification (rooms, consent, turns, disclosure, action receipts)✅✅ (aroha.conversation)✅ (conversation, receipts)✅ (conversation)
Task-mandate interop with TypeScript (shared vectors task-mandate-v2.json / live both directions)—✅✅✅
Durable stores: nonces, enrollment, spending ledger (Postgres, Redis)✅ (@aroha-sdk/store-postgres, @aroha-sdk/store-redis; unreleased)✅ (aroha.stores; unreleased)❌❌
Protocol message types defined19191919
Protocol error codes defined28282828
Automated tests (2026-10-19)core/credentials/registry suites476 passed; framework-bridge suites skip unless the framework is installed, and pass with all installed244 passed, go vet clean174 passed

Message types

The 19 message types, with identical wire strings in all four SDKs: ArohaRequest, ArohaResponse, ArohaStream, ArohaNegotiate, ArohaCounterOffer, ArohaAccept, ArohaReserve, ArohaReserveAck, ArohaCommit, ArohaCommitAck, ArohaCancel, ArohaCancelAck, ArohaDelegate, ArohaError, ArohaSatisfactionSignal, ArohaSpendingMandate, ArohaTaskMandate, ArohaDispute, ArohaDisputeResolution.

Error codes

The 35 codes, with identical wire strings in all four SDKs (Aroha_ prefix except where noted): UNAUTHORIZED, FORBIDDEN, INVALID_SIGNATURE, EXPIRED_MESSAGE, REPLAY_DETECTED, UNKNOWN_CAPABILITY, TRUST_LEVEL_INSUFFICIENT, RESERVATION_FAILED, RESERVATION_EXPIRED, COMMIT_FAILED, CANCEL_FAILED, INVALID_TOKEN, NO_INVENTORY, CAPACITY_EXCEEDED, SERVICE_UNAVAILABLE, INTERNAL_ERROR, INVALID_PARAMS, CSN_NO_STRUCTURAL_MATCH (no Aroha_ prefix), ACTION_LIMIT_EXCEEDED, COMPUTE_LIMIT_EXCEEDED, REVERSIBILITY_VIOLATION, HUMAN_GATE_REQUIRED, DATA_ACCESS_VIOLATION, SANDBOX_REQUIRED, DELEGATION_DEPTH_EXCEEDED, CAPABILITY_NOT_PERMITTED, SETTLEMENT_RAIL_MISMATCH, COMMIT_DISPUTED, NO_MANDATE, CHAIN_INVALID, UNTRUSTED_ROOT, ROOT_KEY_MISMATCH, CHAIN_REJECTED, SCOPE_UNKNOWN, CONTEXT_MISMATCH.

Treat a code you have no constant for (from a newer peer) as a generic error.

Interoperability

v2 mandate tokens use the same camelCase wire fields in every SDK, and each SDK reproduces the shared vectors byte for byte. Python and Go also run cross-language tests against tokens produced by the TypeScript reference.

Where the evidence lives

SDKFiles read
TypeScriptpackages/aroha-core/src/messages/types.ts (ArohaErrorCode, ArohaMessageType), packages/aroha-core/src/messages/envelope.ts, packages/aroha-credentials/src/mandate.ts, packages/aroha-delegation/src/chain.ts, packages/aroha-registry/src/ (the saga engine, @aroha-sdk/orchestrator, is no longer in this repository)
Pythonsdks/aroha-py/aroha/messages.py, envelope.py, mandate.py, orchestrator.py, hub.py; tests in sdks/aroha-py/tests/
Gosdks/go/aroha/messages/types.go, messages/envelope.go, mandate/mandate.go, orchestrator/saga.go, identity/kel.go, jcs/jcs.go; tests alongside each package (*_test.go)
Javasdks/java/src/main/java/com/arohalabs/messages/MessageTypes.java, ArohaEnvelope.java, mandate/ArohaMandateCredential.java, identity/Kel.java, crypto/Jcs.java, orchestrator/SagaEngine.java; tests in sdks/java/src/test

This page is the repository file docs/sdks/feature-matrix.md, copied October 28, 2026.