W3C isomer services and tooling for vLEI VRD credentials
Project description
isomer
isomer is the Python-first integration repo for projecting KERI ACDC
VRD credentials into W3C VC-JWT form and verifying them through did:webs.
Current repo state:
- canonical isomer profile for VRD Auth and VRD
- live KERI-habitat-backed VC-JWT and VP-JWT issuance
did:webs-backed VC-JWT and VP-JWT verification- isomer-specific ACDC/W3C pair verification
- projected credential status service for revocation checks
- fixture contract for JSON ACDCs and export-equivalent CESR streams
- one live end-to-end integration test from single-sig ACDC issuance through VC-JWT verification
This repo is real, but it is still an integration project rather than a finished interoperability product. The verifier is legitimate for the isomer profile, not yet a full ecosystem-grade verifier.
What Is Here
src/vc_isomer: current Python implementationtests: contract tests plus the live-stack integration testfixtures: stable contract fixturesdocs/isomer-profile.md: current profile notedocs/w3c-vc-libs-options.md: external verifier library optionsplans: execution and architecture plans
The packages/, apps/, and scripts/demo/ directories are still repo-shape
placeholders for the longer-term monorepo layout. The active implementation is
in src/ and tests/.
Read
docs/integration-maintainer-guide.md
for the live stack, workflow, and projection mental model.
Read docs/cli-e2e-walkthrough.md for a
copy-pasteable CLI walkthrough of the isomer-specific end-to-end flow.
Local Setup
This repo uses uv and expects a local .venv. The installable distribution
name is vc-isomer, the Python import package is vc_isomer, and the CLI
entrypoint remains isomer.
Bootstrap the environment:
UV_CACHE_DIR=$PWD/.uv-cache uv sync
Once published, install the package with:
pip install vc-isomer
The default uv groups include the live integration dependencies, so a normal
sync installs:
keridid-webs-resolvervlei
The live integration harness is intended to run entirely from this repo's
.venv. It should not require sibling repository virtualenvs or runtime file
lookups outside isomer.
Dependency sources are pinned in pyproject.toml through tool.uv.sources,
which keeps uv sync reproducible even when the latest PyPI releases lag the
live integration work.
Optional Editable Overrides
If you are intentionally developing one of the dependency repos locally, you can override the pinned source with an editable install in this environment. For example:
uv add --editable ../keripy
uv add --editable ../did-webs-resolver
uv add --editable ../vLEI
When using editable overrides, direct interpreter invocations such as
./.venv/bin/python -m pytest ... remain the least ambiguous path.
CLI
The repo installs one CLI entrypoint:
isomer --help
Current subcommands include:
isomer vc issueisomer vc verifyisomer vc verify-pairisomer vp issueisomer vp verifyisomer status projectisomer status serveisomer verifier serveisomer verifier worker serve
All signing commands require a live KERI habitat signer. This repo does not use demo signers. All verify commands talk to the long-running verifier operation service rather than invoking verifier logic directly in the CLI process. They wait for completion and use the process exit code for pass/fail instead of printing verifier operation documents.
For an end-to-end CLI walkthrough, including status projection, VC issuance,
and verifier checks, see
docs/cli-e2e-walkthrough.md.
Publishing
Publishing uses uv build and uv publish through the repo Makefile.
Run the full pre-publish gate:
make prepublish
Publish to TestPyPI first:
TEST_PYPI_TOKEN=... make publish-test
Publish to PyPI:
PYPI_TOKEN=... make publish
The publish targets refuse to upload from a dirty worktree unless
ALLOW_DIRTY=1 is set.
Fixtures
The fixture directory currently contains:
vrd-acdc.jsonvrd-auth-acdc.jsonvrd-acdc.cesrvrd-auth-acdc.cesr
The JSON fixtures are real live-issued ACDC SADs from the isomer live test.
The CESR fixtures are exact kli vc export --said ... style exports of those
same credentials.
Important distinction:
- the
.cesrfiles are export-equivalent only - they are not full IPEX-grant bundles
- an IPEX grant path also requires KEL material, TEL material, any chained
source credentials, and the
/ipex/grantexchange message
See fixtures/README.md for the fixture contract.
Testing
Fast contract tests
These are the normal fast checks for profile projection, JWT behavior, status, verifier logic, and CESR fixture integrity:
./.venv/bin/python -m pytest \
tests/test_cesr_fixtures.py \
tests/test_profile.py \
tests/test_jwt.py \
tests/test_status.py \
tests/test_verifier.py -q
Live end-to-end test
This is the current flagship integration test:
PYTHONUNBUFFERED=1 \
UV_CACHE_DIR=$PWD/.uv-cache \
./.venv/bin/python -m pytest -s -vv \
-o log_cli=true \
--log-cli-level=INFO \
tests/integration/test_single_sig_vrd_isomer.py
What it currently proves:
- witness-backed single-sig GEDA inception
- delegated single-sig QVI inception
- single-sig LE inception
- real QVI, LE, VRD Auth, and VRD ACDC issuance and admit flows
did:websservice launch from local KERI state- VC-JWT issuance from the live VRD ACDC
- verifier-operation submission, polling, and final VC-JWT / isomer-pair
verification through
did:webs
This test owns the current truth of the repo more than any prose doc.
Current Boundaries
isomer: W3C issuance, verification, status projection, fixtures, and integration orchestrationdid-webs-resolver: DID and key-state resolutionwallet: future issuer/holder integration targetsally: future ACDC-native verification targetw3c-signer: legacy reference only, not a runtime foundation
Current Gaps
Still not done:
- external secondary verifier integration
- wallet integration
- Sally integration
- broader VP/OpenID4VP workflows
- polished packaging and rollout ergonomics
So the right mental model is:
- this repo already has a real ACDC-to-W3C live path
- the path is test-backed
- but interoperability hardening and ecosystem verification are still active work
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file vc_isomer-0.1.0.tar.gz.
File metadata
- Download URL: vc_isomer-0.1.0.tar.gz
- Upload date:
- Size: 157.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b880916f644e1284afbec56fba7f15b3ef496a7084c00475253e1f8d1f61113e
|
|
| MD5 |
512b1f2f23f48f364a02fb69f6a8972e
|
|
| BLAKE2b-256 |
ebb98d16883a8cea3fb2fa5f729dbb18e8576cdc4b4041c317b0107510a1c55a
|
File details
Details for the file vc_isomer-0.1.0-py3-none-any.whl.
File metadata
- Download URL: vc_isomer-0.1.0-py3-none-any.whl
- Upload date:
- Size: 52.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5d7ac76864d6d0a57cd91e6dafaa4f3ecaa42c09844ec478baa1afe92c815c61
|
|
| MD5 |
d0d9207151bf1a08207f0f48e5b2be0f
|
|
| BLAKE2b-256 |
b0e9401bb656998e2df89b65e0c448028a68ee03ce9b987781c11c71b8c4b40f
|