Wallos — Self-Hosted, Open-Source

Lightweight personal subscription tracker with statistics and optional notifications.

License: GPL-3.0. Website: https://wallosapp.com. Source: https://github.com/ellite/wallos.

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.

Installation

## 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` ```bash 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 ``` 5. 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](#baremetal) and install / enable the missing ones, if any. 3. Run `http://domain.example/endpoints/db/migrate.php` #### Docker ```bash 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): ```bash 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

Why self-host Wallos

Self-hosting gives you three things SaaS can’t: data ownership (the files live on disks you control), cost predictability (a one-time setup vs. recurring per-seat fees that grow with your household or team), and longevity (open-source means the app keeps working even if the maintainers move on, since you can pin a working version). The trade-off is that you take on the operational work of running a server, applying updates, and handling backups.

What hardware do you need

Most self-hosted apps run comfortably on modest hardware — a Raspberry Pi 4, a mini PC, a NAS with Docker support, or a small VPS is usually enough for personal or family use. CPU and RAM requirements scale with how many simultaneous users or how much data you push through Wallos. Storage requirements depend on the kind of data you keep; check the README for guidance on data retention.

Where to go from here

  • Browse the full self-hosted app directory
  • Compare self-hosted alternatives side-by-side
  • DevOps roadmap — learn the skills to run your own server

Last verified: 2026-04-21