Quickstart
The whole stack, on your machine.
One command brings up five services, a Postgres behind each, an operator console and a seeded book of investments you can immediately reconcile. No account and no licence key. On a public testnet it is free permanently rather than for a trial period.
Two commands
Nothing to clone, nothing to build.
The compose file is published with each release and pins every image to that exact version. Docker pulls signed, multi-architecture images; nothing compiles on your machine.
quickstart
curl -fsSL https://get.tokenistry.com/1.0.0.yml -o tokenistry.yml docker compose -f tokenistry.yml up -d
First run takes two to four minutes, almost all of it pulling images. When it
settles, the console is on localhost:5173 with a book already in it.
What came up
A seeded book, reconciled on first boot.
The seed issues a token, assigns investors, moves holdings between them and reconciles the result — so the first thing you see is a ledger with real lineage in it rather than an empty dashboard asking you to imagine one.
demo.seed.result
Reconciled on first boot
- 01
32 events reconciled
mint 10 · transfer 20 · burn 1 · reallocation 1
- 02
27 active lots
FIFO lineage, every unit traceable to its issuance
- 03
3,650 units across four holders
effective ownership, not raw wallet balances
- 04
0 anomalies
chain state and ledger agree
What is running
Five services, one version number.
Every image in a release carries the same version. With five services and five databases, "which version are you on" needs exactly one answer.
| Image | Does what | Port |
|---|---|---|
tokenistry/tokenization-engine | Token lifecycle, roles, compliance lists | 8082 |
tokenistry/transaction-engine | Relayers, nonces, fees, confirmation | 8081 |
tokenistry/evm-indexer | Normalized on-chain events, cursor + live stream | 8083 |
tokenistry/reconciliation-engine | Effective ownership, FIFO lots, provenance | 8100 |
tokenistry/factory-registrar | Deterministic deployment and the registry | 8090 |
tokenistry/console | The operator console over all of them | 5173 |
Talking to it
Clients generated from the API description.
Every service describes itself in OpenAPI, and the clients are generated from those documents on the same version line as the images. A client is never a second, drifting description of the API.
typescript
npm install @tokenistry/reconciliation openapi-fetch
import createClient from "openapi-fetch"
import type { paths } from "@tokenistry/reconciliation"
const api = createClient<paths>({ baseUrl: "http://localhost:8100" })
const { data } = await api.GET("/v1/assets/{asset_id}/holders", {
params: { path: { asset_id } },
})
python
pip install tokenistry-reconciliation==1.0.0 from tokenistry_reconciliation import Client from tokenistry_reconciliation.api.positions import list_holders client = Client(base_url="http://localhost:8100") holders = list_holders.sync(client=client, asset_id=asset_id)
The version matches the images exactly, so
@tokenistry/reconciliation@1.0.0 is the client for
tokenistry/reconciliation-engine:1.0.0. Every service also serves its
own document at /v1/openapi.json with a Swagger UI beside it, and the
same documents are published with each release — so you can generate a client for a
language we do not ship, from the exact description the running service uses.
Where the line is
Free on testnets. Licensed on mainnet.
Worth knowing before you invest a week in an evaluation.
No licence needed
Public test networks
Sepolia, Holesky and the other allowlisted chains, plus one private chain of your choosing for development. Run it in CI, build a product against it, demonstrate it to your board. It does not expire and it is not a trial.
Licence required
Public main networks
Real assets and real counterparties. The software says so in its logs and on
its /license endpoint from the moment it starts — it does not wait
until you are in production to mention it.
Licences carry their own terms. How much notice you get before expiry and how long everything keeps working afterwards are fields in the signed licence, not constants in our build — because procurement at a pension fund and procurement at a five-person shop do not move at the same speed.
Questions engineers ask first
FAQ
Does any data leave our environment?
No. Everything runs in your compose project against your databases. There is no phone-home, no telemetry and no licence server — verification is offline, against a signature.
What happens to our data if the licence lapses?
The databases are yours throughout and pg_dump works whatever the
licence says. After expiry there is a grace period during which everything keeps
running; after that the services stop serving, but /health and
/license keep answering so the cause is never a mystery.
Do we get the source?
You extend through the versioned API rather than through our internals, so an upgrade cannot break your product. Source escrow is available where continuity is a board-level requirement.
Is this the production build or a demonstration?
The same images run the public demo. Images are multi-architecture and signed, and every release publishes an SBOM and provenance attestation, because those are on the procurement checklist for the buyers this is built for.
Once it is running
If the stack does what you need and the question becomes commercial, that is the conversation to have — with the evaluation already behind you rather than ahead of it.
