Self-Hosted Personal Bookkeeping

Finance

A personal bookkeeping system that runs on your own computer: register an account, create accounts and record income and spending, see amounts and charts on the overview page, import bank statement files, and keep the data only on your own computer. Derived from a frozen snapshot of an open-source personal bookkeeping project under the MIT licence; the delivery adds a Dockerfile that builds the image from source, a single-service orchestration file, a script that generates the encryption key, and a quick-start guide in Traditional Chinese, and the interface languages include Traditional Chinese.

SubscriptionUS$49 per month
Last run2026-11-02
In practice
Readiness5 / 5
What you need
Few changes needed4 / 5

Who it is for

Individuals and families who want to keep their income and spending on their own computer rather than hand their books to a cloud service.

How to start

$ sh scripts/quickstart/init-env.sh
$ docker compose up -d --build

Browse the files

Files in the product repository at the pinned commit. A few house files are left out of the zip.

File overview1,121 paths
▸cmd8
base.go
cron_jobs.go
database.go
initializer.go
security.go
user_data.go
utility.go
webserver.go
▸conf1
ezbookkeeping.ini
▸docker3
backend-build-pre-setup.sh
docker-entrypoint.sh
frontend-build-pre-setup.sh
▸etc1
systemd/
▸pkg485
api/
auth/
avatars/
cli/
converters/
core/
cron/
datastore/
duplicatechecker/
errs/
…
▸public51
favicon.ico
favicon.png
img/
robots.txt
touchicon.png
▸scripts1
quickstart/
▸skills3
ezbookkeeping/
▸src498
DesktopApp.vue
MobileApp.vue
components/
consts/
core/
desktop-main.ts
desktop.html
directives/
exticons/
global.d.ts
…
▸templates7
email/
prompt/
▸testdata13
empty_excel_file.xls
empty_excel_file.xlsx
feidee_mymoney_elecloud_test_file.xlsx
feidee_mymoney_legacy_test_file.xls
feidee_mymoney_test_file.xls
multiple_sheets_excel_file.xls
multiple_sheets_excel_file.xlsx
multiple_sheets_with_different_header_row_excel_file.xls
multiple_sheets_with_different_header_row_excel_file.xlsx
only_one_row_excel_file.xls
…
▫ATTRIBUTION.md
▫Dockerfile
▫Dockerfile.quickstart
▫LICENSE
▫LICENSE-99LL.md
▫PRODUCT.md
▫QUICKSTART.md
▫README.md
▫SECURITY.md
▫build.bat
▫build.ps1
▫build.sh
▫contributors.json
▫delivery-manifest.txt
▫docker-bake.hcl
▫docker-compose.yml
▫eslint.config.mjs
▫ezbookkeeping.go
▫go.mod
▫go.sum
▫package-lock.json
▫package.json
▫postcss.config.js
▫third-party-dependencies.json
▫tsconfig.json
▫vite.config.ts
▫vitest.config.ts
▫Config and hidden files 23

Latest passing run

Clone → Checkout → Toolchain → Build images → Bookkeeping signup and signin

Pre-purchase Disclosure

What you are buying

A self-hosted personal bookkeeping system: register an account, create accounts and record income and spending, see amounts and charts on the overview page, and import bank statement files. After running the key generation script you bring it up with Docker Compose, and the data stays only on your own computer.

Derived from an open-source personal bookkeeping project under the MIT licence, and not the original project itself. Our work: a Dockerfile that builds the image from source, a single-service orchestration file, a script that generates the encryption key, and a quick-start guide in Traditional Chinese.

Delivery is a frozen snapshot: one zip, taken from the product repository at revision c278fda.

Known limitations

  • The service serves plain HTTP on port 8080 of the local machine; TLS and a reverse proxy are yours to bring
  • Registration is open by default: anyone who can reach that port can create an account
  • By default it goes online to fetch exchange rates from the European Central Bank, and can be switched to filling them in by hand inside the app
  • The delivery has no automatic backup; export your data from inside the app yourself
  • The data lives in SQLite and Docker named volumes, and docker compose down -v deletes every account and all bookkeeping data
  • The first start builds the image from source, fetching from registries, npm, Go modules and apk during that time
  • The build skips upstream’s code checks and unit tests
  • Pinned to the delivered snapshot; it does not follow upstream.

