arkhe¶
Infrastructure for ARK identifiers. Minting and resolution run as separate processes.
flowchart LR
R["Organisation's<br/>repository"] -->|mint| M[minter]
U[Anyone] -->|ark:/99999/…| S[resolver]
M --> D[(ledger)]
S --> D
S -->|302| T[The object]
S -->|"?? "| P[Persistence statement]
Unlike DOI and Handle, ARK presumes no paid registration agency and no central infrastructure. It holds that persistence is not a property of the string but a matter of service. arkhe implements that position: it delegates namespaces to organisations and lets each of them declare, for itself, the level of commitment it is prepared to keep.
The name is the Greek ἀρχή — beginning, first principle. The point at which a reference starts.
What it does¶
- Mints ARKs into a namespace delegated to an organisation, and never re-assigns one.
- Resolves them, with the
?,??,?infoand?jsoninflections — and answers even when the object itself is gone. - Delegates: a NAAN holder carves out shoulders, hands them to organisations, and can hand minting or resolution onward to a third party.
- Survives reorganisation: organisations merge, split and leave, and the identifiers keep resolving.
What it deliberately is not¶
- Not a repository. It holds identifiers and where they point, not the objects.
- Not an authorization server. It validates tokens; it can issue its own only for machine-to-machine use, and never runs an authorization code flow of its own.
- Not a metadata store. It carries the ERC kernel and a few Dublin Core fields so that a description can be returned when the object cannot — no more.
Where to start¶
-
:material-rocket-launch: Quickstart
Stand it up and mint your first ARK in a few minutes.
-
:material-lightbulb: Concepts
What ARK actually promises, and why the code refuses to delete things.
-
:material-cog: Configuration
Every setting, and which ones have no default on purpose.
-
:material-api: API
The REST surface, generated from the implementation.
Status¶
Targets InvenioRDM-era Python: FastAPI, SQLAlchemy 2.0, PostgreSQL.
arkspec/ (the ARK specification as pure functions) and domain/resolution.py
depend on nothing but the standard library, so the parts that matter for
specification conformance can be read and tested without installing anything.
Part of arkspec/ derives from the Internet Archive's
arklet (MIT); see
NOTICE.