Skip to content
Open Apps
Menu
Submit app
productivity

A cross-platform Flutter habit tracker with separate scoring models for "do" and "don't" habits, growth-curve visualizations, and WebDAV sync via Nextcloud, Koofr, or any self-hosted endpoint.

From the project's README: Open-source Flutter habit tracker with smart scoring, WebDAV sync, local-first storage, privacy-focused design, and support for Android, iOS, Windows, macOS, and Linux.

mhabit (Table Habit)

mhabit, marketed under the name Table Habit, is a Flutter-built micro-habit tracker that treats each habit as a colored row in a calendar and scores daily completion against a configurable growth curve. It is local-first, requires no account, and syncs across devices through any WebDAV endpoint you already control — Nextcloud, Koofr, or a self-hosted server. The single-author project ships builds for Android, iOS, macOS, Windows, and Linux via Google Play, the App Store, F-Droid, Flathub, and the Microsoft Store.

Why it matters

  • Two scoring models, not just streaks. "Do" habits track how often you completed them and how recently; "don't" habits (e.g. "no smoking") track the gap since the last slip. Both render as growth-curve charts that smooth out missed days instead of resetting to zero.
  • WebDAV sync, no vendor. Any standards-compliant WebDAV server becomes your backend. There is no proprietary relay, no account, and no telemetry — the payload is a SQLite snapshot over HTTPS.
  • Material 3 + Dynamic Color. On Android 12+ the app theme derives from your wallpaper; per-habit color overrides and flex_color_picker give you fine control over the calendar.
  • Loop Habit Tracker migration. Native JSON export plus a CSV importer compatible with Loop Habit Tracker makes mhabit a drop-in destination for users leaving a dormant project.
  • Truly global. 18+ languages on Weblate, full RTL support for Arabic, Hebrew, and Persian, and locale-correct date and number formatting throughout.

How it works

The codebase is a Flutter monorepo managed with Melos, with internal packages like mhabit_color_builder and mhabit_proxy_builder isolating UI generation and proxy boilerplate from the app shell. State uses provider and rxdart; routing runs through go_router; persistence sits on sqflite with flutter_secure_storage holding secrets and shared_preferences holding settings.

Habit data renders through two chart engines: fl_chart for the growth-curve detail view and simple_heatmap_calendar for the grid that dominates the home screen. animated_reorderable_list keeps habit-group rearrangement smooth on older Android devices, and flutter_local_notifications handles reminders. The WebDAV sync flow, built on simple_webdav_client, conflict-checks the server's last-modified timestamp before committing the local snapshot.

Caveats

  • Single-user assumption. The data model is one install, one author — no multi-user or shared-household mode.
  • WebDAV sync is DIY. You need an existing WebDAV endpoint (or must stand one up); there is no hosted option.
  • No home-screen widgets yet. Android and iOS widgets are on the roadmap but not shipped as of v1.26.
  • Indie release cadence. Updates are frequent but support rests with a single maintainer.
  • License is Apache-2.0. Permissive enough for commercial forks, but adopters should review the trademark posture around the "Table Habit" name.

Deployment notes

For end users, the simplest path is installing from a familiar store — Google Play, the App Store, F-Droid, Flathub, or the Microsoft Store. To build from source:

git clone https://github.com/FriesI23/mhabit.git
cd mhabit
flutter pub get
flutter run

Minimum: A device capable of running Flutter 3.x. Storage stays well under 50 MB for typical habit histories, and SQLite keeps lookups fast well past several years of daily entries.

Integration tip: in a directory like this one, pair mhabit with any local-first or privacy-focused record — it is the counterpart to hosted habit apps the way Daily You is the counterpart to hosted journals, and a clean example of WebDAV as a sync substrate for indie Flutter projects that want to avoid running their own backend.

On this page
  1. Why it matters
  2. How it works
  3. Caveats
  4. Deployment notes