Skip to main content
Attestix

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.

LanguageInstallStatus
Pythonpip install attestixLive — full library (issue + verify)
JS / TSnpm install attestixLive — attestix-js
Gogo get github.com/VibeTensor/attestix-goLive — attestix-go
Rustcargo add attestixLive — attestix-rs
Javacom.vibetensor:attestix:0.4.0Publishing soon — attestix-java
Rinstall.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 reason

JavaScript / 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 JSON

Go

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 out

One 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.