Tracking habits is a classic app idea, but doing it well across multiple platforms with privacy-respecting sync is surprisingly tricky. mhabit tackles this by using Flutter and Dart to deliver a polished habit tracker that runs on Android, iOS, macOS, Windows, and Linux, all while syncing data through a self-hosted WebDAV server. This approach sidesteps vendor lock-in and ads, delivering a clean, independent user experience.
What mhabit does and how it is built
mhabit (Table Habit) is a micro habit tracking app focused on scoring positive and negative habits over time. It supports tracking tiny daily actions and provides visual feedback through growth curve charts, helping users stay motivated and aware of their progress.
Under the hood, mhabit is a Flutter app written in Dart, leveraging Flutter’s cross-platform capabilities to target mobile platforms (Android and iOS) as well as desktop OSes (macOS, Windows, Linux). This multi-platform reach is complemented by distributing the app through various official channels such as the Play Store, App Store, Microsoft Store, F-Droid, and Flathub, making it easily accessible to users on almost any device.
The UI uses Material3 design principles with Dynamic Color support, adapting the color scheme based on the device’s wallpaper or system theme, providing a native and modern look and feel. It also adjusts gracefully to landscape and large-screen layouts, an important consideration for tablet and desktop users.
Data storage emphasizes portability and user control. The app stores its data locally and supports export and import in a human-readable JSON format. Synchronization is implemented via WebDAV, a protocol for remote web-based file management that can be self-hosted, allowing users to keep their data on their own servers or trusted cloud storage. This is a differentiator compared to many habit trackers that rely on proprietary cloud sync solutions.
Technical strengths and tradeoffs in mhabit
One standout technical choice is the use of WebDAV for syncing user data. While WebDAV is not as commonly used in mobile app sync scenarios compared to custom APIs or third-party cloud services, it offers a simple, open, and self-hosted option for users who value privacy and control. Implementing WebDAV sync in Flutter involves handling network file operations reliably, conflict resolution, and offline support, which adds complexity but keeps the app independent of any vendor.
The codebase reflects a pragmatic use of Flutter’s capabilities. The adoption of Material3 Dynamic Color shows attention to platform conventions and user experience. The UI adapts to different form factors, which in Flutter requires careful layout management and responsive design patterns. This indicates the developer’s attention to detail in cross-platform UI/UX.
On the flip side, Flutter’s desktop support, while progressing, is still maturing. Building for macOS, Windows, and Linux introduces challenges related to native integration, file system access, and packaging. mhabit’s distribution on official desktop app stores is impressive for an indie project but likely required overcoming these hurdles.
The habit scoring system and growth curve charts are domain-specific features that give the app real utility beyond simple checklists. The scoring mechanism handles both positive and negative habits, which is a thoughtful inclusion. However, the app’s architecture around data and state management will show the usual Flutter tradeoffs between simplicity and scalability.
Overall, the code quality appears clean and focused on practical functionality rather than over-engineering. Given the app’s breadth of platform targets, the developer had to strike a balance between native look and feel, performance, and maintainability.
Explore the project
Without explicit installation commands or quickstart snippets, the best way to start is by exploring the repository’s README and source organization. The repo is organized to support Flutter’s multiplatform project structure, with shared Dart code for business logic and platform-specific folders for native integration.
Key resources include documentation on setting up the WebDAV sync server, configuration options for the app, and instructions on exporting/importing data via JSON. The README also details supported platforms and distribution methods, which is useful for understanding deployment targets.
Developers interested in the sync implementation should focus on the network and storage layers in the codebase, especially around the WebDAV client integration. UI components implementing Material3 Dynamic Color and responsive layouts are good study points for Flutter developers aiming to build adaptive cross-platform apps.
Verdict
mhabit is a solid example of what a solo or small Flutter developer can achieve in terms of cross-platform reach and user data autonomy. Its use of WebDAV sync is a practical answer to the common problem of vendor lock-in and privacy concerns in habit tracking apps.
That said, the choice of WebDAV introduces complexity in syncing and conflict handling, and Flutter’s desktop support, while functional here, remains less mature than mobile. The app is best suited for users who want a clean, ad-free habit tracker with control over their data and developers interested in cross-platform Flutter architectures with self-hosted sync.
For anyone building habit apps or similar productivity tools, mhabit offers valuable insights into balancing UI polish, cross-platform deployment, and data sovereignty.
→ GitHub Repo: FriesI23/mhabit ⭐ 1,332 · Dart