Why Track Subscriptions Yourself?
Subscription costs are easy to ignore individually and painful to tally collectively. A streaming service here, a cloud storage plan there, a password manager, a news site, a fitness app – each charge is small enough to dismiss until you actually add them up. Most people have no clear picture of what they spend on recurring services every month, and banking apps rarely present this information in a useful way.
Wallos is an open-source, self-hosted subscription tracker that gives you a clean dashboard to log every recurring expense, set currencies, track renewal dates, and categorize spending however you want. It runs in a Docker container, stores data locally, and does not send anything to a third-party server.
This guide walks through the full setup from installation to first use.

What You Need Before You Start
Wallos runs on Docker, so you need Docker and Docker Compose installed on whatever machine you plan to use as a host – a home server, a Raspberry Pi, a VPS, or even a spare laptop running Linux. If you already run self-hosted services like Nextcloud, you already have the prerequisites in place. The machine does not need significant resources – Wallos is lightweight and will run comfortably alongside other containers.
You also need a basic understanding of how to edit text files and run terminal commands. Wallos does not require a database server – it uses SQLite by default, which keeps setup simple. No separate MySQL or PostgreSQL instance is needed, and there is no complex configuration before the app will start.
Make sure port 8282 is available on your host machine, or choose an alternative port and adjust accordingly throughout the setup. If you plan to access Wallos from outside your local network, you will want a reverse proxy like Nginx Proxy Manager or Caddy, and a domain or subdomain pointed at your server.
Installing Wallos with Docker Compose
Create a directory for the project. Inside it, create a file called docker-compose.yml and paste in the following configuration:
version: '3'
services:
wallos:
image: bellamy/wallos:latest
container_name: wallos
ports:
- "8282:80"
volumes:
- ./data/wallos/db:/var/www/html/db
- ./data/wallos/logos:/var/www/html/images/uploads/logos
environment:
- TZ=America/New_York
restart: unless-stopped

Adjust the TZ value to match your timezone – this affects how renewal dates display and when notifications trigger. The two volume mounts are important: the first persists your SQLite database across container restarts, and the second saves any subscription logos you upload so they survive updates. Without those mounts, all your data disappears whenever the container is recreated.
Run docker compose up -d from inside the project directory. Docker will pull the Wallos image and start the container in the background. Give it about thirty seconds, then open a browser and navigate to http://your-server-ip:8282. You will be greeted by an account creation screen. This first account becomes the admin account, so use a strong password even if you plan to keep the instance private.
Configuring Wallos and Adding Subscriptions
After logging in, go to the settings panel first. Set your primary currency, choose your preferred date format, and configure the notification system if you want email alerts before renewals hit. Wallos supports SMTP for outgoing mail, so you can connect it to a Gmail address, a self-hosted mail server, or any transactional email provider that gives you SMTP credentials. Fill in the host, port, username, password, and sender address, then use the test button to confirm delivery before relying on it.
Adding subscriptions is straightforward. Hit the plus button on the main dashboard, enter the service name, the billing amount, the currency, the payment cycle (monthly, yearly, or custom), and the next renewal date. You can upload a logo for each service or let Wallos pull one automatically from a built-in icon library that covers most major platforms. Categories are user-defined, so you can organize subscriptions however makes sense to you – by type, by household member, by necessity, or by which ones you are actively considering canceling.
The dashboard view gives you a monthly and yearly total at a glance, broken down by category if you have set those up. Payment method tracking is also available, which is useful if you want to see how much of your recurring spend runs through a particular card or bank account. Wallos does not connect to any financial institution – all entries are manual, which is exactly the point. You are building a deliberate, curated record rather than an automatically scraped one.

Keeping It Running and Up to Date
Wallos updates frequently, and pulling new versions is straightforward with Docker. Run docker compose pull followed by docker compose up -d to grab the latest image and restart the container. Because your database and logos are stored in mounted volumes outside the container, the update process does not touch your data. Check the Wallos GitHub releases page occasionally – the project is under active development, and new features appear regularly, including multi-user support, additional notification channels, and import tools for migrating from spreadsheets or other trackers.
If you discover that you are spending more on subscriptions than you expected – which most people do the first time they actually list everything out – Wallos makes it easy to flag services for review without deleting them, so you can keep a watchlist of subscriptions you plan to cancel at the next renewal rather than ones you have already removed from the list entirely. That distinction matters when you are trying to time cancellations correctly and avoid being charged for another cycle.
Frequently Asked Questions
Does Wallos require a database server like MySQL?
No. Wallos uses SQLite by default, so no separate database server is needed. Everything is stored in a single local file.
Can I access Wallos from outside my home network?
Yes, but you need a reverse proxy and a domain or subdomain pointed at your server to expose it securely over the internet.





