Zero is a lightweight, open-source expense tracking app for Android & iOS. Built with privacy-first approach — all your financial data stays on your device. No servers, no tracking, no data collection.
- WatermelonDB + SQLite — Migrated from Realm to WatermelonDB for better performance and long-term support
- Faster load times — Lazy loading and optimized queries
- Improved UI — Bottom sheets, better animations, refined design
- Better data export — Export/import your data seamlessly across devices
Add, edit, and delete transactions with customizable categories.
Create your own categories with custom icons and colors.
- Monthly spending breakdown with pie charts
- Heatmap calendar showing daily expenses
- Average per day calculations
Track money you owe or are owed. Manage debtors and individual debts.
- Light & Dark themes (+ system default)
- Multiple currency symbols
- Personalized username
- Export all data as JSON
- Import on new device
- Delete all data option
- 100% offline — no internet required
- All data stored locally on device
- Zero data collection
| Layer | Technology |
|---|---|
| Framework | React Native 0.84 |
| Language | TypeScript 5.8 (strict) |
| Database | WatermelonDB (SQLite + JSI) |
| State | Redux Toolkit + Redux Persist |
| Validation | Zod 4 |
| UI | Custom atomic components + Lucide icons |
| Navigation | React Navigation 7 |
| Lists | FlashList (performant lists) |
| Storage | MMKV (preferences & persistence) |
We migrated from Realm to WatermelonDB because:
- Realm is deprecated — MongoDB announced end of support
- SQLite is battle-tested — Powers millions of apps
- Lazy loading — Only loads data when needed
- Better React Native integration — Built specifically for RN
- Smaller bundle size — Less bloat
src/
├── components/ # Reusable UI components (atomic design)
│ ├── atoms/ # Basic components (Button, Input, Text, ErrorBoundary)
│ └── molecules/ # Composite components
├── screens/ # App screens
│ └── ScreenName/
│ ├── index.tsx # UI component
│ └── useScreenName.ts # Business logic hook
├── watermelondb/ # Database layer
│ ├── models/ # WatermelonDB model classes
│ ├── services/ # CRUD operations
│ ├── schema.ts # Database schema
│ ├── migrations.ts # Schema migrations
│ └── database.ts # DB initialization (lazy Proxy)
├── backend/ # Startup & data logic
│ ├── export/ # Export format, upgrader, validation
│ └── migrations/ # Sequential data migrations
├── redux/ # Redux Toolkit slices & store
├── navigation/ # React Navigation config
├── context/ # React Context providers (Theme, Dialog)
├── hooks/ # Global hooks
├── styles/ # Global styles (utility-first)
├── utils/ # Helper functions
└── sheets/ # Bottom sheet components
- Node.js >= 22.11.0
- Bun (package manager)
- Android Studio / Xcode
# Clone the repo
git clone https://github.com/indranilbhuin/zero.git
cd zero
# Install dependencies
bun install
# iOS only
cd ios && bundle exec pod install && cd ..
# Run the app
bun run android # or bun run ios
# Type-check
bun run typecheckContributions are welcome! Please read our Code of Conduct first.
- Privacy Policy — We collect zero data
- Terms of Service — Usage terms
This project is licensed under the BSD 2-Clause License.
Built with ❤️ in India
Embrace the simplicity of zero









