Diary ICS

by Mousebomb
5
4
3
2
1
Score: 42/100

Description

The Diary ICS plugin synchronizes your Obsidian diary entries with system calendar applications like macOS Calendar or Windows Calendar by generating an ICS subscription link. It parses diary notes based on user-configured heading levels, creating calendar events with titles, descriptions, and deep links back to the original Obsidian files. Frontmatter fields can also be included as part of the event description using custom templates. A local HTTP server hosts the ICS file, enabling real-time updates and cross-device subscriptions within the same network.

Reviews

No reviews yet.

Stats

6
stars
340
downloads
1
forks
304
days
187
days
187
days
0
total PRs
0
open PRs
0
closed PRs
0
merged PRs
2
total issues
1
open issues
1
closed issues
9
commits

RequirementsExperimental

  • You must have a system calendar application (such as macOS Calendar or Windows Calendar) that supports subscribing to ICS feeds.

  • The plugin requires a running local HTTP server to host the ICS file for subscription.

Latest Version

6 months ago

Changelog

新功能:

时间解析规则

如果用户在写日记文档的标题中包含了时间(HH:mm)或者时间范围(HH:mm~HH:mm)则把时间填充到生成的ics事件中,如果标题中没有时间的话则保持原样(看作全天事件)。

例如:

  • ## 10:00~12:00 团队会议 会被解析为 10:00-12:00 的会议事件
  • ## 10:00 团队会议 会被解析为 10:00-11:00 的会议事件(默认结束时间为开始时间的1小时后)
  • ## 户外郊游 会被解析为全天事件

New feature:

Time Parsing Rules

  • If the heading contains time (HH:mm) or time range (HH:mm~HH:mm), it will be parsed and used as the event start time.
  • If no time is found, the event will be considered as an all-day event.

Examples of titles that can be parsed:

  • ## 10:00~12:00 Team Meeting will be parsed as a meeting from 10:00 to 12:00
  • ## Team Meeting 10:00 will be parsed as a meeting from 10:00 to 11:00 (default end time is 1 hour after start time)
  • ## Outdoor Walk will be parsed as an all-day event

Full Changelog: https://github.com/mousebomb/obsidian-diary-ics/compare/1.0.10...1.0.11

README file from

Github

Diary ICS

中文 | English

This is an Obsidian plugin that synchronizes content from Obsidian's diary system to the system calendar application (such as macOS Calendar, Windows Calendar, etc.).

https://github.com/user-attachments/assets/5cca303c-9c91-4805-ad37-8213e5124f62

Core Features

Generate ICS Calendar Subscription File

  • The plugin automatically generates an ICS format calendar subscription file (.ics) based on Obsidian's diary content
  • The file will be hosted on a local HTTP port (e.g., http://127.0.0.1:19347/feed.ics) (you can also check the local network IP to use it for subscription on other devices in the same network)
  • System calendar applications can subscribe to this link to synchronize Obsidian's diary content with the system calendar in real time

Diary Content Parsing Rules

  • The plugin parses Obsidian's diary note files (usually Markdown files named by date)
  • Extracts primary or secondary level headings (configured by the user)
  • Each extracted heading becomes a calendar entry corresponding to the date in the filename
  • If the heading contains time (HH:mm), it will be parsed and used as the event start time. If no time is found, the event will be considered as an all-day event.

Calendar Entry Details

Each calendar entry (event) will contain:

  • Title: Primary or secondary level heading extracted from the diary file
  • Link (URL): A clickable link
    • Format: obsidian://open?vault=YourVaultName&file=DiaryFilePath
    • Clicking it directly jumps back to the corresponding diary file in Obsidian
  • Description:
    • Contains all subheadings under the extracted heading

Frontmatter

If the diary has frontmatter fields, the plugin concatenates the day's frontmatter into a text output as an additional event. By default, each property is displayed on a separate line as the event description. Custom rules can be edited, for example: weather:{{weather}} mood:{{mood}} to extract weather and mood properties from frontmatter. If you don't know frontmatter, you can refer to the official documentation for more information.

Time Parsing Rules

  • If the heading contains time (HH:mm) or time range (HH:mm~HH:mm), it will be parsed and used as the event start time.
  • If no time is found, the event will be considered as an all-day event.

Examples of titles that can be parsed:

  • ## 10:00~12:00 Team Meeting will be parsed as a meeting from 10:00 to 12:00
  • ## Team Meeting 10:00 will be parsed as a meeting from 10:00 to 11:00 (default end time is 1 hour after start time)
  • ## Outdoor Walk will be parsed as an all-day event

Example Explanation

Assume you have a diary file: 2025-05-14.md with the following content:

# Today's Work Summary

## Morning Tasks
- Complete Module 1 of Project A

### Plan with R&D
- Complete Module B
- Contact Client

## Afternoon Tasks
- Meet with team to discuss requirements

## Evening Tasks 19:00
- Dinner with friends

If the user sets the plugin to extract all secondary level headings:

The plugin will extract 3 calendar entries:

  • Event 1: Title "Morning Tasks", description includes "Plan with R&D", link to the diary
  • Event 2: Title "Afternoon Tasks", description is empty, link to the diary
  • Event 3: Title "Evening Tasks", description is empty, link to the diary, time is 19:00-20:00

After subscribing to http://127.0.0.1:99347/feed.ics in the system calendar, you can see these three events.

Usage Instructions

  1. Install and enable this plugin in Obsidian
  2. Configure in plugin settings:
    • Heading level to extract (primary or secondary)
    • HTTP server port (default 19347)
  3. Copy the ICS subscription link provided by the plugin
  4. Add this subscription link in your system calendar application
  5. Now your Obsidian diary content will be automatically synchronized to the system calendar

Development Information

  • This plugin is developed using TypeScript
  • Starts a local HTTP server to provide ICS files
  • Generates calendar files according to the ICS standard