Wally
Self-hosted, lightweight expense tracker.
Install / Use
/learn @polius/WallyREADME
| | Desktop View | Mobile View | | --- | --- | --- | | Light | <img src="assets/dashboards-light.png?version=1.14" alt="Dashboards Light" /> | <img src="assets/dashboards-light-mobile.png?version=1.14" alt="Dashboards Light Mobile" /> | | Dark | <img src="assets/dashboards-dark.png?version=1.14" alt="Dashboards Dark" /> | <img src="assets/dashboards-dark-mobile.png?version=1.14" alt="Dashboards Dark Mobile" /> |
<details> <summary>Expand this to see screenshots of other pages</summary>| | Desktop View | Mobile View | | --- | --- | --- | | Transactions Light | <img src="assets/transactions-light.png?version=1.14" alt="Transactions Light" /> | <img src="assets/transactions-light-mobile.png?version=1.14" alt="Transactions Light Mobile " /> | | Transactions Dark | <img src="assets/transactions-dark.png?version=1.14" alt="Transactions Dark" /> | <img src="assets/transactions-dark-mobile.png?version=1.14" alt="Transactions Dark Mobile" /> | | Settings Light | <img src="assets/settings-light.png?version=1.14" alt="Settings Light" /> | <img src="assets/settings-light-mobile.png?version=1.14" alt="Settings Light Mobile" /> | | Settings Dark | <img src="assets/settings-dark.png?version=1.14" alt="Settings Dark" /> | <img src="assets/settings-dark-mobile.png?version=1.14" alt="Settings Dark Mobile" /> | | Login Light | <img src="assets/login-light.png?version=1.14" alt="Login Light" /> | <img src="assets/login-light-mobile.png?version=1.14" alt="Login Light Mobile" /> | | Login Dark | <img src="assets/login-dark.png?version=1.14" alt="Login Dark" /> | <img src="assets/login-dark-mobile.png?version=1.14" alt="Login Dark Mobile" /> |
</details>Quick Demo
Want to try Wally quickly? Run this command to start a demo instance with sample data:
docker run --rm -e DEMO=true -p 80:80 poliuscorp/wally
Then open http://localhost in your browser.
Note: This runs in demo mode with pre-loaded data. Your changes won't persist after stopping the container. For a permanent installation, see below.
Installation
Run with Docker CLI
docker run -d \
--name wally \
-p 80:80 \
-v $(pwd):/wally/data \
poliuscorp/wally
- The
-vflag ensures your data persists when the container restarts or is updated. - Replace
$(pwd)with the folder on your host where you want Wally to store its database.
Access Wally at: http://localhost
Run with Docker Compose
services:
wally:
image: poliuscorp/wally
container_name: wally
restart: unless-stopped
ports:
- "80:80"
volumes:
- $(pwd):/wally/data
- Replace
$(pwd)with the folder on your host where you want Wally to store its database.
Access Wally at: http://localhost
Environment variables
Wally supports the following environment variables:
| Variable | Sample Value | Details | | --- | --- | --- | | DEMO | true | Pre-loads the app with random demo data |
Data Import / Export
Wally supports CSV import/export. The file must contain the following columns:
name,category,type,amount,date,tags
Example
name,category,type,amount,date,tags
An expense,Rent,expense,1000.0,2025-08-01,
An income,Salary,income,2000.0,2025-08-01,"Tag1,Tag2"
typecan beincomeorexpense.tagsare optional and can be multiple, separated by commas.
This can be done directly from the Settings page.
Acknowledgement
Wally has been built using ExpenseOwl as an inspiration, and many ideas were derived from that project.
Key Differences
-
Login page: An optional login page was added. This enhancement provides an additional layer of security for those who prefer to protect Wally with authentication.
-
Dashboards page: A "Change" button was introduced to switch between different graphs. Users can now view expense trends not only on a monthly basis but also across an entire year. This replaces the doughnut chart with a line graph, allowing tracking of a specific category (like Restaurants) over time.
-
Transactions page: The table was replaced with one built using AG Grid, adding search, column sorting, and per-column filtering. A footer was also added to display the total number of rows, total income, and total expenses for the current view.
-
Recurring transactions: Editing and deletion were enhanced, allowing users to specify whether changes apply to all existing transactions or only future ones.
-
Backend rewrite: The backend was rewritten from Go to Python using FastAPI. This change provides a built-in API with interactive documentation at http://localhost/api/docs, making it easier to integrate external tools or automate tasks.
-
Dark theme improvements: The dark mode color palette was refined for improved visual consistency and better contrast, resulting in a more balanced and neutral appearance.
-
Storage changes: Wally uses SQLite as its data storage solution, while ExpenseOwl offers either JSON files or PostgreSQL. For the type and scale of data this application handles, SQLite was selected as a more suitable and efficient choice.
-
API Keys management: When login is enabled, users can create and manage API keys directly from the Settings page. This allows secure, token-based access to Wally's API for external integrations and automation.
-
Internationalization: Wally supports translation into over 10 languages, making it accessible to users worldwide.
Related Skills
node-connect
345.4kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
prose
345.4kOpenProse VM skill pack. Activate on any `prose` command, .prose files, or OpenProse mentions; orchestrates multi-agent workflows.
claude-opus-4-5-migration
104.6kMigrate prompts and code from Claude Sonnet 4.0, Sonnet 4.5, or Opus 4.1 to Opus 4.5
frontend-design
104.6kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
