Lorenzo Strambi611 downloadsSends Telegram notifications when your tasks reach their deadline.
Obsidian plugin that sends Telegram notifications when your tasks reach their deadline. Supports date-only deadlines (checked on an interval), exact-time deadlines (precise scheduler), upcoming reminders, and recurring tasks.
scheduled/due fields, - [ ] lines with 📅, due::, scheduled::, starts::, and plain dates@ syntax and Kanban @@ syntax fire at the precise minute, with configurable lead time🔁 every … syntax auto-advances a completed task to its next occurrence and re-opens the checkboxmain.js, manifest.json, styles.css into your vault's .obsidian/plugins/obsidian-reminder-telegram/Requires Obsidian 1.7.2+ (minAppVersion).
/newbot, follow the prompts, copy the token./start; it replies with your numeric chat ID.A note with a scheduled or due field and --- delimiters becomes a task. The task text is the note's base name, or the first heading after the frontmatter if one exists.
---
status: open
scheduled: 2024-12-25
tags:
- task
---
# My Task
Complete this task by Christmas
status: open / in-progress = incomplete; done / completed / cancelled / archived = completed (a completedDate field also marks it done)scheduled / due: YYYY-MM-DD (date-only) or YYYY-MM-DDTHH:MM (exact time)tags: used for sidebar tag filtering (not required for recognition)- [ ] Complete project by 📅 2024-12-25
- [ ] Review notes due:: 2024-12-20
- [ ] Meeting scheduled:: 2024-12-15
Accepted date formats: YYYY-MM-DD, MM/DD/YYYY, DD-MM-YYYY, with optional times (YYYY-MM-DDTHH:MM or YYYY-MM-DD HH:MM). Lines inside fenced code blocks are ignored; [x]/[X] tasks are skipped.
Reminder-plugin @ syntax (toggle: Reminder syntax):
- [ ] Call Grandma @2026-07-22 12:30
- [ ] Call Grandma (@2026-07-22 12:30)
- [ ] Buy milk (@2026-07-22) # no time → date-only
Kanban-plugin syntax (toggle: Kanban syntax):
- [ ] Call Grandma @2026-07-22 @@14:30 # date + time
- [ ] Buy milk @2026-07-22 # no time → date-only
Reminder syntax owns @YYYY-MM-DD HH:MM; Kanban owns @YYYY-MM-DD @@HH:MM and bare @YYYY-MM-DD.
Append 🔁 every … to an inline task (works with any date syntax, including the full reminder form):
- [ ] Water plants 📅 2026-07-22 🔁 every day
- [ ] Call Grandma (@2026-07-31 09:00 🔁 every week on Sunday)
- [ ] Pay rent 📅 2026-08-01 🔁 every month
- [ ] Renew license 📅 2026-07-22 🔁 every year
| Pattern | Next occurrence |
|---|---|
🔁 every day |
+1 calendar day |
🔁 every week |
+7 days |
🔁 every week on Sunday (any weekday, full or 3-letter name) |
next matching weekday |
🔁 every month |
same day next month (e.g. Jan 31 → Feb 28 → Mar 31) |
🔁 every year |
same month/day next year (Feb 29 → Feb 28) |
When you complete a recurring task (- [x]), the plugin rewrites the line: the checkbox re-opens and the date advances to the next occurrence — task text and metadata are preserved. Overdue recurring tasks advance until the next occurrence is in the future. Toggle: Recurring tasks (default on).
When do notifications go out:
deadline − lead time via a precise timer, re-armed on vault changes, workspace changes, and app resume.Catch-up window (Catch-up window (minutes), default 60) applies to:
Tasks due today are never gated. A window of 0 disables the gate and past behavior applies (all overdue tasks are always notified).
Upcoming reminders (Upcoming reminders + Days ahead for upcoming, default 1): tasks due in the next N days (tomorrow onward) get a heads-up with their own templates. Due/overdue notifications share the per-check budget (Max tasks per check).
Strict time mode: when enabled, datetime tasks are handled only by the at-time scheduler — interval checks skip them entirely (default off, so the interval stays as a safety net).
Open via the 🔔 ribbon icon or the "Toggle sidebar" command.
Filters: today (hide upcoming), week (cap upcoming at 7 days), tag (intersect by frontmatter tag), clear. Relative dates are shown (Today / Yesterday / Tue / in 3 days). Clicking a task opens the file and scrolls to the task line (or heading).
| Command | Action |
|---|---|
| Check reminders now | Run an interval check immediately |
| Send test Telegram notification | Verify config |
| Toggle sidebar | Open/close the task sidebar |
Variables:
{count}, {tasks}{taskName}, {fileName}, {deadline}, {filePath}, {taskId}Bulk messages send when more than one task is due; otherwise an individual message is sent. Messages are truncated at Telegram's 4096-character limit (markdown-safe cutoff when formatting is on).
The template editor provides clickable variable chips, per-field character counters (warn at 80% of 4096), and a live preview panel with sample data (toggle: Live preview).
Markdown formatting: enable in settings for *bold*, _italic_, `code`, [links](https://example.com). Literal characters the parser rejects cause Telegram to return an error — keep unescaped */_ usage minimal.
| Setting | Default | Notes |
|---|---|---|
| Telegram Bot Token | '' |
@BotFather |
| Telegram Chat ID | '' |
@userinfobot |
| Notifications Enabled | true |
master switch (also gates at-time) |
| Check Interval (minutes) | 30 |
interval check cadence |
| Max Tasks Per Check | 10 |
due + upcoming budget per run |
| Scan Mode | whole-vault |
or specific folder |
| Target Folder | '' |
when Scan Mode = specific folder |
| At-time Notifications | true |
master switch for the precise scheduler |
| Reminder Syntax | true |
recognize @… / (@…) dates |
| Kanban Syntax | true |
recognize @… @@HH:MM dates |
| Recurring Tasks | true |
recognize 🔁 every … and auto-reschedule |
| Lead Time (minutes) | 0 |
fire N minutes before the deadline (max 1440) |
| Catch-up Window (minutes) | 60 |
PC-off catch-up for at-time/overdue/upcoming (max 10080) |
| Strict Time Mode | false |
datetime tasks fire only via the scheduler |
| Upcoming Reminders | true |
enable upcoming heads-up |
| Days Ahead for Upcoming | 1 |
0 disables |
| Upcoming Bulk Template | … | {count}, {tasks} |
| Upcoming Individual Template | … | per-task variables |
| Multi-task Digest Template | … | {count}, {tasks} |
| Individual Message Template | … | per-task variables |
| Test Message Template | … | no variables |
| Live Preview | true |
render template previews |
| Use Markdown Formatting | false |
Telegram markdown |
npm install
npm run dev # watch mode
npm run build # type-check + esbuild
npm run lint
npm test # vitest (mocked obsidian + Telegram HTTP)
npm run test:coverage
Ideas that are not implemented yet:
Pull requests welcome — open an issue first for significant changes.
BSD-0-Clause. See LICENSE.