# obsidian-reminder: reminders written into your TODO lines

> This Obsidian plugin puts a date inside a markdown checklist item and notifies you when the time comes, and it reads the date syntaxes of other plugins so a vault with mixed conventions still gets reminders. The one thing it cannot do is notify you on a phone.

**uphy/obsidian-reminder** — Reminder plugin for Obsidian

- Repository: https://github.com/uphy/obsidian-reminder
- Website: https://uphy.github.io/obsidian-reminder/
- Stars: 664 · Forks: 61
- Language: TypeScript
- License: MIT
- Published: 2026-10-21 · Updated: 2026-10-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/uphy-obsidian-reminder

## The reminder lives in the checklist item

The plugin description is short: it adds the feature of managing markdown TODOs with reminder to Obsidian. The mechanism is that the date goes into the task line itself, in parentheses, using an `@` prefix.

The documented format is:

```markdown
- [ ] This is a sample task with reminder (@2021-08-14)
- [ ] Also you can specify time (@2021-08-14 09:37)
- [x] You will not be notified about the reminders you have already checked. (@2021-08-14)
```

Three things fall out of that example. A date alone is enough, and adding a time makes the reminder precise rather than all-day. And a checked item is not notified about, which means completing a task silently cancels its reminder.

That last rule is the one worth dwelling on, because it is the behaviour that keeps a vault of finished tasks from becoming a queue of stale alerts. It also means the plugin is not a scheduler you can rely on to nag you about something you have already finished, which is a deliberate design choice rather than a limitation of the implementation.

## The reminder list spans every file in the vault

The second feature is the view, and it is what turns a per-line date into something manageable.

You can view the list of reminders contained in all files, and the screenshot in the README shows a single list rather than a per-note panel. Clicking a reminder list item brings up the source markdown file, so you go from the reminder to the note without hunting for it.

This is the design decision that matters for a vault rather than a single note. Obsidian users tend to spread tasks across many files, often without any consistent structure, so a reminder that lives only in the note it belongs to is easy to forget. Collecting them into one place means the overdue items are visible regardless of which note they were written in.

The trade-off is that the list only knows about the notes Obsidian has open or has indexed, and the plugin's own storage is local to the vault. Nothing here suggests a server component, a sync of its own or an account, which for a tool that reads your notes is the sort of thing to be glad about rather than to look for.

## Notification actions write back to the checklist

The third feature is the notification itself, and its detail is what makes it usable.

The reminder is notified on Obsidian when the time comes, and the notification offers two actions. `Mark as Done` checks your checklist item. Alternatively you can postpone the reminder by selecting `Remind Me Later`.

So the plugin is not a read-only notifier. Acting on the notification mutates the markdown file, which closes the loop between the note and the reminder. Marking done from the notification means the state in your task list matches the state of the reminder, and postponing means the reminder survives without you having to edit a date by hand.

The interesting thing about this design is that it treats the markdown file as the source of truth rather than keeping a parallel database of pending reminders. That is consistent with the interoperability work described later, and it is why a vault that is edited by other means still shows correct state.

## It also reads the date syntaxes of other plugins

The interoperability section is where this plugin stops being a single-format tool.

In addition to its original `@YYYY-MM-DD` format, the plugin supports the formats used by other Obsidian plugins. Obsidian Tasks is listed with an example of `2021-05-02` and Kanban with `@{YYYY-MM-DD}`. So a vault that already has tasks written in the Tasks plugin's emoji date convention, or in Kanban's brace-wrapped form, can be handled without rewriting every line.

That is a real difference in approach from the alternative of adding reminder syntax to those plugins themselves. Instead of asking you to migrate your notes to one convention, this plugin reads the conventions that are already there and adds the one thing they do not do, which is telling you that something is due.

There is a caveat the documentation is honest about. If you use the Natural Language Dates plugin, the guide explains how to avoid the `@` autocompletion conflict, which is what you would expect when two plugins both want to claim the same character.

The runtime dependencies support the same idea from the other direction. The package ships `rrule` alongside Svelte, and rrule is a recurrence rule library, so recurring reminders are handled by a standard rule format rather than a bespoke one.

## No system notification on a phone

The FAQ section is a single entry, and it is the limitation that matters most for anyone considering this plugin.

Notification in mobile on Android and iOS is not available, because Obsidian does not provide the feature. That is a platform limit rather than a shortcoming of the plugin, since the notification is delivered by the app itself and the app has no system notification capability on mobile.

It is worth being precise about what this rules out. If you write your tasks in Obsidian on a desktop and your phone is only a reader, nothing is lost. If you edit tasks on your phone and expect a nudge, the reminder will not arrive, and the notification you see in the desktop app is the only one there is.

The alternative to a missing mobile notification is to put the reminder somewhere that does have system notifications, and that is exactly the difference between this plugin and a task application with a server behind it. The cost of the plugin's approach is that the reminder lives where the note lives, which is also its main advantage.

