haoenz35 downloads在日记中创建和编辑日程,在任意笔记中插入日程链接,并通过 Full Calendar Remastered 与 CalDAV 双向同步。
Edit ordinary calendar events as readable lines in Obsidian Daily Notes and synchronize them through Full Calendar Remastered to a CalDAV calendar.
DayDAV does not provide another calendar view and does not implement its own CalDAV login. Full Calendar Remastered remains the calendar client and the remote CalDAV collection remains the source of truth.
[!CAUTION] Test DayDAV with a disposable calendar before using it with important data. Keep backups of both your Vault and calendar.
The plugin is for people who plan and journal in Markdown but use a dedicated calendar app for calendar views and system reminders. An event can be written once in a Daily Note, then synchronized to the phone through CalDAV.
Do not also configure Full Calendar Remastered's Daily Note calendar for the same event lines. That is a separate local source and would create duplicate event ownership.
When the Daily Notes core plugin is enabled, DayDAV reads its folder and date-format settings automatically. Nested formats are supported. For example, a folder of 日记 and a format of YYYY/MM/YYYY-MM-DD resolve to 日记/2026/09/2026-09-10.md.
Add this toolbar block to the Daily Note template:
## Events
```daydav
```
The code block renders New event and Sync now buttons. Events are ordinary list items under the configured heading, using a DayPlanner-style format inspired by Full Calendar's Daily Note Calendar:
- 09:00 - 10:00 [Project discussion](obsidian://daydav?key=example&rev=abc123) [location:: Meeting room]
- 14:30 - 15:00 [Dentist](obsidian://daydav?key=example-2&rev=def456) [description:: Bring insurance card]
- [Public holiday](obsidian://daydav?key=example-3&rev=ghi789)
The title link opens the edit/delete dialog. Its key query parameter is the sole stable event identity. The short opaque rev value identifies the remote version on which that line was based, so a Vault-synchronized edit can be checked safely on another device. It is not a UID and can change after a successful sync. No separate [uid::] field or hidden HTML metadata is written.
Run DayDAV: Insert event from any Markdown editor. The picker keeps New event at the top and lists existing events below it; search matches event title, date, time, and location. Selecting an existing event inserts a standalone reference at the cursor. Selecting New event opens the create dialog, writes the event to the matching Daily Note, and inserts the same reference after creation.
📅 2026-09-10 09:00–10:00 [Project discussion](obsidian://daydav?key=example)
The Daily Note remains the local event projection and other notes contain references only, so inserting a reference does not create a second synchronized copy.
DayDAV: New event for current Daily Note, or choose New event from DayDAV: Insert event in any Markdown note.Click the event title to open the edit dialog, or change the title, time, location, description, or move the entire managed line to another Daily Note. The change is merged into the current remote event so calendar fields that are not represented in Markdown remain intact.
The create/edit dialog also has an Enable reminder toggle and a Minutes before field. Enabling it writes a CalDAV VALARM with ACTION:DISPLAY. Opening an existing event reads its current alarm; saving without touching the reminder controls preserves all existing alarms exactly.
Put the cursor on a managed event line and run DayDAV: Mark event for deletion. This adds [delete:: true]; the next sync deletes the remote event and removes the line.
Simply deleting a line is intentionally not treated as a remote deletion. It will be restored from CalDAV. This protects against accidental note edits, template replacement, sync conflicts, and formatters.
The Full Calendar access token is saved in Obsidian SecretStorage. This plugin never receives the CalDAV URL, username, or password.
data.json; CalDAV credentials remain in Full Calendar/Obsidian SecretStorage.pnpm install
pnpm run check
Copy main.js, manifest.json, and styles.css into:
<Vault>/.obsidian/plugins/daydav/
Reload Obsidian and enable the plugin.
minAppVersion in manifest.json.package.json.pnpm run version. The script copies the plugin version to manifest.json and records its minimum Obsidian version in versions.json.v prefix, for example 1.0.0.main.js, manifest.json, and styles.css to the release.For the first Community Plugins submission, append a matching entry to obsidianmd/obsidian-releases:
{
"id": "daydav",
"name": "DayDAV",
"author": "haoenz",
"description": "在日记中以文字行创建和编辑日程,并通过 Full Calendar Remastered 与 CalDAV 双向同步。",
"repo": "haoenz/obsidian-daydav"
}
DayDAV itself does not make network requests. It asks Full Calendar Remastered to read or mutate the selected calendar through a scoped JavaScript API. See SECURITY.md.