Thanks to visit codestin.com
Credit goes to github.com

Skip to content

polius/Wally

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

79 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Wally Logo

Wally

Release GitHub Release Docker Pulls


Wally is a lightweight, self-hosted expense tracker that makes it easy to manage your finances.


Desktop View Mobile View
Light Dashboards Light Dashboards Light Mobile
Dark Dashboards Dark Dashboards Dark Mobile
Expand this to see screenshots of other pages
Desktop View Mobile View
Transactions Light Transactions Light Transactions Light Mobile
Transactions Dark Transactions Dark Transactions Dark Mobile
Settings Light Settings Light Settings Light Mobile
Settings Dark Settings Dark Settings Dark Mobile
Login Light Login Light Login Light Mobile
Login Dark Login Dark Login Dark Mobile

Installation

The recommended installation method is Docker.

Run with Docker CLI

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.

Run with Docker Compose

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:

http://localhost/

Environment variables

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

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"
  • type can be income or expense.
  • tags are 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.