TasksMD is an Android app + home-screen widget to manage Markdown-based tasks (compatible with common Obsidian task formats). It reads tasks from .md files (or entire directories of .md files) via Android’s Storage Access Framework, stores them in a local database for fast filtering, and lets you add/edit/complete tasks directly from the widget.
- Markdown task parsing (checkboxes, priorities, due/done dates, recurrence, tags)
- Select individual
.mdfiles or a directory (recursive scan of subfolders) - Home-screen widget with filtering and quick actions
- Manual sync workflow (use refresh buttons when you want to pull changes made in Obsidian)
- Local cache in Room DB for fast query + paging
- You select files/directories in the app Settings (persisted as SAF URIs).
- Sync runs a scan over all selected Markdown files:
- Reads each file line-by-line
- Parses task lines and writes them into Room (one row per task)
- Replaces DB rows per file (rebuild per file on each sync)
- Widget/UI reads from Room (fast filters and sorting).
- When you add/edit/delete/complete tasks from the widget/app, the app updates both:
- The Markdown file content
- The Room DB record(s)
TasksMD uses a manual refresh approach:
- Use the Refresh/Sync buttons in Settings and/or the widget when you edited Markdown in Obsidian.
- After task edits from the app/widget (add/edit/delete/complete), the widget is refreshed as part of those actions.
Tasks are detected from lines starting with a checkbox, e.g.
- [ ] Buy milk
- [x] Pay rent
- [-] Cancelled taskMetadata tokens supported (examples):
- [ ] 🔺 Important task 📅 2025-12-20 #work
- [x] Task ✅ 2025-12-16 #done
- [ ] Recurring task 🔁 every day 📅 2025-12-16- Priority:
🔺(HIGH),🔼(MEDIUM),🔽/🔻(LOW) - Due date:
📅 YYYY-MM-DD - Done date:
✅ YYYY-MM-DD - Recurrence:
🔁 ...(captures rule text) - Tags:
#tag(supports#tag/subtag)
- Android Studio (recent version)
- Android device/emulator
- Storage Access Framework permissions (granted when selecting files/directories)
Open the project in Android Studio and run the app configuration.
From terminal:
# Windows
./gradlew.bat assembleDebug
# macOS/Linux
./gradlew assembleDebugapp/src/main/java/com/example/tasksmd/data/— Room entities/DAOs + file selectionapp/src/main/java/com/example/tasksmd/parsing/— task parser/serializerapp/src/main/java/com/example/tasksmd/worker/— WorkManager sync + file operationsapp/src/main/java/com/example/tasksmd/widget/— widget provider/serviceapp/src/main/java/com/example/tasksmd/ui/— Compose UI (Settings and optional task list)
- Directory selection scans subdirectories recursively and includes only Markdown files.
- If a file becomes unavailable (permissions/provider), it will be skipped during sync.
PRs are welcome. If you plan to make a larger change, open an issue first to discuss the direction.
MIT License — see LICENSE.