English | 简体中文
A self-hosted personal ledger for people whose money lives in both the US and China: Alipay, WeChat Pay, ICBC and US bank statements in one list, shared costs split with friends, and your data on your own computer.
Status: v0.2.4, an early release used daily by its author.
- Statement imports for Alipay CSV, WeChat Pay xlsx, ICBC credit card PDF and SMS alerts, and Bank of America CSV. Every file is checked against its own totals before import, and every import can be undone.
- No double counting. A payment that appears in Alipay and again on the card behind it is recorded once; re-importing a file adds only new rows.
- CNY and USD side by side. Amounts keep their own currency and are never summed across currencies without a stated rate.
- Split and settle. Tag rows with the people who share them, see what is open per person and currency, and send a clean statement as PDF, image or text with your payment QR codes.
- Bank and brokerage sync through Plaid (with your own keys) and Interactive Brokers Flex.
- Analysis and assets: spending by category for any period, monthly targets, net worth and holdings.
- Quick entry and a bilingual UI: press ⌘K and type
lunch 35 @Alex; English and Simplified Chinese, light and dark themes.
Requirements:
- Node.js 24 or newer
- pnpm 10 (
corepack enablepicks the pinned version) - Git
- macOS, Linux or Windows (WSL recommended)
No database server is needed.
git clone https://github.com/averatec0773/yomi.git
cd yomi
pnpm install
pnpm devOpen http://localhost:7773. yomi creates its ledger in data/pglite/ (an embedded Postgres, nothing else to install). Then open Import and drop a statement file.
To look around with fictional data first:
pnpm demo:db
DATABASE_URL=data/demo-pglite pnpm devTo update later: git pull && pnpm install && pnpm dev. Database upgrades run on start, after an automatic backup.
Nothing is required. Bank and brokerage credentials are entered in Settings > Connections and stored encrypted. To manage settings as code instead, copy .env.example to .env.local; a value there wins over Settings. Every variable, the ledger location (DATABASE_URL, including a Postgres server) and the encryption key are described in guides/configuration.md.
- Using yomi: imports, splitting, statements, quick entry, updates
- Configuration: data locations, environment variables, credentials, privacy
- Import an Alipay statement
- Import a WeChat Pay statement
- Import an ICBC credit card statement
- Import a Bank of America CSV
- Connect banks and brokerages with Plaid
- Connect Interactive Brokers
- Open yomi from your phone
- Back up and restore
- Troubleshooting
yomi is local-first: the ledger, backups and statement files stay on your computer, and there is no yomi server and no telemetry. It connects out only for features you use (Plaid, Interactive Brokers, and daily exchange rates from Frankfurter). Stored credentials are encrypted with AES-256-GCM using a key kept outside the repository; back that key up in a password manager. pnpm dev listens on your local network, so set YOMI_ACCESS_TOKEN before opening yomi from a phone or another computer (guide). Details: guides/configuration.md.
Bug reports, new statement sources and fixes are welcome. Read CONTRIBUTING.md for setup, architecture and conventions. Outside contributions are accepted under a Contributor License Agreement that a bot asks you to sign on your first pull request. Never attach real statements or screenshots of real data to issues.
- yomi is licensed under the GNU Affero General Public License v3.0 only (AGPL-3.0-only).
packages/contractsis licensed under the MIT License.- "yomi" and its logo are trademarks of the project owner; forks that are distributed or offered as a service must use a different name. See TRADEMARK.md.
