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.
Install MooMoolah using pip:
pip install moomoolahI wanted a simple way to manage my monthly budget, and I got tired of trying to bend Google Sheets to do what I needed.
So I decided to build my own, in the terminal, as that's how I like my computing.
Local, private and dead simple.
- 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
 
Main screen:
Adding an expense:
Run the application with an optional state file:
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(ifXDG_DATA_HOMEis 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.
- 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) 
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)
 
See plan.md for current development roadmap and planned features.
This project uses uv for dependency management.
- 
Install uv if you haven't already:
curl -LsSf https://astral.sh/uv/install.sh | sh - 
Install dependencies:
uv sync
 - 
Run the application:
# With default state file location uv run moomoolah # Or with a specific state file uv run moomoolah <state_file.json>
 
uv run pytest