Standalone Logseq plugin for syncing Logseq tasks and calendar events with Nextcloud over CalDAV.
- syncs Logseq task blocks to Nextcloud
- syncs Logseq calendar events to Nextcloud
- supports two-way task and calendar sync for linked items
- supports multiple saved sync profiles, each with its own filters and remote collection
- discovers existing Nextcloud collections and calendars
- can create a new remote Nextcloud collection for the active profile
- exports both tasks and calendar events as ICS
- can mirror task state changes both ways for simple checklist profiles
Nextcloud TasksNextcloud CalendarNextcloud Calendar PickerNextcloud Sync ProfilesNextcloud Profile Editor
Nextcloud: Open profilesNextcloud: Discover collectionsNextcloud: Create profileNextcloud: Create remote collectionNextcloud: Sync allNextcloud: Open calendars
nextcloudDavUrlUsuallyhttps://your-host/remote.php/davcaldavUsernamecaldavPasswordcaldavCalendarUrlcalendarTimezone
Profiles are mainly managed through the UI. Legacy single-scope settings still exist for compatibility.
Each saved sync profile has:
- a name
- one remote collection URL
- a comma-separated
page-typefilter - a comma-separated tag filter
- an optional comma-separated ignore-tag list
- an optional page prefilter mode
- an optional calendar property override such as
calendar:: personal - an optional
write to journalflag for dated imports - an optional default import page
- an optional
simple checklist mode - an optional periodic sync toggle and interval
- an enabled flag
If both page types and tags are set, a page matches when it matches either list.
Only scan matched pages: yes is faster, but it skips pages that only match through block-level overrides.
Profiles currently work in two broad styles:
- Structured sync Best for journal-driven tasks and calendar/event sync.
- Simple checklist mode
Best for shared list pages such as shopping lists.
This mode:
- skips calendar sync/import entirely
- syncs only VTODO tasks
- imports remote tasks as normal checklist items on the target page
- tries to match existing local items by normalized title instead of relying on visible sync metadata
Simple checklist mode is intended for pages where readability matters more than preserving rich visible sync metadata.
Tasks are blocks that start with a task marker such as:
TODODOINGNOWWAITINGDONE
Example task:
TODO Submit funding application DEADLINE: <2026-04-01>
calendar:: academia
Calendar events that are not tasks are normal blocks or pages with date fields or timestamps, but without a task marker.
Examples:
Meeting with supervisor
date:: 2026-03-30 14:00
calendar:: academia
Conference session
start:: 2026-04-02 09:00
end:: 2026-04-02 11:00
calendar:: academia
Doctor appointment SCHEDULED: <2026-03-31 10:00>
calendar:: personal
A task block with SCHEDULED or DEADLINE is synced as a task and is not also exported as a separate calendar event by default.
Each profile can optionally enable:
Update periodically: yes/noUpdate interval minutes: XX
When enabled, the plugin runs that profile's sync on a repeating timer. Overlapping runs for the same profile are skipped.
Build:
cd ~/Projects/logseq-nextcloud-sync
npm run buildTypecheck:
cd ~/Projects/logseq-nextcloud-sync
./node_modules/.bin/tsc -p tsconfig.json --noEmitThe Logseq plugin symlink points here:
~/.logseq/plugins/logseq-nextcloud-sync