Thanks for being here! CashFlux is a pure-Go, local-first budgeting suite that runs in the browser via WebAssembly, built on GoWebComponents. Contributions of all sizes are welcome — bug reports, docs, tests, and code.
By participating you agree to the Code of Conduct.
Heads-up: this is an agent-built, agent-maintained project. The codebase is 100% AI-authored, and issues / PRs / feature requests are triaged and implemented by Claude and Codex agents with a human in the loop. Practically, that means: write clear, reproducible issues (the agents act on detail), and expect that even human PRs may be reviewed or refined by an agent before merge.
CLAUDE.mdis the agents' rulebook — following it is the fastest path to a merge.
- 🐛 Report a bug — open an issue. The live demo + Settings → "Load sample" makes reproductions easy.
- 💡 Request a feature — file a feature-request issue. The roadmap is public in
TODOS.md, so check whether it's already planned and add your thoughts. - 🔧 Send a pull request — see below.
The golden rule: business logic is platform-independent and table-tested; the WASM/UI layer is a thin shell over it.
internal/<domain> pure Go logic — money, currency, ledger, budgeting, goals, payoff,
allocate, forecast, formula, rules, reports, … (NO syscall/js, unit-tested)
internal/store in-tab SQLite persistence
internal/appstate the single validated read/write seam
internal/screens|ui|app|uistate the WASM/UI shell (build-tagged js,wasm)
Good first issues usually live in the pure logic packages — no browser needed, just go test.
Requires Go 1.26+.
# Live-reload dev server:
./.tools/gwc.exe dev -app ./main.go -root .
# Build the wasm bundle:
GOOS=js GOARCH=wasm go build -o ./web/bin/main.wasm .
# Run the pure-logic tests on native Go:
go test ./...
# Format + vet before committing:
gofmt -l -w . && go vet ./...(Optional) regenerate README screenshots with the dev server running: node e2e/readme_shots.mjs.
The full engineering bar lives in CLAUDE.md. The short version:
- Build bottom-up: data model → tested logic → persistence → state → UI last. Never UI-first.
- Pure, idiomatic, beautiful Go. Small composable packages, clear names, doc comments on exported
symbols, errors wrapped with context.
gofmt/go vetclean. No dead code. - New logic ships with table-driven tests in the same change. Export→import must stay lossless.
- One feature per commit, with a clear Conventional Commit
subject (
feat:,fix:,test:,docs:,refactor:). Tests for that feature go in the same commit. - Update
CHANGELOG.mdandDEVLOG.mdin the same commit. - Money is integer minor units (cents) with an explicit currency — never a float in domain logic.
log/slogonly (via the projectloggingpackage) — nofmt.Printlndebugging.- No
syscall/jsin logic packages — keep them native-testable.
Make sure go build (with GOOS=js GOARCH=wasm) and go test ./... pass before you push. Keep PRs
focused; if a change grows, split it.
Please don't open a public issue for vulnerabilities — see SECURITY.md.
Happy hacking. 💸