For developers
Help build Huismus
Huismus is open source. Code, translations, testing and good ideas are welcome. You don't need to be an accountant: the rules for money and invoices are in the code and the tests.
What it's built with
- Django and SQLite: one process and one database file. A backup is a copy of a folder.
- HTMX and plain CSS: screens come from the server. No JS framework and no build step; every form also works without JavaScript.
- WeasyPrint for the PDFs.
- pywebview and PyInstaller for the app on Mac and Windows, Docker for a server or Raspberry Pi.
- pytest and Playwright: the browser tests run in Chromium, WebKit and Firefox.
Where you can help
- Testing on Windows: Huismus is made on a Mac. Every report of something that acts strange on Windows helps.
- Translations: Dutch is the source language. Check the English texts, or add a language.
- Bugs and wishes: open an issue. Coming from Moneybird and the import goes wrong? Describe it without real data.
- Code: pick an issue, or start with something small. For anything bigger, discuss the approach in an issue first.
Getting started
You need Python 3.12 or newer, uv and Pango for the PDFs (on a Mac: brew install pango).
git clone https://github.com/codebyarne/huismus.git
cd huismus
uv sync
./scripts/demo-server.sh # Huismus with nine years of sample data
./scripts/verify.sh # every check in one command
./scripts/verify.sh is the gate: a change is done when it's green. How the code fits together is in docs/architectuur.md (Dutch), the design in SPEC.md.
Working with an AI assistant, such as Claude Code? The project's agreements are in CLAUDE.md, and ./scripts/verify.sh checks every change then too.
House rules
A few rules are strict, because this is someone's bookkeeping. The tests and the database guard them.
- Money in cents: amounts are integers, never a float.
- Issued is fixed: an issued invoice doesn't change anymore. You correct with a credit note.
- Numbers without gaps: an invoice only gets its number when it's issued.
- One function for totals: the screen, the PDF and the import all calculate the same way.
- No real data: never a real invoice, IBAN or export in the repo, a test or an issue.
Code signing
Free code signing provided by SignPath.io, certificate by SignPath Foundation.
- Built from this source code: every version is built in GitHub Actions from the code on GitHub. Only then is it signed.
- Committers and reviewers: everyone who contributes. Every change comes in through a pull request.
- Approvers: the repository's maintainer, codebyarne, approves every signing by hand.
- Privacy: This program will not transfer any information to other networked systems unless you ask it to. The one exception: once a day it checks for a new version. You turn that off in Settings → Updates.
Agreements
- One concern per commit, with a conventional commit message (
feat(...),fix(...)). - Tests first for anything to do with totals, numbers or credit notes.
- Texts through gettext, in Dutch and English.
- A DCO instead of a CLA: sign off your commits with
git commit -s. The license is AGPL-3.0-or-later.