Search...Search plugins and themes...
⌘K
Sign in
  • Get started
  • Download
  • Pricing
  • Enterprise
  • Account
  • Obsidian
  • Overview
  • Sync
  • Publish
  • Canvas
  • Mobile
  • Web Clipper
  • CLI
  • Learn
  • Help
  • Developers
  • Changelog
  • About
  • Roadmap
  • Blog
  • Resources
  • System status
  • License overview
  • Terms of service
  • Privacy policy
  • Security
  • Community
  • Plugins
  • Themes
  • Discord
  • Forum / 中文论坛
  • Merch store
  • Brand guidelines
Follow us
DiscordTwitterBlueskyThreadsMastodonYouTubeGitHub
© 2026 Obsidian

MarkTodo

Isaiah CentifantoIsaiah Centifanto801 downloads

Markdown todos, designed for mobile.

Add to Obsidian
MarkTodo screenshot
MarkTodo screenshot
  • Overview
  • Scorecard
  • Updates15

MarkTodo: Markdown todos, designed for mobile. Three panes, six statuses, your own files

marktodo.com

MarkTodo keeps your todos as plain checkboxes in the notes you already keep: an Obsidian plugin, and a standalone Android app over the same .md files.

MarkTodo comes out of a long frustration with the lack of native todo management in Obsidian, and with the other popular plugins being just too heavy and too much of a deviation from the .md syntax. Happy they exist, and plenty of people use them. This is just something different, for anyone who has tried just about every non-Obsidian tool (Todoist, for example) and had given up, and for whom cutting and pasting the todos in Obsidian by hand was getting unmanageable.

Most of the current todo plugins are one of two things: either 1. too complicated and heavy, and deviating from true Markdown (the litmus test being, if you remove the plugin do your todos return to normal Markdown boxes?), or 2. a janky, complicated mobile UI, which is so important these days, as we live in a mobile world.

Last thing: three additional statuses, along with new verbiage for the default three, augment the .md syntax. Together they make this system the right balance, without being too basic (native Obsidian) or too complicated.

[ ]  Backlog
[>]  Warming
[-]  Paused
[/]  Doing
[!]  Blocked
[x]  Done

Warming doesn't exist in any other tool. It is the decision that something is next, made once and written into the file instead of faked with a tag or a due date. Blocked and Paused stay separate, because "someone else stopped this" and "I stopped this" are not the same thing, and every tool that collapses them into one "on hold" loses the only distinction that matters.

The first three are the ones you plan with; the last three mean work is live. Every list and board runs in that order, headed Plan and Active, and one row of segments narrows any view to a phase, or to Doing alone, when all you want on screen is what you are actually working on.

The plugin itself, running in full on a phone:

Five phone screens side by side: the dashboard with todos under their status headings, a project's todo list, the todo editor showing status and priority and due date, a Kanban board one column at a time, and the underlying Markdown note

What's different

A todo is a line, not a note. Nearly everything that manages todos in Obsidian assumes an item is its own note, Bases and the plugins built around it included. "Reorder 12 oz valve bags" does not need a note. Here a todo is one checkbox line in a note you already have: a project is any note with marktodo: true in its frontmatter, and its todos are the checkboxes inside it, so a Green Coffee Sourcing note holds "Sample-roast the three Huila lots" and the rest. Todos that belong to no project are loose todos: they stay in whatever note you wrote them in, and the Inbox gathers them into one view.

No database. Your Markdown is the whole store. Lists, boards and the dashboard are views rendered from the notes, not from an index kept on the side, and anything that outlives a restart is written into the note. The one part that looks like a database is the id on a managed todo, and it is an ordinary HTML comment at the end of the line:

- [ ] Reorder 12 oz valve bags @high <!-- mt id=aB3xK9Qz -->

Nothing renders it: Live Preview hides it, Reading view ignores it as the comment it is, and any other Markdown app shows a checkbox with its text. Remove MarkTodo and that line is still a todo, just without the statuses and dates built on top of it.

A real standalone Android app. Almost every todo plugin for Obsidian is a plugin and nothing else. The handful with a mobile story are just the desktop plugin shrunk onto a phone: all sidebars, dense panels and hover menus. MarkTodo's app is a real app in its own right, built for the phone it runs on, reading and writing the same .md files under the same grammar. And three panes that slide instead of stacking. Your projects, your list, and the todo you're in sit side by side and slide. The list never disappears, and you never press Back to work out where you are.

The MarkTodo Android app: projects down the left, a project's todos in the middle, and the open todo's editor on the right, all three panes visible at once

That is one screen, not three. Pick a project on the left and the middle updates; open a todo and the editor slides in beside the list rather than over it. On a phone the panes are one swipe apart, so the same layout works with one thumb. Everything in that shot is plain Markdown in an Obsidian vault, read and written under the same grammar this plugin uses.

The app is in closed testing on Google Play.

The format

The checkbox glyph is the canonical status:

