Noureddine RAMDI / OpenNutriTracker: a privacy-first calorie tracker built in Flutter with local encrypted storage

Created Sat, 23 May 2026 20:41:14 +0000 Modified Sat, 23 May 2026 20:41:27 +0000

simonoppowa/OpenNutriTracker

OpenNutriTracker tackles a familiar problem with a clear stance: how to track daily nutrition and calories on your phone without surrendering your data to cloud servers or invasive tracking. It’s a mobile app built with Flutter and Dart, integrating multiple open food databases and a barcode scanner, all while encrypting user data locally and collecting zero personal data without consent. This repo shows how you can build a fully functional, privacy-first calorie tracker that works offline and across platforms.

What OpenNutriTracker does and how it is built

OpenNutriTracker is a free and open-source mobile application targeting both iOS and Android platforms, built entirely with Flutter using the Dart language. It offers users a minimalistic interface to log their daily food intake, plan meals, and monitor calories and nutrition details. The app integrates data from Open Food Facts and Food Data Central, two large open food databases, enabling a broad catalog of food items and nutritional information.

Under the hood, the app prioritizes user privacy and data security. Instead of relying on online accounts or cloud sync, it stores all user data locally on the device. This data is encrypted to protect it from unauthorized access, which is a meaningful design choice given the sensitivity of personal health information. The barcode scanner feature uses the camera to quickly look up nutritional information for packaged foods, a practical addition that leverages the open databases seamlessly.

This architecture means the app is fully functional offline once the food database has been cached or downloaded, making it especially useful for users concerned about connectivity or privacy. The project is licensed under GPLv3 and encourages community contributions, reflecting its open-source ethos.

Technical strengths and design tradeoffs

One of the key technical strengths of OpenNutriTracker is its use of Flutter for cross-platform mobile development. Flutter’s widget system allows the app to maintain a consistent look and feel on both iOS and Android, reducing the maintenance burden compared to native apps. Dart’s performance on mobile is generally solid, and the app can take advantage of Flutter’s hot reload for rapid development iterations.

The integration with open food databases is a practical choice that avoids reinventing the wheel. Open Food Facts and Food Data Central provide extensive, community-curated nutritional data. The app likely uses REST API calls to fetch food item data, combined with local caching to ensure offline availability. The barcode scanning feature is a user-friendly shortcut that enhances data entry speed and accuracy.

The privacy-first approach of encrypting all user data locally is a standout architectural decision. This means no personal data leaves the device unless the user explicitly opts in. The encryption layer adds complexity to the app’s data management but is crucial for trust and compliance with privacy expectations. The tradeoff here is that without cloud sync, users cannot easily share or back up their data across devices unless they export/import manually.

The app’s minimalistic design favors usability and reduces cognitive load, but it might lack some advanced analytics or social features common in commercial calorie trackers. This is a conscious tradeoff to keep the app lightweight, private, and free from ads or subscriptions.

From a code quality perspective, the repository is written in Dart with Flutter best practices, evidenced by its wide adoption and community engagement (1,885 stars). The code is presumably modular, separating UI, data models, and service layers to integrate APIs and encryption cleanly, although this would require a deeper dive into the source to confirm.

Explore the project

The repository’s README points to official app store links for iOS and Android, so users can install the app directly. For developers interested in the source code, there is a “Getting Started” file mentioned for development setup, which likely includes environment setup, dependency installation, and build instructions.

The project’s main codebase will typically include Flutter widgets for UI components, service classes for API interaction with Open Food Facts and Food Data Central, and encryption utilities for local data storage. Exploring the source, you would start with the lib/ directory, looking for key files like main.dart for app entry, and modules related to barcode scanning and data persistence.

Documentation on data models, API clients, and encryption mechanisms will provide insight into how nutritional data is ingested, stored, and displayed. Community contributions and issues on GitHub can also offer real-world context on common pain points or feature requests.

Because the app handles sensitive data locally, reviewing the encryption strategy and data lifecycle in the code is particularly important for contributors or auditors.

Verdict

OpenNutriTracker is a solid choice for developers and users who want a privacy-conscious, open-source calorie tracker that works offline and avoids cloud data collection. Its Flutter-based architecture and use of open food databases make it accessible and extensible for mobile developers familiar with Dart.

The biggest limitation is the lack of built-in cloud sync or multi-device backup, a tradeoff for privacy that might not suit all users. Also, the minimalistic feature set might not satisfy those looking for advanced diet analytics or social features.

Overall, this repo is relevant if you value privacy, want to explore Flutter in a real-world app context, or aim to contribute to a community-driven nutrition tracker without vendor lock-in or ads. It’s a practical example of how to balance rich mobile features with local data encryption and open data integration.


→ GitHub Repo: simonoppowa/OpenNutriTracker ⭐ 1,885 · Dart