Developed an Obsidian diary sync calendar plugin: Diary ICS
I recently built an Obsidian plugin — Diary ICS — mainly to solve the problem of syncing Obsidian diary content with system calendars.
Core Features
ICS calendar subscription generation
The plugin automatically generates ICS-format files based on diary content, and serves a subscription link (e.g.http://127.0.0.1:19347/feed.ics) through a local HTTP server (default port 19347), so other devices on the LAN can subscribe.Diary content parsing rules
- Extracts headings of a specified level (level 1 or 2, configurable) as calendar events
- When a heading contains a time (e.g.
19:00or10:00~12:00), it is automatically parsed as the event time; a heading without a time becomes an all-day event - Events carry a jump link (
obsidian://protocol) — click to open the corresponding diary entry - Content under subheadings is used as the event notes
Frontmatter support
You can sync diary property fields (frontmatter) as standalone events, with customizable title and content templates (e.g.天气:{{weather}} 心情:{{mood}}).
How to Use
- Install and enable the plugin
- Configure in settings:
- Heading extraction level
- Server port
- Diary file format and storage path (default naming
YYYY-MM-DD)
- Copy the ICS link generated by the plugin
- Add the subscription in your system calendar (macOS Calendar, Windows Calendar, etc.)
Technical Implementation
- Built with TypeScript, using the
icslibrary to generate standard calendar files - A local HTTP service provides real-time subscription
- Parses the Obsidian metadata cache to get the heading structure, avoiding repeated file reads
Download and Feedback
Source code: github.com/mousebomb/obsidian-diary-ics
Supports Obsidian 0.15.0 and above. Feel free to submit an Issue to report problems.