Wallos: Open-Source Personal Subscription Tracker
  • PHP 85%
  • JavaScript 10%
  • CSS 4.7%
  • Shell 0.1%
  • Hack 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
github-actions[bot] 8950e84125
chore(main): release 4.8.0 (#1029)
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-03-23 16:29:39 +00:00
.github push to GHCR 2024-05-27 19:01:11 +02:00
.tmp feat: add new notification methods (telegram, webhooks, gotify) (#295) 2024-05-06 00:15:44 +02:00
api add serverchan notification (#951) 2025-12-20 15:06:49 +00:00
db Better baremetal install/update method and guide 2023-11-17 01:17:36 +01:00
endpoints feat: add openai compatible host for ai recommendations 2026-03-23 16:24:26 +00:00
images feat: add at a glance dashboard 2025-08-12 00:48:13 +02:00
includes feat: add openai compatible host for ai recommendations 2026-03-23 16:24:26 +00:00
libs fix: session expiration on pwa on android (#1023) 2026-03-21 18:05:59 +00:00
migrations fix: ssrf vulnerability on all test notifications endpoint 2026-03-05 23:13:51 +01:00
screenshots feat: add health endpoint and healthcheck to container (#919) 2025-09-15 19:30:37 +02:00
scripts feat: add openai compatible host for ai recommendations 2026-03-23 16:24:26 +00:00
styles fix: vulnerability would allow to bypass 2fa (#1021) 2026-03-19 17:54:25 +00:00
webfonts fix: missing folders on baremetal installation (#554) 2024-10-05 22:35:52 +02:00
.dockerignore fix: visual issue with date fields on ios (#846) 2025-06-09 17:44:59 +02:00
.gitignore Automatically run migration script when loading the registration page. 2024-02-14 16:54:16 +01:00
about.php feat: increase privacy by not sending referrer to external urls 2025-03-20 16:53:57 +00:00
admin.php feat: add openai compatible host for ai recommendations 2026-03-23 16:24:26 +00:00
calendar.php fix: vulnerability on delete avatar 2025-05-03 15:37:10 +02:00
CHANGELOG.md chore(main): release 4.8.0 (#1029) 2026-03-23 16:29:39 +00:00
CONTRIBUTING.md Create CONTRIBUTING.md 2025-03-22 12:47:05 +00:00
cronjobs feat: add openai compatible host for ai recommendations 2026-03-23 16:24:26 +00:00
docker-compose.yaml Create docker-compose.yaml (#577) 2024-10-18 22:38:49 +02:00
Dockerfile Update container to php8.3 (#933) 2025-10-12 15:14:58 +02:00
health.php Add Dockerfile HEALTHCHECK command and basic healthcheck reply (#918) 2025-09-15 17:41:41 +02:00
index.php feat: add openai compatible host for ai recommendations 2026-03-23 16:24:26 +00:00
LICENSE.md Wallos v0.9 2023-10-05 22:39:37 +02:00
login.php fix: session expiration on pwa on android (#1023) 2026-03-21 18:05:59 +00:00
logos.php add autocomplete attribute for inputs (#926) 2025-10-12 12:52:10 +02:00
logout.php fix: session expiration on pwa on android (#1023) 2026-03-21 18:05:59 +00:00
manifest.json feat: add at a glance dashboard 2025-08-12 00:48:13 +02:00
nginx.conf Enable IPv6 environments by configuring a dual-stack listen in Nginx (#839) 2025-06-08 14:45:38 +02:00
nginx.default.conf Enable IPv6 environments by configuring a dual-stack listen in Nginx (#839) 2025-06-08 14:45:38 +02:00
passwordreset.php fix: session expiration on pwa on android (#1023) 2026-03-21 18:05:59 +00:00
profile.php fix: ssrf vulnerability on all test notifications endpoint 2026-03-05 23:13:51 +01:00
README.md feat: add openai compatible host for ai recommendations 2026-03-23 16:24:26 +00:00
registration.php add autocomplete attribute for inputs (#926) 2025-10-12 12:52:10 +02:00
robots.txt Added robots.txt file (#961) 2025-12-20 15:00:14 +00:00
SECURITY.md feat: enable progressive web app 2024-02-27 19:04:04 +01:00
service-worker.js fix: vulnerability would allow to bypass 2fa (#1021) 2026-03-19 17:54:25 +00:00
settings.php feat: add openai compatible host for ai recommendations 2026-03-23 16:24:26 +00:00
startup.sh Make container shutdown instant & graceful: add dumb-init and signal-aware startup.sh (no tail -f) (#913) 2025-09-14 11:29:40 +02:00
stats.php feat: add at a glance dashboard 2025-08-12 00:48:13 +02:00
subscriptions.php feat: add openai compatible host for ai recommendations 2026-03-23 16:24:26 +00:00
totp.php fix: session expiration on pwa on android (#1023) 2026-03-21 18:05:59 +00:00
verifyemail.php fix: session expiration on pwa on android (#1023) 2026-03-21 18:05:59 +00:00

Wallos

Wallos: Open-Source Personal Subscription Tracker

Stars Docker GitHub contributors GitHub Sponsors Discord

Table of Contents

Introduction

Wallos is a powerful, open-source, and self-hostable web application designed to empower you in managing your finances with ease. Say goodbye to complicated spreadsheets and expensive financial software – Wallos simplifies the process of tracking expenses and helps you gain better control over your financial life.

Features

  • Subscription Management: Keep track of your recurring subscriptions and payments, ensuring you never miss a due date.
  • Category Management: Organize your expenses into customizable categories, enabling you to gain insights into your spending habits.
  • Multi-Currency support: Wallos supports multiple currencies, allowing you to manage your finances in the currency of your choice.
  • Currency Conversion: Integrates with the Fixer API so you can get exchange rates and see all your subscriptions on your main currency.
  • Data Privacy: As a self-hosted application, Wallos ensures that your financial data remains private and secure on your own server.
  • Customization: Tailor Wallos to your needs with customizable categories, currencies, themes and other display options.
  • Sorting Options: Allowing you to view your subscriptions from different perspectives.
  • Logo Search: Wallos can search the web for the logo of your subscriptions if you don't have them available for upload.
  • Mobile view: Wallos on the go.
  • Statistics: Another perspective into your spendings.
  • Notifications: Wallos supports multiple notification methods (email, discord, pushover, telegram, gotify and webhooks). Get notified about your upcoming payments.
  • Multi Language support.
  • OIDC with OAuth
  • AI Recommendations with ChatGPT, Gemini or Local Ollama

Demo

If you want to try Wallos, a demo is available at https://demo.wallosapp.com.
The database is reset every 2 hours.
To access the demo use the following credentials:

Username: demo  
Password: demo

Getting Started

See instructions to run Wallos below.

Prerequisites

Baremetal

  • NGINX or APACHE websever running
  • PHP 8.3 with the following modules enabled:
    • curl
    • dom
    • gd
    • imagick
    • intl
    • openssl
    • sqlite3
    • zip
    • mbstring
    • fpm

Docker

  • Docker

Installation

Baremetal

  1. Download or clone this repo and move the files into your web root - usually /var/www/html
  2. Rename /db/wallos.empty.db to /db/wallos.db
  3. Run http://domain.example/endpoints/db/migrate.php on your browser
  4. Add the following scripts to your cronjobs with crontab -e
0 1 * * * php /var/www/html/endpoints/cronjobs/updatenextpayment.php >> /var/log/cron/updatenextpayment.log 2>&1
0 2 * * * php /var/www/html/endpoints/cronjobs/updateexchange.php >> /var/log/cron/updateexchange.log 2>&1
0 8 * * * php /var/www/html/endpoints/cronjobs/sendcancellationnotifications.php >> /var/log/cron/sendcancellationnotifications.log 2>&1
0 9 * * * php /var/www/html/endpoints/cronjobs/sendnotifications.php >> /var/log/cron/sendnotifications.log 2>&1
*/2 * * * * php /var/www/html/endpoints/cronjobs/sendverificationemails.php >> /var/log/cron/sendverificationemail.log 2>&1
*/2 * * * * php /var/www/html/endpoints/cronjobs/sendresetpasswordemails.php >> /var/log/cron/sendresetpasswordemails.log 2>&1
0 */6 * * * php /var/www/html/endpoints/cronjobs/checkforupdates.php >> /var/log/cron/checkforupdates.log 2>&1
30 1 * * 1 php /var/www/html/endpoints/cronjobs/storetotalyearlycost.php >> /var/log/cron/storetotalyearlycost.log 2>&1
30 3 * * 1 php /var/www/html/endpoints/cronjobs/generaterecommendations.php weekly >> /var/log/cron/generaterecommendations.log 2>&1
0 4 1 * * php /var/www/html/endpoints/cronjobs/generaterecommendations.php monthly >> /var/log/cron/generaterecommendations.log 2>&1
  1. If your web root is not /var/www/html/ adjust the cronjobs above accordingly.

Updating

  1. Re-download the repo and move the files into the correct folder or do git pull (if you used git clone before)
  2. Check the Prerequisites and install / enable the missing ones, if any.
  3. Run http://domain.example/endpoints/db/migrate.php

Docker

docker run -d --name wallos -v /path/to/config/wallos/db:/var/www/html/db \
-v /path/to/config/wallos/logos:/var/www/html/images/uploads/logos \
-e TZ=Europe/Berlin -p 8282:80 --restart unless-stopped \
bellamy/wallos:latest

Disable healthcheck (optional, e.g., for Docker <25 or faster startup reporting):

docker run -d --name wallos -v /path/to/config/wallos/db:/var/www/html/db \
-v /path/to/config/wallos/logos:/var/www/html/images/uploads/logos \
-e TZ=Europe/Berlin -p 8282:80 --restart unless-stopped \
--health-cmd=NONE \
bellamy/wallos:latest

Docker Compose

services:
  wallos:
    container_name: wallos
    image: bellamy/wallos:latest
    ports:
      - "8282:80/tcp"
    environment:
      TZ: 'America/Toronto'
    # Volumes store your data between container upgrades
    volumes:
      - './db:/var/www/html/db'
      - './logos:/var/www/html/images/uploads/logos'
    restart: unless-stopped

Disable healthcheck (optional, e.g., for Docker <25 or faster startup reporting):

services:
  wallos:
    container_name: wallos
    image: bellamy/wallos:latest
    ports:
      - "8282:80/tcp"
    environment:
      TZ: 'America/Toronto'
    volumes:
      - './db:/var/www/html/db'
      - './logos:/var/www/html/images/uploads/logos'
    restart: unless-stopped
    healthcheck:
      test: ["NONE"]

Usage

Just open the browser and open ip:port of the machine running wallos.
On the first time you run wallos a user account must be created.
Go to settings and personalise your Avatar and add members of your household. While there add / remove any categories and currencies.
Get a free API Key from Fixer and add it in the settings.
If you want to trigger an Update of the exchange rates, change your main currency after adding the API Key, and then change it back to your preferred one.

Screenshots

Screenshot

Screenshot

Screenshot

Screenshot

Screenshot

Screenshot Screenshot

Screenshot Screenshot

OIDC

OIDC can be enabled on the Admin page and can be used with providers that support OAuth.

API Documentation

Wallos provides a comprehensive API that allows you to interact with the application programmatically. The API documentation is available at https://api.wallosapp.com/.

Contributing

Feel free to open Pull requests with bug fixes and features. I'll do my best to keep an eye on those.
Feel free to open issues with bug reports or feature requests. Bug fixes will take priority.
I welcome contributions from the community and look forward to working with you to improve this project.

Contributors

Translations

If you want to contribute with a translation of wallos:

  • Add your language code to includes/i18n/languages.php in the format "en" => ["name" => "English", "dir" => "ltr"],. Please use the original language name and not the english translation.
  • Create a copy of the file includes/i18n/en.php and rename it to the language code you used above. Example: pt.php for "pt" => ["name" => "Português", "dir" => "ltr"],.
  • Translate all the values on the language file to the new language. (Incomplete translations will not be accepted).
  • Create a copy of the file scripts/i18n/en.js and rename it to the language code you used above. Example: pt.js for "pt" => ["name" => "Português", "dir" => "ltr"],.
  • Translate all the values on the language file to the new language. (Incomplete translations will not be accepted).

License

This project is licensed under the GNU General Public License, Version 3 - see the LICENSE.md file for details.

Why GPLv3?

I chose the GNU General Public License version 3 (GPLv3) for this project because it ensures that the software remains open source and freely available to the community. GPLv3 mandates that any derivative works or modifications must also be released under the same license, promoting the principles of software freedom.

I strongly believe in the importance of open source software and the collaborative nature of development, and I invite contributors to help improve this project.