Wally is a lightweight, self-hosted expense tracker that makes it easy to manage your finances.
Desktop View | Mobile View | |
---|---|---|
Light | ||
Dark |
Expand this to see screenshots of other pages
Desktop View | Mobile View | |
---|---|---|
Transactions Light | ||
Transactions Dark | ||
Settings Light | ||
Settings Dark | ||
Login Light | ||
Login Dark |
The recommended installation method is Docker.
docker run -d \
--name wally \
-p 80:80 \
-v /path/to/data:/wally/data \
-e DEMO=true \ # Optional: pre-loads the app with random demo data
poliuscorp/wally
- The
-v
flag ensures your data persists when the container restarts or is updated. - Replace
/path/to/data
with the folder on your host where you want Wally to store its database.
services:
wally:
image: poliuscorp/wally
container_name: wally
restart: unless-stopped
ports:
- "80:80"
volumes:
- /path/to/data:/wally/data
# Optional: pre-loads the app with random demo data
environment:
DEMO: "true"
Once deployed, use the web interface to do everything. Access it through your browser:
Wally supports the following environment variables:
Variable | Sample Value | Details |
---|---|---|
DEMO | true | Pre-loads the app with random demo data |
HTTPS | true | Restricts authenticated API access to HTTPS only, ensuring authentication tokens are never sent over HTTP |
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"
type
can beincome
orexpense
.tags
are optional and can be multiple, separated by commas.
This can be done directly from the Settings page.
Wally has been built using ExpenseOwl as an inspiration, and many ideas were derived from that project.
-
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.