A command-line app to track your subscriptions, monitor costs, and get upcoming renewal reminders. Built with Java 17+, SQLite, and Maven.
- Add, update, and delete subscriptions
- Cancel and reactivate subscriptions
- Filter by active or cancelled
- Upcoming renewal alerts (within a custom day window)
- Monthly and annual cost summary, broken down by category
- Supports monthly, annual, and weekly billing cycles
- Data persisted locally in a SQLite database
- Java 17 or higher
- Maven 3.6+ (only needed to build from source)
Download the latest JAR from Releases and run:
java -jar subscription-tracker.jarThe database file (subscriptions.db) and logs (logs/app.log) are created automatically in the same directory.
git clone https://github.com/Arei1997/subscription-tracker.git
cd subscription-tracker
mvn clean package
java -jar target/subscription-tracker.jarmvn test29 tests — 12 repository integration tests (real SQLite in-memory) and 17 service unit tests (Mockito).
src/
├── main/
│ ├── java/com/tracker/
│ │ ├── Main.java # Entry point, CLI menu
│ │ ├── model/ # Subscription record + enums
│ │ ├── repository/ # All SQL (DatabaseInitialiser, SubscriptionRepository)
│ │ └── service/ # Business logic (SubscriptionService)
│ └── resources/
│ └── logback.xml # Logging config
└── test/
└── java/com/tracker/
├── repository/SubscriptionRepositoryTest.java
└── service/SubscriptionServiceTest.java
| File | Purpose |
|---|---|
subscriptions.db |
SQLite database — created on first run |
logs/app.log |
Rolling log file, 7 days kept |
To inspect the database, use DB Browser for SQLite or the SQLite Viewer extension in VS Code.