All apps · 0 apps
Subs
Docker app from grtgbln's Repository
Overview
Readme
View on GitHubSubs
Open source subscription tracker built for people who want a fast, simple way to understand recurring costs.
Subs helps you log your subscriptions, view totals across currencies, and keep track of upcoming payments without sending your data to third-party services.
Live Demo
Try it now: subs.ajnart.fr
What You Can Do
- Add, edit, and delete subscriptions
- Track billing cycles (daily, weekly, monthly, yearly)
- Show next payment date with automatic future-date calculation
- Search, sort, and filter subscriptions
- View totals in multiple currencies with conversion rates
- Import and export your subscriptions as JSON
- Use keyboard shortcuts for common actions
- Use a responsive interface on desktop and mobile
Tech Stack
- Remix + React
- Tailwind CSS + shadcn/ui
- Zustand for client-side state
- Playwright for end-to-end tests
- Biome for linting/formatting
Storage Options
Subs supports two persistence modes:
- Browser storage
- Server-side JSON file storage
The mode is controlled by USE_LOCAL_STORAGE.
USE_LOCAL_STORAGE=true: use browser local storageUSE_LOCAL_STORAGE=false(default): use server endpoint storage indata/config.json
Quick Start
Requirements
- Node.js 20+
- npm or Bun
Install
Using npm:
npm install
Using Bun:
bun install
Run Development Server
Using npm:
npm run dev
Using Bun:
bun run dev
Open http://localhost:3000.
Scripts
npm run dev- start local development servernpm run build- create production buildnpm run start- run production buildnpm run test- run Playwright testsnpm run test:ui- open Playwright UI modenpm run typecheck- TypeScript type checkingnpm run lint- lint with Biomenpm run format- format with Biome
Docker
Run with Docker:
docker run -p 7574:7574 -v ./data:/app/data --name subs --rm ghcr.io/ajnart/subs
Then open http://localhost:7574.
Docker Compose
services:
subs:
image: ghcr.io/ajnart/subs
container_name: subs
ports:
- "7574:7574"
restart: unless-stopped
volumes:
- ./data:/app/data
# environment:
# - USE_LOCAL_STORAGE=true
Start it:
docker compose up -d
Keyboard Shortcuts
n- open Add Subscription/- focus SearchCtrl/Cmd + e- export JSONCtrl/Cmd + i- import JSON?- open keyboard shortcuts dialogEscape- close open dialog/popover
Project Structure
app/routes/_index.tsx- main dashboard viewapp/components/- UI and feature componentsapp/store/subscriptionStore.ts- subscription state and persistenceapp/utils/nextPaymentDate.ts- billing cycle date logictests/- Playwright test suite
Contributing
Contributions are welcome.
- Fork and clone the repository.
- Create a feature branch.
- Run checks before opening a PR:
npm run typecheck
npm run test
- Open a pull request with a clear description of changes.
License
MIT
Install Subs on Unraid in a few clicks.
Find Subs in Community Apps on your Unraid server, review the template, and click Install. Unraid handles the Docker app or plugin setup from the published template.
Categories
Related apps
Explore more like this
Explore allDetails
ghcr.io/ajnart/subs:latestRuntime arguments
- Web UI
http://[IP]:[PORT:3000]- Network
bridge- Privileged
- false
Template configuration
Container Port: 3000
- Target
- 3000
- Default
- 3000
- Value
- 3000
Database directory
- Target
- /database
- Default
- /mnt/user/appdata/subs/database
- Value
- /mnt/user/appdata/subs/database
Internal database URL
- Target
- DATABASE_URL
- Default
- file:/database/db.sqlite
- Value
- file:/database/db.sqlite
Use KV database instead of localStorage
- Target
- NEXT_PUBLIC_USE_SQLITE
- Default
- false|true