The liability cap, the scope of what is promised and the statutory floor are governed by the Terms of Service.

Vetting record

Everything below was checked against the pinned commit 831eb96. Every verdict carries its full reasoning, an evidence link and the checker; failures are published, not hidden — do not take our word for it, verify it yourself.

5 PASS0 WARN0 FAIL

Source ReviewPASS

Execution surface of the delivery reviewed item by item. Our own additions were read line by line: docker-compose.yml (the published port is bound to 127.0.0.1 on 8080 only; it refuses to start without the encryption key; SQLite and three named volumes), scripts/quickstart/init-env.sh (openssl generates a random key, .env is mode 600, existing values are not overwritten), and the changes in Dockerfile.quickstart against upstream’s Dockerfile (creating an empty local repository so the version information can be read, skipping the pre-build checks and unit tests, building the front end before the back end). The upstream Go and TypeScript sources were not read file by file; the basis is the MIT licence and container isolation.

Evidence is in our private repository (not publicly accessible):https://github.com/dev-zillio-cc/dsp-029-personal-bookkeeping/blob/6d5bc5a078a482cd41e5ae07bb453e9b89d0ca7d/docker-compose.ymlChecked in 2026Checked by claude-code build-product session
Script SafetyPASS

The scripts on the buyer’s delivery path were each inspected: init-env.sh is ours (read line by line); the build goes through Dockerfile.quickstart (read line by line: npm and Go module installs, apk installs, with no download piped straight into a shell); the container runs upstream’s entry script as the non-root account built into the image (uid 1000).

Evidence is in our private repository (not publicly accessible):https://github.com/dev-zillio-cc/dsp-029-personal-bookkeeping/blob/6d5bc5a078a482cd41e5ae07bb453e9b89d0ca7d/Dockerfile.quickstartChecked in 2026Checked by claude-code build-product session
RecencyPASS

This product is a frozen snapshot and does not follow upstream: the upstream source is pinned to the main-line revision taken on the day the product repository was created (see the evidence link), and the product repository is that snapshot plus our own commits.

Evidence ↗Checked in 2026Checked by claude-code build-product session
LicensePASS

SPDX:LicenseRef-99LL-Product

Upstream LICENSE was checked word for word (the evidence link points at the file itself at the pinned version and matches the copy inside the product repository): the standard MIT text. It allows commercial use, modification, derivative works, redistribution and sale; the duty is to keep the copyright notice and licence text (LICENSE and ATTRIBUTION.md ship in the zip); upstream has no NOTICE file. The decision does not rest on GitHub’s licence field. For the product as a whole the 99LL product licence template is attached: upstream’s LICENSE is kept as it is and LICENSE-99LL.md is added as the sale and liability terms for the part we built, with spdx recorded as LicenseRef-99LL-Product.

Evidence ↗Checked in 2026Checked by claude-code build-product session
Dependency LicensesPASS

This records the declared side, not a scan result: the Go dependencies are declared in go.mod and go.sum, the front end is locked by package-lock.json, and the packages themselves are fetched from their own repositories when the buyer builds; the base images are pulled from a registry. These dependency trees were not scanned package by package for licences. Upstream also ships third-party-dependencies.json listing its third-party dependencies. Upstream has no submodule and no third-party dataset was copied in (see ATTRIBUTION.md).

Evidence is in our private repository (not publicly accessible):https://github.com/dev-zillio-cc/dsp-029-personal-bookkeeping/blob/6d5bc5a078a482cd41e5ae07bb453e9b89d0ca7d/third-party-dependencies.jsonChecked in 2026Checked by claude-code build-product session
HEALTH VERIFIED

Last verified passing: 2026-11-02

Subscribe for everything
US$49/ monthwas US$99

A subscription unlocks the whole catalogue; you do not buy this one separately.See what is included

Sign in with Google first; if you are signed out you will be sent to the sign-in page. Your subscription is billed to that same email address.

Already subscribed? This downloads straight away. Otherwise you are sent to the pricing page, or to sign in first.