Glyph Status Section heading
[ ] Backlog ## Backlog
[>] Warming ## Warming
[-] Paused ## Paused
[/] Doing ## Doing
[!] Blocked ## Blocked
[x] Done ## Done

Everything else is optional, inline text appended to the todo:

  • due @ 2026-09-20 sets a due date
  • done @ 2026-09-17 14:30 is set automatically when a todo is marked done, down to the minute, and removed when it leaves Done
  • notify @ 2026-09-19 09:00 sets a reminder
  • @urgent, @high, @low set inline priority, one of three (aliases @pu, @ph, @pl)

Dates are normalized on save (due @ 2026-9-1 becomes due @ 2026-09-01), and every write is round-trip safe: a todo's surrounding text is never touched, and a write aborts rather than risk dropping a todo.

Projects

A todo is meant to end up in a project. Any todo not filed under one shows up in the Inbox, which is a view, not a note, so there's nothing to create or clean up. Projects, in-progress work, priorities and due dates are all just different views over the same Markdown.

The MarkTodo dashboard in Obsidian: projects listed down the left, todos grouped under their status headings in the main pane

A project as a Kanban board: one column per status, from Backlog through Done, with todo cards in each

Narrowing a view

Every list and board carries one collapsible bar, and collapsed it still says what it is doing: List | All | 0 filters | Manual | Status. A control that hides itself leaves you guessing why a list is short.

  • Phase segments (All, Plan, Active, Doing) narrow any view to a phase, or to Doing alone when all you want on screen is what you are working on.
  • Filters by project, tag, priority, or whether a todo is managed.
  • Sort within each status: Manual, Due, Priority or Title. Manual means file order and is the only sort a drag can write back, so choosing another turns drag-to-reorder off rather than writing an order nothing on screen reflects.
  • Group Agenda's segments by date, project, priority or status.

Agenda leads with whatever is overdue, in a band of its own, whatever the sort or grouping, with Pull forward to move those todos to today. It is what is late plus what is due now, which is why it is not called Today. Its three segments (Agenda, Upcoming, Reminders) each remember their own sort, grouping and folds, because they are three different questions.

Done is always most-recently-completed first, whatever sort is set, because every other order over finished work answers a question nobody asks. For the same reason, a Done row can't be dragged to reorder. Every section stops at 20 rows with a Show 20 more button; the heading still counts the whole section.

A project is pinned with marktodo-pinned: true in its note, which lifts it to the top of the dashboard. Because the pin lives in the note, it crosses to the app and survives a rename.

Appearance

MarkTodo follows your Obsidian theme. Backgrounds, text and borders are your theme's, in whatever light or dark you run. There is no MarkTodo theme to switch to, and nothing to fall out of step with the vault around it.

Two things are MarkTodo's own. The six status colours are fixed (Backlog neutral, Warming yellow, Doing blue, Blocked red, Paused purple, Done green), because a status should mean one thing in every vault and look the same in every vault too. And one accent, which colours selection, links and buttons inside MarkTodo's panes: any Flexoki hue, or Obsidian's own.

Why Flexoki

Flexoki is an inky palette by Steph Ango, Obsidian's own CEO, drawn from analog inks and warm shades of paper, and it is built for exactly the job six status colours have to do. Its own goal is to be "calibrated for legibility and perceptual balance across devices", which is the difference between a palette that looks good on a swatch and one you can read all day.

That matters here because these colours are not decoration. A status glyph is a small mark you scan past hundreds of times, so the palette has to stay quiet: Flexoki's hues are muted and slightly warm rather than saturated, and six of them can share a list without any one shouting over the others. Each hue is also a full ramp with a step chosen for light backgrounds and another for dark, so a status stays legible on paper-white and on true black without being tuned twice. MarkTodo takes Flexoki's 600 in light and 400 in dark, exactly as that palette prescribes for coloured text.

The dashboard opens in the left sidebar by default; Settings offers the right sidebar, a pane at the left of the main area, or the main area itself. Text size is a multiplier on your theme's sizes, so your theme and zoom still decide the baseline.

Making todos

A plain checkbox is already a todo. A managed todo also carries a hidden comment such as <!-- mt id=aB3xK9Qz -->, the capsule. MarkTodo generates the eight-character ID to track the todo through edits and moves and give it any of the six statuses.

  • Type mtodo at the end of any line, after a space (Buy milk mtodo). A pop-up offers Create todo here (Enter picks it), Open todo editor and, if you set a catch-all note, Send to catch-all note. A plain line or list item becomes a managed todo; an existing checkbox keeps its status. Change the trigger in Settings → Inline todo trigger.
  • Commands (Command palette):
    • Convert current line to managed todo
    • Adopt all todos in current note: manages every plain checkbox in it
    • Insert managed todo at cursor
    • Edit todo at cursor, also in the editor's right-click menu
    • Add todo… opens the todo editor
    • Send current line to catch-all note
    • Create project… and Convert note to project
    • Open dashboard, Show agenda, Show todos, Show inbox
    • Open todos as a Kanban board, Toggle one or two dashboard columns
    • Move completed todos to bottom (current note)

