Name | moomoolah JSON |
Version |
0.3.0
JSON |
| download |
home_page | None |
Summary | MooMoolah - Personal Budget Planner |
upload_time | 2025-07-09 23:30:14 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.11 |
license | None |
keywords |
budget
personal-finance
textual
tui
|
VCS |
|
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# MooMoolah
A terminal-based personal budget planning application built with Python and Textual.
Your data is stored locally in a JSON file, keeping your financial information
private and accessible offline.
## Features
- **12-month forecast view** - Shows projected expenses, income, and balance for the next 12 months
- **Expense and Income management** - Add, edit, and delete expense/income entries
- **Recurring entries** - Support for one-time, monthly, and yearly recurring transactions
- **Category tracking** - Organize entries by categories
## Screenshots
Main screen:
[](./demo_main_screen.svg)
Adding an expense:
[](./demo_add_expense.svg)
## Installation
Install MooMoolah using pip:
```bash
pip install moomoolah
```
## Usage
Run the application with an optional state file:
```bash
moomoolah [state_file.json]
```
If no state file is provided, MooMoolah will use a default location following the XDG Base Directory specification:
- `$XDG_DATA_HOME/moomoolah/state.json` (if `XDG_DATA_HOME` is set)
- `~/.local/share/moomoolah/state.json` (default on Linux/Unix)
The state file will be created if it doesn't exist. State files are stored with restricted permissions (600) for security.
## Usage
### Navigation
- **Main screen**: `e` (manage expenses), `i` (manage income)
- **Entry screens**: `Insert` (add entry), `Delete` (remove entry), click row to edit
- **Global shortcuts**: `Ctrl+S` (save), `Ctrl+Q` (quit), `Escape`/`Backspace` (back)
### Entry Management
Each entry includes:
- Description and amount
- Category for organization
- Recurrence type (once, monthly, yearly)
- Start date and optional end date
- Frequency interval (e.g., every 2 months)
## Development
See [plan.md](plan.md) for current development roadmap and planned features.
This project uses [uv](https://docs.astral.sh/uv/) for dependency management.
### Setup
1. Install uv if you haven't already:
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
```
2. Install dependencies:
```bash
uv sync
```
3. Run the application:
```bash
# With default state file location
uv run moomoolah
# Or with a specific state file
uv run moomoolah <state_file.json>
```
### Running Tests
```bash
uv run pytest
```
Raw data
{
"_id": null,
"home_page": null,
"name": "moomoolah",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.11",
"maintainer_email": null,
"keywords": "budget, personal-finance, textual, tui",
"author": null,
"author_email": "Elias Dorneles <elias.dorneles@hey.com>",
"download_url": "https://files.pythonhosted.org/packages/e2/3a/4332a080e97a6db685632d78fd76e2b3302a28f01a845a97675bd851b2ad/moomoolah-0.3.0.tar.gz",
"platform": null,
"description": "# MooMoolah\n\nA terminal-based personal budget planning application built with Python and Textual.\n\nYour data is stored locally in a JSON file, keeping your financial information\nprivate and accessible offline.\n\n## Features\n\n- **12-month forecast view** - Shows projected expenses, income, and balance for the next 12 months\n- **Expense and Income management** - Add, edit, and delete expense/income entries\n - **Recurring entries** - Support for one-time, monthly, and yearly recurring transactions\n - **Category tracking** - Organize entries by categories\n\n## Screenshots\n\nMain screen:\n\n[](./demo_main_screen.svg)\n\nAdding an expense:\n\n[](./demo_add_expense.svg)\n\n## Installation\n\nInstall MooMoolah using pip:\n\n```bash\npip install moomoolah\n```\n\n## Usage\n\nRun the application with an optional state file:\n\n```bash\nmoomoolah [state_file.json]\n```\n\nIf no state file is provided, MooMoolah will use a default location following the XDG Base Directory specification:\n- `$XDG_DATA_HOME/moomoolah/state.json` (if `XDG_DATA_HOME` is set)\n- `~/.local/share/moomoolah/state.json` (default on Linux/Unix)\n\nThe state file will be created if it doesn't exist. State files are stored with restricted permissions (600) for security.\n\n## Usage\n\n### Navigation\n- **Main screen**: `e` (manage expenses), `i` (manage income)\n- **Entry screens**: `Insert` (add entry), `Delete` (remove entry), click row to edit\n- **Global shortcuts**: `Ctrl+S` (save), `Ctrl+Q` (quit), `Escape`/`Backspace` (back)\n\n### Entry Management\n\nEach entry includes:\n\n- Description and amount\n- Category for organization\n- Recurrence type (once, monthly, yearly)\n- Start date and optional end date\n- Frequency interval (e.g., every 2 months)\n\n## Development\n\nSee [plan.md](plan.md) for current development roadmap and planned features.\n\nThis project uses [uv](https://docs.astral.sh/uv/) for dependency management.\n\n### Setup\n\n1. Install uv if you haven't already:\n ```bash\n curl -LsSf https://astral.sh/uv/install.sh | sh\n ```\n\n2. Install dependencies:\n ```bash\n uv sync\n ```\n\n3. Run the application:\n ```bash\n # With default state file location\n uv run moomoolah\n\n # Or with a specific state file\n uv run moomoolah <state_file.json>\n ```\n\n### Running Tests\n```bash\nuv run pytest\n```\n",
"bugtrack_url": null,
"license": null,
"summary": "MooMoolah - Personal Budget Planner",
"version": "0.3.0",
"project_urls": null,
"split_keywords": [
"budget",
" personal-finance",
" textual",
" tui"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "50a5239c237bf1302e126f6b65c4ae2a299baaa58baf376b9e54c8effd837b4d",
"md5": "16fc9f9f8d24f110613e10c4b87525a3",
"sha256": "227606a0f6f4d7e27d7643329be77047a365882bb637317a9a159124318a58ce"
},
"downloads": -1,
"filename": "moomoolah-0.3.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "16fc9f9f8d24f110613e10c4b87525a3",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.11",
"size": 14395,
"upload_time": "2025-07-09T23:30:13",
"upload_time_iso_8601": "2025-07-09T23:30:13.639482Z",
"url": "https://files.pythonhosted.org/packages/50/a5/239c237bf1302e126f6b65c4ae2a299baaa58baf376b9e54c8effd837b4d/moomoolah-0.3.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e23a4332a080e97a6db685632d78fd76e2b3302a28f01a845a97675bd851b2ad",
"md5": "c291755efa305b2b47c5146b7e233649",
"sha256": "86f977a2c3519b2f1d85037ba6c41b9ef1c5ad0e303d318a98ef8d780338e9fe"
},
"downloads": -1,
"filename": "moomoolah-0.3.0.tar.gz",
"has_sig": false,
"md5_digest": "c291755efa305b2b47c5146b7e233649",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.11",
"size": 12994,
"upload_time": "2025-07-09T23:30:14",
"upload_time_iso_8601": "2025-07-09T23:30:14.889342Z",
"url": "https://files.pythonhosted.org/packages/e2/3a/4332a080e97a6db685632d78fd76e2b3302a28f01a845a97675bd851b2ad/moomoolah-0.3.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-09 23:30:14",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "moomoolah"
}