Verifiers — verify Attestix credentials in any language
Attestix credentials are issued once and verify anywhere. Six independent verifier implementations share one conformance suite — offline, no Python runtime, zero trust in the issuer.
An Attestix credential is issued once — by the Python core or Attestix Cloud — and verifies anywhere. Six independent verifier implementations all check the same canonical-JSON form (RFC 8785) and the same Ed25519 signatures (RFC 8032) against one shared conformance suite, spec/verify/v1.
The result: a regulator, an auditor, or a peer agent can confirm a Verifiable Credential offline, with no network access and no Python runtime, and zero trust in the issuer — the math either checks out or it does not.
Verifier-only. These language ports verify credentials and delegations; they do not issue. Issuance stays in the Python core (
pip install attestix) or in Attestix Cloud. If you need to mint credentials, use Python.
Status
Four verifiers are live on their language registries today; Java and R are publishing soon.
| Language | Install | Status |
|---|---|---|
| Python | pip install attestix | Live — full library (issue + verify) |
| JS / TS | npm install attestix | Live — attestix-js |
| Go | go get github.com/VibeTensor/attestix-go | Live — attestix-go |
| Rust | cargo add attestix | Live — attestix-rs |
| Java | com.vibetensor:attestix:0.4.0 | Publishing soon — attestix-java |
| R | install.packages("attestix") | Coming to CRAN — attestix-r |
Prefer not to install anything? Verify a credential in your browser at attestix.io/verify, or read the bundle wire-format at attestix.io/spec/bundle/v1.
Code examples
Each verifier exposes a verifyCredential entry point that takes a credential JSON and the issuer's DID document (or embedded public key) and returns a structured pass/fail result. No network calls.
Python
from attestix.services.credential_service import CredentialService
ok = CredentialService().verify_credential_offline(
credential=vc, # the VC JSON
did_document_path="did-document.json",
)
# -> True, or False with a reasonJavaScript / TypeScript
import { verifyCredential } from "attestix";
const result = await verifyCredential(vc, { didDocument });
if (!result.valid) {
console.error(result.reason);
}
// result.valid: boolean — Ed25519 over RFC 8785 canonical JSONGo
import "github.com/VibeTensor/attestix-go/verify"
result, err := verify.VerifyCredential(vc, didDocument)
if err != nil {
log.Fatal(err)
}
fmt.Println(result.Valid) // true if the Ed25519 signature checks outOne signature, six readers
Every verifier is exercised against the shared spec/verify/v1 vectors before release, so a credential that passes in Python passes identically in Go, Rust, or the browser. That conformance suite — not any single implementation — is the source of truth for what "valid" means.
See the Offline Verification Walkthrough for an end-to-end regulator scenario, and the bundle wire-format spec for the on-the-wire format.
Attestix produces cryptographically signed evidence; it is an evidence-tooling system, not a legal guarantor of compliance. Blockchain anchoring, where used, targets Base L2 (Sepolia testnet). Always consult qualified legal counsel for compliance decisions.