Goal Tracker is a free, open-source, offline-first habit and goal tracker for Android and iOS. Create recurring goals, log progress in a few taps, and follow streaks and statistics. No account, no subscription, no ads: every goal, log, and setting stays in a local SQLite database on your device.
| Fact | Detail |
|---|---|
| Price | Free. No ads, no subscriptions, no in-app purchases. |
| Platforms | Android (APK) and iOS (built from source) |
| Accounts | None. No sign-up, login, or cloud profile. |
| Offline | Yes. Core features work without a network connection. |
| Data | On-device SQLite database. Nothing is uploaded. |
| License | GNU General Public License v3.0 |
| Stack | Expo SDK 58, React Native 0.88, TypeScript, SQLite |
- No account, no cloud. Most habit trackers ask you to register and sync to a server. Goal Tracker skips both: your data lives in a local database and never leaves the device.
- Offline by default. Logging progress, streaks, statistics, and settings all work in airplane mode. There is no network dependency to break your routine.
- One log counts everywhere. A tracker can hold several goals at once, such as a daily reading goal and a weekly page target. Every log counts toward all of them.
- Goals that match real routines. Track a habit daily, weekly, monthly, or yearly, and scope a goal to one specific day, week, month, or year when you need a finite challenge.
- Open source and auditable. The full source is public under GPL-3.0. You can inspect what the app does, build it yourself, or fork it.
Create a tracker for reading, exercise, water intake, language practice, or any other routine. Each tracker has a name, unit, icon, color, and a default quick-add step.
Use checklist goals when completing the habit is the point, or numeric goals when you want to log amounts such as pages, liters, minutes, or repetitions. Both types appear on the Today screen.
Every goal can target a day, week, month, or year. A single tracker can carry multiple goals, and they all share the same log stream. Changing the week start in Settings does not rewrite existing history.
Recurring goals apply to every period. Scheduled goals apply only to a chosen window, which is useful for challenges like "read every day in November" or "run three times this week".
The Stats screen shows active streaks, best streaks, tracked goals, and completed periods. Streaks are calculated from logged periods, including month and year goals.
Give any goal an optional daily reminder time. Add a note to a goal to record why it matters, and attach a short note to individual log entries.
Choose a light, dark, or system theme, set the week to start on Monday or Sunday, toggle haptics, load example data, and reset everything from Settings.
Goal Tracker uses three simple concepts:
| Concept | What it means |
|---|---|
| Tracker | The thing you measure, such as Reading or Water. It stores the unit, icon, color, and quick-add step. |
| Goal | A target for a tracker in a period. One tracker can have a daily goal, a weekly goal, and a scheduled goal at the same time. |
| Log | A recorded amount or a completed check. Logs count toward every goal on that tracker, inside the goal's period and scope. |
This is why the app can show one log on the Today screen and still feed several targets: the log belongs to the tracker, while progress is calculated per goal.
- Open the latest release.
- Download
goal-tracker-<version>.apk. - Optionally verify the download with the matching
.sha256file. - Allow installs from your browser or file manager, then open the APK.
The APK is a release build for sideloading and testing. Goal Tracker is not published on Google Play yet.
An App Store build is not available yet. The project supports iOS and can be built from source with Xcode:
npx expo prebuild --platform ios
npx expo run:iosRequirements: Node.js LTS, npm, and an Android emulator, iOS simulator, physical device, or a development build.
git clone https://github.com/toprakpt1/goal-tracker.git
cd goal-tracker
npm install
npx expo startThen open the project in Expo Go, an emulator, a simulator, or a development build. For native modules, prefer a development build:
npx expo run:android
npx expo run:iosNative ios/ and android/ directories are generated and are not maintained in this repository.
- Open the Goals tab and create a tracker, or pick an existing one.
- Add a checklist or numeric goal and choose its target period.
- Use the Today tab to tick a goal off or log numeric progress.
- Open a goal to review progress, notes, and recent logs.
- Visit Stats to see completion totals, current streaks, and best streaks.
- Configure week start, theme, reminders, and haptics in Settings.
Captured from the Android emulator while running the app through Expo.
| Today | Goals |
|---|---|
| Stats | New Goal |
|---|---|
| Layer | Technology |
|---|---|
| Framework | Expo SDK 58, React Native 0.88 |
| Language | TypeScript |
| Navigation | Expo Router with file-based routes |
| Storage | expo-sqlite with versioned migrations |
| State | Zustand |
| Dates | date-fns |
| Icons | Lucide React Native and Expo vector icons |
| Notifications | expo-notifications with locally scheduled reminders |
| Tests | Jest and jest-expo |
The codebase is also a compact reference for a typed Expo Router app with a SQLite repository layer, domain-level period and streak logic, and tests that cover daylight-saving-time boundaries.
src/
├── app/ # Expo Router screens and layouts
├── components/ # Reusable mobile UI components
├── db/ # SQLite schema, migrations, queries, and repositories
├── domain/ # Goal periods, progress, scopes, and streak calculations
├── hooks/ # Data and settings hooks
├── i18n/ # User-facing strings
├── lib/ # Notifications, formatting, icons, and app utilities
├── store/ # Local application state
└── theme/ # Colors, typography, spacing, and theme helpers
npm test # unit tests plus daylight-saving-time boundary tests
npm run lint
npm run typecheckThe suite covers progress, streaks, periods, scoped goals, and daylight-saving-time transitions. It runs once in Europe/Istanbul and once in America/New_York to catch timezone bugs.
Yes. Goal Tracker is free and open source under the GNU GPL v3.0. There are no ads, subscriptions, in-app purchases, or paid tiers. You can download the Android APK from GitHub Releases, build it yourself, or fork the source.
Yes. Creating trackers, logging progress, streaks, statistics, reminders, and settings all work without an internet connection. Data is stored in a local SQLite database, and reminders are scheduled locally on your device.
No. There is no sign-up, login, email, or cloud profile. Open the app and start creating goals. Because there is no account, there is also no password to lose and no profile data to leak.
The codebase supports iOS and can be built from source with Xcode, but there is no App Store release yet. Android is the primary distribution channel today, with APK builds published on GitHub Releases.
Goals, logs, notes, and settings live in a local SQLite database (goaltracker.db) inside the app's private storage. Nothing is uploaded to a server. Uninstalling the app or choosing Reset all data permanently deletes it.
Not today. Goal Tracker is intentionally local-only, so there is no account or cloud sync. Data export and import are on the roadmap, which will make it possible to move data between devices manually.
Yes. Numeric goals have a unit and a target, and the quick-add step controls how much the + button logs. You can also create checklist goals that are simply ticked off when completion itself is the goal.
Yes. Each goal can have an optional daily reminder time, delivered as a local notification. Reminders work offline. You can turn notifications off in Settings, and the app asks for permission before scheduling anything.
Not yet. Android builds are published as APK files on the GitHub Releases page, and each release includes a SHA-256 checksum. Installing one requires allowing installs from your browser or file manager.
English only at the moment. All user-facing strings live in src/i18n/strings.ts, so adding another language does not require changes to individual screens. Localization is not scheduled on the roadmap yet.
Yes. The project is licensed under GPL-3.0 and the full source is on GitHub. Bug reports, feature requests, and pull requests are welcome. Run npm run lint, npm run typecheck, and npm test before opening a pull request.
- Goal and tracker management
- Daily, weekly, monthly, and yearly goals
- Quick progress logging and undo
- Streak and statistics views
- Local notifications and reminders
- Offline-first SQLite storage
- Scheduled goals and notes
- Data export and import
- Home-screen widgets
- More customization options
Suggestions and known issues are welcome in GitHub Issues.
Contributions are welcome. To propose a change:
- Fork the project.
- Create a feature branch (
git checkout -b feature/amazing-feature). - Commit your changes (
git commit -m 'Add some amazing feature'). - Push the branch (
git push origin feature/amazing-feature). - Open a pull request.
Please run npm run lint, npm run typecheck, and npm test before submitting a pull request. Small, focused pull requests are easiest to review.
Goal Tracker is designed to keep your data on your device:
- Goal data, logs, notes, settings, and statistics are stored locally in SQLite.
- Core functionality does not require an internet connection.
- Notifications are optional and can be disabled in Settings.
- The project includes no analytics, advertising, tracking, or third-party data collection.
Distributed under the GNU General Public License v3.0.
Toprak Talha Karcılar — @toprakpt1
Project link: https://github.com/toprakpt1/goal-tracker
If Goal Tracker is useful to you, starring the repository helps other people find it.