https://github.com/georgebuilds/kino
WIP. Local-first personal finance desktop app. Synchronized accounts with sankey for free.
https://github.com/georgebuilds/kino
go golang ofx sankey sqlite typescript vue3-typescript wails
Last synced: about 7 hours ago
JSON representation
WIP. Local-first personal finance desktop app. Synchronized accounts with sankey for free.
- Host: GitHub
- URL: https://github.com/georgebuilds/kino
- Owner: georgebuilds
- License: agpl-3.0
- Created: 2026-05-10T22:23:08.000Z (about 2 months ago)
- Default Branch: main
- Last Pushed: 2026-05-11T16:04:49.000Z (about 2 months ago)
- Last Synced: 2026-05-11T18:10:53.882Z (about 2 months ago)
- Topics: go, golang, ofx, sankey, sqlite, typescript, vue3-typescript, wails
- Language: Vue
- Homepage:
- Size: 1.02 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
- Security: SECURITY.md
- Agents: AGENTS.md
Awesome Lists containing this project
README
# Kino
A local-first personal finance desktop app built with Go, Vue 3, and Wails.
## Features
- **Multi-account tracking** — checking, savings, credit cards, investments, loans, crypto, cash
- **Transaction management** — create, edit, categorize, reconcile, and filter transactions
- **Import** — CSV and OFX/QFX file import with exact and fuzzy duplicate detection
- **Budgets** — monthly, weekly, and annual budgets with optional rollover
- **Cash flow** — Sankey diagram showing income sources flowing to expense categories
- **Net worth** — 12 or 24-month history snapshots
- **Goals** — savings goal tracking linked to accounts
- **Local data** — all data lives in a single `.kino` SQLite file you own and control
## Privacy
No accounts, no sync servers, no telemetry. Your `.kino` file can be stored anywhere — iCloud Drive, Dropbox, Google Drive, OneDrive, or just your local disk.
## Development
**Prerequisites:** Go 1.24+, Node 18+, [Wails v2](https://wails.io/docs/gettingstarted/installation)
```bash
# Install Wails CLI
go install github.com/wailsapp/wails/v2/cmd/wails@latest
# Live development (hot reload)
wails dev
# Production build
wails build
```
The dev server also exposes a browser UI at `http://localhost:34115` with access to all Go methods via devtools.
## Architecture
| Layer | Technology |
|-------|-----------|
| Desktop shell | Wails v2 |
| Backend | Go |
| Frontend | Vue 3 + TypeScript + Vite + Tailwind CSS |
| Database | SQLite (WAL mode, via `modernc.org/sqlite`) |
| Charts | Chart.js |
**Backend modules:**
| File | Responsibility |
|------|---------------|
| `app.go` | DB lifecycle, file open/create/move, MRU tracking |
| `app_accounts.go` | Account CRUD |
| `app_transactions.go` | Transaction CRUD, filters, transfer pairs |
| `app_categories.go` | Category CRUD (hierarchical) |
| `app_budgets.go` | Budget CRUD with rollover logic |
| `app_cashflow.go` | Sankey diagram data |
| `app_networth.go` | Net worth history snapshots |
| `app_summary.go` | Monthly aggregation (income, expenses, savings) |
| `app_import.go` | CSV/OFX import, duplicate detection |
| `internal/db/` | SQLite connection, schema migrations, all queries |
| `internal/models/` | Shared data types |
| `internal/importer/` | CSV and OFX parsers |
**Key conventions:**
- All monetary values are stored as `int64` cents (no floating-point)
- Transfer transactions are linked in pairs via `TransferPairID`
- Schema migrations are idempotent and version-gated via `kino_meta`
- The frontend calls Go methods directly via Wails RPC bindings