## Development runs on mise with a watch build into a real vault

The Development section is specific about the toolchain. It requires mise, which provides the pinned Node.js version, or Node.js 22 with plain npm, and the commands are:

```bash
mise run main:init      # install dependencies
mise run dev            # watch build; rebuilds on every save
mise run main:test      # run the test suite
mise run main:lint:fix  # eslint --fix + tsc --noEmit + svelte-check
```

To try your changes in a real vault, the README says to symlink this repository into the vault's plugin directory and install the hot-reload plugin:

```bash
ln -s /path/to/obsidian-reminder /path/to/vault/.obsidian/plugins/obsidian-reminder-plugin
```

With `mise run dev` running, every save rebuilds the plugin and hot-reload reloads it in Obsidian automatically. The combination of a symlink, a watch build and a reload plugin is the standard way to develop an Obsidian plugin against the real application, and the note that it works because the plugin directory is symlinked rather than copied is what makes the reload work at all.

The lint command is a triple check in one line, eslint plus a TypeScript type check with `--noEmit` plus `svelte-check`, which tells you the codebase is TypeScript with a Svelte interface layer, and the repository holds a CLAUDE.md that is described as an overview of the codebase and the release flow.

## MIT licensed, on Svelte 5, with a rrule dependency

The package manifest names the package `obsidian-reminder-plugin` at version 1.5.1, with the description Manage TODOs with reminders and get notified when they are due, and the MIT licence.

The runtime dependencies are two: `rrule` at ^2.8.1 and Svelte at ^5.57.2. So the interface is a Svelte application, which matches the svelte-check in the lint command and the svelte-eslint-parser in the dev dependencies, and the date handling leans on a standard recurrence rule library rather than custom parsing.

The engines field requires Node 22.0.0 or newer, which is why the README offers Node.js 22 with plain npm as the alternative to mise. The dev dependency list is long and mostly about the build and the checks, esbuild with esbuild-svelte, jest with ts-jest and the jsdom environment, the eslint family including eslint-plugin-obsidianmd and eslint-plugin-svelte, the CodeMirror packages that an Obsidian editor surface needs, and the Obsidian API package itself at ^1.13.1.

The releases move quickly. The recent versions are 1.5.1 and 1.5.0, both on 2026-10-08, and 1.4.3 on 2026-08-29. The repository is not archived and the last push was on 2026-10-20, so the branch is ahead of the last tag, which is normal for a plugin that ships through Obsidian's own release channel rather than through GitHub releases.

## Conclusion

obsidian-reminder fits an Obsidian user who keeps their tasks as markdown checklist items and wants the due date in the same line as the task, with the notification handled inside Obsidian itself. It is the wrong choice if you rely on phone notifications, because the plugin states that Obsidian does not provide system notifications on mobile, and the wrong choice if your vault is not markdown-based. Verify first which date syntaxes your existing notes use, since the plugin has to recognise them, and check the recurring case against the rrule dependency the project ships with.

## FAQ

### How do I write a reminder in an Obsidian TODO item?

Put the date in parentheses at the end of the checklist line with an @ prefix, for example - [ ] This is a sample task with reminder (@2021-08-14), and add a time such as (@2021-08-14 09:37) for a precise reminder. Items that are already checked are not notified about.

### Does the obsidian-reminder plugin notify me on mobile?

No. The FAQ states that system notification on a mobile device is not available because Obsidian does not provide the feature, so the notification is delivered inside Obsidian on the desktop.

### Can obsidian-reminder read dates written by other Obsidian plugins?

Yes. In addition to its own @YYYY-MM-DD format it supports the Obsidian Tasks format such as a dated emoji and the Kanban format such as @{YYYY-MM-DD}. If you use the Natural Language Dates plugin, the guide explains how to avoid the @ autocompletion conflict.

### What happens when I act on a reminder notification?

Mark as Done checks your checklist item, and the alternative action, Remind Me Later, postpones the reminder. Both actions write back to the markdown file rather than to a separate database.

### How do I develop the obsidian-reminder plugin locally?

The project requires mise, which provides the pinned Node.js version, or Node.js 22 with plain npm. You can run mise run main:init, mise run dev for the watch build, mise run main:test and mise run main:lint:fix, then symlink the repository into the vault's plugin directory and use the hot-reload plugin.

## Sources

- [License: MIT](https://github.com/uphy/obsidian-reminder/blob/master/LICENSE)
- [Project website](https://uphy.github.io/obsidian-reminder/)
- [README](https://github.com/uphy/obsidian-reminder/blob/master/README.md)
- [Releases](https://github.com/uphy/obsidian-reminder/releases)
- [uphy/obsidian-reminder on GitHub](https://github.com/uphy/obsidian-reminder)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/uphy-obsidian-reminder