MarkTodo sets no default hotkeys, so it never clashes with yours. Assign any of these in Settings → Hotkeys.

The todo editor: a todo's text, status, project, priority, due date and reminder on one panel

The plugin on a phone or tablet

On phones and tablets MarkTodo starts in Lightweight mode: managed checkboxes, the todo trigger and archive filing keep working, while the dashboard and boards are off so Obsidian stays quick. To run the full plugin on a device, go to Settings → MarkTodo → On this device. That is the plugin in the phone screens above. Boards stay usable there: turn on Settings → Enable kanban drag on mobile to move cards between columns with a thumb.

While Lightweight mode is on, opening the dashboard points you at the Android app instead, as does a pop-up the first time. Settings keeps a link to it too.

Privacy

  • It reads your notes. To find todos and projects, MarkTodo goes through every Markdown note in the vault. Folders listed under Settings → Excluded folders are skipped when it looks for todos.
  • It edits notes in response to you: the todos you change, the projects you create, and the upkeep you turn on in Settings (keeping a project's status sections in step with its checkboxes, filing archived projects into the Archive folder). Changes that touch many notes, like moving the MarkTodo folder, ask first.
  • No network. No accounts, telemetry or network requests. The Contact and Google Play buttons open links in your browser.

Status

Early beta (0.0.15), available in Community Plugins.

Development

pnpm install
pnpm dev     # watch build
pnpm build   # production build (type-checks first)
pnpm test    # unit tests
pnpm check   # TypeScript
pnpm lint    # Obsidian's community-plugin review rules

To release, bump the version in manifest.json, package.json and versions.json, then push a tag with the bare version (0.0.15). The Release workflow builds, attests and publishes main.js, manifest.json and styles.css.

See CONTRIBUTING.md before opening a pull request.

License

GNU General Public License, version 3 or later.

Steps

Open a todo to add steps in its Steps section, or indent plain Markdown checkboxes beneath it:

- [ ] Install sink <!-- mt id=parent01 -->
    - [x] Measure cabinet
    - [ ] Buy fittings

Steps have text and a checkbox only. They stay inside the parent and do not appear on boards, in Agenda, or in project counts. Search shows matching steps beneath their parent; selecting one opens the parent's steps. Parent rows and cards show step progress. Checking every step does not automatically complete the parent. Completing the parent checks all of its steps in the same write that moves the entire indented block into Done. Reopening the parent leaves its steps checked.

A parent and its steps move together. Deleting a parent also deletes its steps. Blank lines or dedented text end a step block. Other Markdown headings remain ordinary headings; projects use one set of status sections.

The companion app uses the same Steps terminology. See the shared behavior and app handoff notes for implementation details.

HealthExcellent
ReviewSatisfactory
About
A Obsidian plugin and a standalone Android app for todos/tasks, over the notes you already keep. Both were born out of long hours wanting more from every other productivity system, and all of it is stored as checkboxes in your own .md files.
TasksProject managementMarkdown
Details
Current version
0.0.15
Last updated
6 days ago
Created
2 months ago
Updates
15 releases
Downloads
801
Compatible with
Obsidian 1.11.0+
Platforms
Desktop, Mobile
License
GPL-3.0
Report bugRequest featureReport plugin
Sponsor
Buy Me a Coffee
Author
Isaiah CentifantoIsaiah Centifantocentifanto
marktodo.com
GitHubcentifanto
Xicentifanto
  1. Community
  2. Plugins
  3. Tasks
  4. MarkTodo

Related plugins

Tasks

Track tasks across your vault. Supports due dates, recurring tasks, done dates, sub-set of checklist items, and filtering. Maintained by Clare Macrae and Ilyas Landikov, created by Martin Schenck.

Operon

Task and project management system that unifies inline tasks and file-based tasks in the same workflows with Tables, Filters, Calendars, Kanban boards, Gantt views, Canvas, and time tracking.

Base Board

Organize notes into Kanban boards using frontmatter properties. Drag and drop cards between columns powered by Bases.

TickTickSync

Sync TickTick tasks.

dotpm

Full-featured task and project management: stunning Gantt charts, Kanban boards, Table views, customizable fields, due date notifications, dependancies

Task List Kanban

Organizes all of the tasks within your files into a kanban view.

TODOseq

Lightweight keyword-based task tracker using Logseq style keywords.

TaskNotes

Note-based task management with calendar, pomodoro and time-tracking integration.

Linter

Format and style your notes. Linter can be used to format YAML tags, aliases, arrays, and metadata; footnotes; headings; spacing; math blocks; regular Markdown contents like list, italics, and bold styles; and more with the use of custom rule options.

Copilot

Run AI agents such as Claude Code, Codex, and OpenCode inside your vault. Turn your second brain into a smart assistant that gets knowledge work done.