Ledger Service is the REST API service that organizes the ledger with double-entry accounting.
By using this project or its source code, for any purpose and in any shape or form, you grant your implicit agreement to all the following statements:
You condemn Russia and its military aggression against Ukraine
You recognize that Russia is an occupant that unlawfully invaded a sovereign state
You support Ukraine's territorial integrity, including its claims over temporarily occupied territories of Crimea and Donbas
You reject false narratives perpetuated by Russian state propaganda
- Ledgers
- Commodities (Currencies)
- Accounts (Categories)
- Transactions
- Tags
- Balance reports
- Balance sheet
- Cash flow statement
- Net worth statement
- Import from different/custom formats
- Export to csv
This project is licensed under the MIT License - see LICENSE file for details.
Contributions are welcome! Here's how to get started quickly and efficiently.
- Use Python 3.14+.
- Create a virtual environment and install runtime deps:
python3 -m venv .venv
source .venv/bin/activate
pip install -e .[dev]source .venv/bin/activate
python run_server.pyConfiguration is read from settings.yaml (see settings.example.yaml).
- Unit/integration tests:
pytest -q- With coverage:
pytest --cov=tmw_ledger --cov-report=term-missingThis project uses ruff for both linting and formatting (configured in pyproject.toml).
ruff check tmw_ledger tests
ruff format tmw_ledger testsmypy tmw_ledger- Create a feature branch from
main. - Follow Conventional Commits for messages (e.g.,
feat: add ledger summary endpoint). - Keep PRs focused and small; include tests for new behavior.
- Ensure CI basics pass locally: lint, format, type-check, and tests.
- Tests added/updated for changes
-
ruff checkandruff formatpass -
mypypasses - Brief description of changes and rationale
- Include steps to reproduce, expected vs actual behavior, and environment details.
- Propose a minimal fix or a direction when possible.
Thank you for helping improve Track My Wealth Ledger!