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.
Try it now: subs.ajnart.fr
- 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
- Remix + React
- Tailwind CSS + shadcn/ui
- Zustand for client-side state
- Playwright for end-to-end tests
- Biome for linting/formatting
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
- Node.js 20+
- npm or Bun
Using npm:
npm installUsing Bun:
bun installUsing npm:
npm run devUsing Bun:
bun run devOpen http://localhost:3000.
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
Run with Docker:
docker run -p 7574:7574 -v ./data:/app/data --name subs --rm ghcr.io/ajnart/subsThen open http://localhost:7574.
services:
subs:
image: ghcr.io/ajnart/subs
container_name: subs
ports:
- "7574:7574"
restart: unless-stopped
volumes:
- ./data:/app/data
# environment:
# - USE_LOCAL_STORAGE=trueStart it:
docker compose up -dn- open Add Subscription/- focus SearchCtrl/Cmd + e- export JSONCtrl/Cmd + i- import JSON?- open keyboard shortcuts dialogEscape- close open dialog/popover
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
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.
MIT
