beankeeper: double-entry accounting CLI in Rust — SQLite-backed, encrypted, multi-company

Wait 5 sec.

I run small businesses. Before you can justify a bookkeeper there's a stretch where you just do it yourself — a few hours a week, every week. The plain-text tools (hledger, beancount, ledger-cli) are good but I wanted something database-backed. So I built bk. What's different from the plain-text tools: SQLCipher-encrypted SQLite: the ledger is a database, not a file you edit by hand. Atomic writes, concurrent reads, encrypted at rest. Multi-company tenancy: multiple entities in one database, isolated by slug. No juggling separate files. Idempotent writes: --reference hashes any string to a deterministic key. Same reference, same transaction. Import scripts and retries don't create duplicates. Structured JSON output: every command returns {ok, meta, data/error} with named error codes and semantic exit codes. Scriptable without parsing prose. Append-only ledger: posted transactions are immutable. Mistakes get reversing entries, not edits. Audit trail stays intact. Type-enforced double-entry: unbalanced transactions can't be constructed. The invariant is compile-time, not a runtime check. `bk init --demo` spins up a populated three-company database with intercompany transactions and a payroll split. (beancounter was taken. so was bookkeeper. Soooo....)   submitted by   /u/rrrodzilla [link]   [comments]