Skip to content

Scani

One ledger across every asset you care about — exchanges, on-chain wallets, brokerages, banks, and manual entries. Same TypeScript codebase runs three ways.

These docs are written for three audiences at once — operators self-hosting the stack, contributors reading the code, and agents ingesting Scani as context. Same content, organised so each can skim it.

Concepts

The domain model: holdings, accounts, vaults, groups, tokens, transactions, observations, the price graph, and the rollup. Every page ends with a why it’s modelled this way note. See Mental model.

Design decisions

Why the ledger is append-only. Why there’s no USD canonicalisation. Why transfer linking runs nightly. The cross-cutting choices that explain the shape of the code. See Design decisions.

Self-hosting

Three tiers from one binary. Compose for a one-box deploy, managed Postgres / Redis / S3 when you outgrow it, backup & restore, upgrades, observability, troubleshooting. See Tier model.

Reference

A full financial glossary — Scani-specific terms plus general finance. Database schema, tRPC routes, jobs, provider matrix, env-var index, and an LLM-friendly index.

MIT licensed. The OSS distribution sends no telemetry, ever — no install ID, no anonymous usage counter, no version-check beacon. The only outbound calls a self-hosted stack makes are the ones you explicitly configure.