Apple Reminders for Obsidian is a macOS desktop plugin for working with Apple Reminders directly inside your vault. It adds a dedicated Reminders view, lets you drag reminders into Markdown notes, creates linked reminder notes, and keeps completion state in sync between Obsidian and Apple Reminders.
Everything runs locally on your Mac. The plugin uses AppleScript out of the box and can optionally use a native Swift helper for faster Reminders access.
- Adds a dedicated Apple Reminders view to Obsidian.
- Opens from the ribbon icon or command palette.
- Can open in the right sidebar, a normal tab, or a popout window.
- Shows Reminders lists with names, colors, custom icons, and incomplete counts.
- Shows smart-list counts such as today, scheduled, all, flagged, and completed when available.
- Displays reminders with title, notes, due date, priority, completion state, and linked-note status.
- Supports manual refresh and full sync.
- Supports automatic refresh in balanced/live modes.
- Preserves a selected list between sessions.
- Can defer startup loading so Obsidian opens faster.
- Complete reminders from the Obsidian Reminders view.
- Update the visible row and list counts after completion.
- Complete linked Markdown checkboxes and push that state back to Apple Reminders.
- Complete rendered reminder cards and push that state back to Apple Reminders.
- Pull completion changes from Apple Reminders back into linked notes.
- Choose bidirectional sync or one-way sync in either direction.
Drag reminders from the Reminders view into Markdown notes in source mode.
Supported insert formats:
- Inline checkbox: a Markdown task with a hidden reminder ID.
- Embedded card: an
apple-remindercode block that renders as an interactive card. - Plain text: the reminder title only.
- Always ask: choose the format at drop time.
Hold Option while dropping to force plain text insertion.
The plugin avoids inserting linked reminder content into unsafe locations such as fenced code blocks and Markdown tables.
Inline checkbox drops look like this:
- [ ] Renew passport *(due: July 12)* <!-- reminder-id: x-apple-reminder://... -->The hidden reminder-id comment is what lets the plugin identify the Apple Reminders item later. When sync allows it, checking or unchecking the task in Obsidian updates the original reminder.
Embedded card drops use an apple-reminder code block:
```apple-reminder
id: x-apple-reminder://...
style: markdown
title: Renew passport
listName: Personal
dueDate: Monday, July 12, 2026 at 9:00:00 AM
priority: 5
notes: Bring photo and old passport.
```Cards render inside reading mode with completion controls, reminder metadata, notes, refresh controls, and orphan warnings when the original reminder can no longer be found.
Card styles:
- Obsidian / Markdown: fits Obsidian's native note style.
- Apple: closer to the Apple Reminders visual style.
Each reminder row can create or open a dedicated linked note.
Linked notes:
- Start with a reminder header block.
- Can render the header as a banner or card.
- Are tracked in
link-registry.json. - Open from the reminder row when already linked.
- Can be stored in a default folder.
- Can use per-list destination folders.
- Are protected against accidental duplicate reminder links when a note is copied.
- Stay linked after note renames.
- Clean up registry entries when notes are deleted.
If a linked reminder no longer exists in Apple Reminders, the plugin marks the linked note content as orphaned and can help clean it up.
Orphan handling works for:
- Linked checkbox lines.
- Embedded reminder cards.
- Linked note header blocks.
The plugin has two backend paths:
- AppleScript: default, no extra install.
- Native Swift helper: optional EventKit helper for faster list and reminder reads.
Backend mode can be:
- Automatic: use the native helper when installed, otherwise AppleScript.
- Native helper: require the helper.
- AppleScript: force AppleScript.
The helper is optional. The plugin still works without it.
The plugin can keep an optional vault-local cache:
- Off: no extra cache.
- Lists only: cache list names, colors, icons, and order.
- Lists + reminders: cache full reminder contents for faster large-list loading.
List metadata can be refreshed:
- Only on full sync.
- On every refresh.
- At a configured interval.
Developer options include:
- Debug logging.
- Performance timing logs.
- macOS.
- Obsidian desktop.
- Apple Reminders available on the same Mac.
- Reminders/Automation permission granted to Obsidian.
This plugin is desktop-only. It does not support Obsidian mobile because Apple Reminders access depends on macOS APIs.
-
Download the latest release from GitHub Releases.
-
Unzip the release.
-
Copy the plugin folder into your vault:
<vault>/.obsidian/plugins/obsidian-apple-reminders-plugin/ -
Restart Obsidian or reload community plugins.
-
Enable Apple Reminders in Settings > Community plugins.
-
Open the plugin from the ribbon icon or command palette.
Once accepted into Obsidian Community Plugins, install it from:
Settings > Community plugins > Browse
On first use, macOS may ask for permission. Allow Obsidian to access or control Reminders.
If reminders do not load, check:
System Settings > Privacy & Security > Reminders
System Settings > Privacy & Security > Automation
Make sure Obsidian is allowed, then restart Obsidian.
The plugin registers these commands:
- Open Apple Reminders
- Open Apple Reminders in New Tab
- Open Apple Reminders in New Window
- Load Apple Reminders now
- Full sync - Refresh lists from Reminders
- Sync mode: Calm, Balanced, or Live.
- Auto refresh interval: how often Balanced/Live modes check for changes.
- Default open mode: right sidebar, tab, or popout window.
- Plugin icon: Obsidian icon or bundled Apple Reminders icon.
- Startup behavior: deferred, manual, or immediate loading.
- Default priority color mode: preset priority colors or list accent color.
- List icon style: regular or bold icons.
- Show or hide list counts.
- Show or hide zero counts.
- Show or hide custom list icons.
- Load list icons eagerly or lazily.
- Choose the default drop format.
- Choose embedded card style.
- Use the drop picker when set to Always Ask.
- Use Option-drop for plain text.
- Set a default linked-note folder.
- Set per-list linked-note folders.
- Choose linked-note header display: banner or card.
- Choose sync direction:
- Bidirectional.
- Obsidian to Reminders only.
- Reminders to Obsidian only.
- Choose what happens after completion:
- Keep linked note content.
- Remove completed linked items.
- Automatic backend selection.
- Native helper mode.
- AppleScript mode.
- Helper status and re-scan controls.
- Helper cleanup controls when installed.
- Disable cache.
- Cache list metadata only.
- Cache lists and reminder contents.
- Choose list metadata refresh behavior.
- Run full sync immediately.
- Enable debug logs.
- Enable performance measurements.
- Delete/reset plugin data.
The native helper is an optional Swift command-line tool that uses EventKit. It is usually faster than AppleScript for large reminder collections.
The plugin searches for the helper in this order:
<vault>/.obsidian/plugins/obsidian-apple-reminders-plugin/bin/ar-reminders-helper
~/Library/Application Support/obsidian-apple-reminders-plugin/ar-reminders-helper
Install a prebuilt helper:
-
Download
ar-reminders-helperfrom GitHub Releases. -
Place it in one of the supported helper locations.
-
Make it executable:
chmod +x /path/to/ar-reminders-helper
Build the helper from source:
bash build-native-helper.shMore detail is available in NATIVE_HELPER.md.
The plugin does not send reminder data to a server and does not include telemetry.
Local plugin files may include:
data.json: plugin settings.cache.json: optional cache data.link-registry.json: reminder-to-note links.
cache.json can contain reminder titles, notes, dates, and flags if full cache mode is enabled. It is stored unencrypted inside the vault. Use Off or Lists only cache mode if you do not want reminder contents stored in vault files.
The native helper reads Reminders through EventKit and writes nothing to disk.
- Confirm Obsidian has macOS Reminders permission.
- Confirm Obsidian has Automation permission for Reminders when using AppleScript.
- Restart Obsidian after changing permissions.
- Try Full sync - Refresh lists from Reminders.
- Switch backend mode to AppleScript if the native helper is missing or failing.
- Check that
ar-reminders-helperexists in one of the supported locations. - Run
chmod +xon the helper. - Re-scan helper status from settings.
- Enable debug mode and check the developer console.
- Make sure the target note is in source mode.
- Avoid dropping inside fenced code blocks.
- Avoid dropping inside Markdown tables.
- Hold Option to test plain text insertion.
- Check the Sync direction setting.
- Confirm the note still contains a
reminder-idcomment orapple-reminderblock. - Use the card refresh button or run full sync.
- If the source reminder was deleted, resolve the orphan prompt.
Install dependencies:
pnpm installRun development watchers:
npm run devRun tests:
npm testBuild:
npm run buildPrepare the deploy folder:
npm run deployBuild the native helper:
bash build-native-helper.shA release should include:
manifest.jsonmain.jsstyles.cssicons/- optional
bin/ar-reminders-helper
Generated files are ignored in Git and should be built for each release.
GPL-3.0-only. See LICENSE.