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

  1. 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.

  2. 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:00 or 10: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
  3. 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

  1. Install and enable the plugin
  2. Configure in settings:
    • Heading extraction level
    • Server port
    • Diary file format and storage path (default naming YYYY-MM-DD)
  3. Copy the ICS link generated by the plugin
  4. Add the subscription in your system calendar (macOS Calendar, Windows Calendar, etc.)

Technical Implementation

  • Built with TypeScript, using the ics library 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.