Lovely Dates
unlistedby Aitor Llamas Jiménez
Use your note's frontmatter as reminders
Lovely Dates
An Obsidian plugin that transforms your notes' frontmatter into calendar events, served via a local iCal server.
Features
- Frontmatter to calendar events: Convert dates in your notes' frontmatter into calendar events
- Local iCal server: Serves a
.icsfeed that any calendar app can subscribe to - Flexible configuration: Create multiple configurations to handle different types of notes
- Scope filtering: Limit configurations to specific folders or frontmatter property values
- Custom reminders: Define reminders using ISO 8601 duration format (compatible with TaskNotes)
- All-day events: Automatically detects all-day events from date-only values
- Accent color sync: Calendar inherits your Obsidian accent color
Installation
From Obsidian
Note: This plugin is not yet registered in the Obsidian Community Plugins repository. Please use BRAT or manual installation methods below.
- Open Obsidian Settings
- Go to Community plugins
- Click Browse and search for "Lovely Dates"
- Click Install
- Enable the plugin in the Installed plugins section
Using BRAT
BRAT (Beta Reviewer's Auto-update Tool) allows you to install and automatically update beta plugins directly from their GitHub repositories.
- Install and enable the BRAT plugin from the Community plugins section
- Open the Command Palette (
Ctrl/Cmd + P) - Run the command: BRAT: Add a beta plugin for testing
- Enter the repository URL:
aitorllj93/obsidian-lovely-dates - Click Add Plugin
- Go to Settings → Community plugins
- Find Lovely Dates in the list and enable it
BRAT will automatically check for updates and notify you when new versions are available.
Manual Installation
- Download the latest release from the Releases page
- Extract the files to your vault's
.obsidian/plugins/lovely-dates/folder - Reload Obsidian
- Enable the plugin in Settings → Community plugins
Manual installation
- Download
main.jsandmanifest.jsonfrom the latest release - Create a folder
<vault>/.obsidian/plugins/lovely-dates/ - Copy the downloaded files into that folder
- Reload Obsidian and enable the plugin in Settings → Community plugins
Usage
Basic setup
- Open Settings → Lovely Dates
- Configure the server port (default: 3000)
- Add an event configuration:
- Set the Start date property (e.g.,
scheduled,due,date) - Optionally configure end date, title, description, and location properties
- Set the Start date property (e.g.,
- Subscribe to the calendar URL in your calendar app:
http://localhost:3000/calendar.ics
Commands
| Command | Description |
|---|---|
| Copy ical URL to clipboard | Copies the calendar server URL to your clipboard |
Frontmatter example
---
title: Team meeting
scheduled: 2025-01-28T10:00:00
end: 2025-01-28T11:00:00
location: Conference Room A
description: Weekly sync with the team
type: meeting
reminders:
- id: rem_001
type: relative
relatedTo: scheduled
offset: -PT15M
description: 15 minutes before
- id: rem_002
type: relative
relatedTo: scheduled
offset: -PT1H
description: 1 hour before
---
All-day events
If your date property contains only a date (no time component), the event will automatically be created as an all-day event:
---
title: Project deadline
due: 2025-02-15
---
Configuration
General settings
| Setting | Description | Default |
|---|---|---|
| Calendar name | Name displayed in calendar clients | Obsidian Calendar |
| Server port | Port for the iCal server | 3000 |
Event configurations
Each configuration defines how frontmatter properties map to calendar event fields.
Scope settings
Control which notes a configuration applies to:
- Folders: Limit to notes in specific folders
- Property filter: Limit to notes where a frontmatter property matches specific values
When both are set, both conditions must match (AND logic).
Event mapping
| Property | Description | Required |
|---|---|---|
| Start date property | Frontmatter property for event start | Yes |
| End date property | Frontmatter property for event end | No |
| Duration | Default duration in minutes if no end date | No (default: 30) |
| Title property | Frontmatter property for event title | No (uses note title) |
| Description property | Frontmatter property for event description | No |
| Location property | Frontmatter property for event location | No |
| Reminders property | Frontmatter property for reminders array | No |
Default reminders
Define fallback reminders when no matching reminders are found in the note's frontmatter. Uses ISO 8601 duration format:
| Format | Meaning |
|---|---|
-PT15M | 15 minutes before |
-PT1H | 1 hour before |
-P1D | 1 day before |
-P1DT2H | 1 day and 2 hours before |
Reminders in frontmatter
Reminders in frontmatter support the following format:
reminders:
- id: rem_unique_id # Optional unique identifier
type: relative # Optional: relative or absolute
relatedTo: scheduled # Required: must match the startDateProperty
offset: -PT15M # Required: ISO 8601 duration
description: 15 min before # Optional description
The relatedTo field must match the startDateProperty of the configuration for the reminder to be included.
Subscribing to the calendar
Apple Calendar (macOS/iOS)
- Open Calendar
- Select File → New Calendar Subscription
- Enter the URL:
http://localhost:3000/calendar.ics - Configure refresh interval and alerts
Google Calendar
Google Calendar requires a publicly accessible URL. For local use, consider using a tunneling service like ngrok.
Outlook
- Open Outlook Calendar
- Select Add calendar → Subscribe from web
- Enter the URL:
http://localhost:3000/calendar.ics
Fantastical
- Open Fantastical preferences
- Go to Accounts → Add Account → Calendar Subscription
- Enter the URL:
http://localhost:3000/calendar.ics
Limitations
- Desktop only: This plugin requires a local server and is not compatible with Obsidian mobile
- Local network: The calendar URL is only accessible from your local machine unless you use a tunneling service
Support
If you find this plugin useful, consider sponsoring the development.
License
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.