Cofferly is a small Windows-friendly Rust desktop app for tracking money held for kids.
Parent PIN screen:
Unlocked wallet ledger:
Cofferly starts with two neutral child wallets. Each wallet keeps a local ledger of deposits and deductions, similar to a handwritten allowance sheet:
- Starting balance
- Money added
- Money spent
- Description for each entry
- Date
- Automatic running balance
- Parent PIN unlock
- Printable ledgers
- Custom child wallet names
- Local encrypted data file
For a local build, the Windows executable is:
target\release\Cofferly.exe
For a portable release zip:
.\scripts\package-windows.ps1 -Version 0.1.0The zip will be created in dist/.
Cofferly opens to a parent PIN screen so kids cannot add, remove, rename, or print entries without a parent unlocking the app first.
The first-run PIN is:
1234
After unlocking, open Settings to choose a different 4-digit PIN.
The PIN is used both to unlock the interface and to derive the key for encrypting the data file on disk. It is a simple family-use protection (4 digits), not high-security encryption.
Cofferly starts with Child 1 and Child 2 so the public app does not include anyone's real names.
After unlocking parent mode, open Settings to rename the selected wallet, update its starting balance, add another child wallet, or delete a wallet. Wallet deletion uses a confirm/cancel step and keeps at least one wallet available.
Use Remove latest entry in Settings to undo the most recent ledger entry for the selected wallet. The app offers a short undo window before the next change.
Use Print this ledger to print the selected child's ledger, or Print both ledgers to print both child wallets together.
Cofferly creates a local printable HTML file and opens it in your browser.
The repository includes an Inno Setup script at installer/Cofferly.iss.
Build the release executable first:
cargo build --releaseThen open installer/Cofferly.iss in Inno Setup and compile the installer. The installer output is written to dist/.
Install Rust from rustup.rs, then run:
cargo runTo create a release build:
cargo build --releaseThe app stores data locally in your operating system's app data folder.
Data files are encrypted at rest using the parent PIN (Argon2id key derivation + XChaCha20-Poly1305 authenticated encryption). This protects against casual tampering with the ledger file.
Old plain JSON files (including imports from Atlas Wallet / TallyNest / AirWallet) are automatically migrated to the encrypted format the first time you successfully unlock with the parent PIN.
Derived keys and plaintext serialization/decryption buffers are zeroized when dropped. The app's goal is family-use privacy and tamper resistance, not protection against a determined attacker who has the data file and can brute-force all 10,000 PINs offline.
If cargo is not on PATH on Windows, add Rust's Cargo folder to PATH:
$env:Path += ";$env:USERPROFILE\.cargo\bin"
cargo runSee docs/RELEASE.md.
- Simple enough for a family to use without setup
- Local-first, no accounts or cloud service required
- Easy to open source and maintain
- Friendly interface for parents and kids
This is a maintainer-led family app. Contributions are welcome when they fit the project goals, but all changes must go through issues or pull requests and maintainer review.
See CONTRIBUTING.md before opening a pull request.
Repository protection recommendations are documented in docs/GITHUB_SETTINGS.md.
MIT

