Mint your own currency.
A federated mutual-credit ledger. Mint personal currencies, hold them at any bank you trust — your own or somebody else’s — and settle cryptographically. No central authority, no middleman.
Ethos
The beliefs behind every design decision — and what we deliberately refuse to build.
How it works?
The big idea, then a bilateral swap traced step by step across two banks.
For Players
Master the barter play. Learn lead vs. follow, trust dynamics, and portfolio strategy.
For Self-Hosters
Deploy a bank in 10 minutes. Run your own tiny central bank in a federation of peers.
For Developers
Build your own implementation. The protocol is small, invariant, and language-agnostic.
For Contributors
Shape the protocol. The spec is small enough to keep in your head.
How it works in one paragraph
Every user and every bank is an ed25519 keypair. Voucher, Account, Order, Mandate, Offer, Signature, Address, and Post docs are canonicalized via RFC 8785 JSON, SHA-256-hashed, and content-addressed. Ledger records are bank-minted with ULIDs. In a cross-bank trade the coordinator creates the record pairs (create_records), holders submit signed Orders (submit_docs), and the coordinator clears each Order at each bank with a signed Mandate (submit_mandate). From there the banks self-advance: per-record approvals, holds, then settlement. Banks discover each other via the bank fields in Orders and call each other directly through the Address registry; a lost push can be relayed by hand. There is no global ledger: only the banks party to a deal see its records — a bank receives exactly the records that satisfy the Orders it stores. The math binds everyone together.
See it work
Open the live demo banks — no install needed: test1 · test2 (AWS: Lambda + DynamoDB + CloudFront). Register with a handle and password; the key is generated and encrypted in your browser.
Or run a bank locally:
git clone https://github.com/Mitek99/barter.game.git
cd barter.game/apps/bank-aws
bun install
bun run ../../scripts/genkey.ts # prints BANK_PRIV_KEY=<base58> — rename it to BANK_TEST1_PRIV_KEY
BANK_TEST1_PRIV_KEY=<base58> bun run localThen open http://localhost:8100/test1/ui, register two users, issue personal currencies, and place matching orders. The banks settle on their own. Sum per Voucher = 0. The cryptographic version of “we’re even.”