@m4rti21/n8n-nodes-caldav
v0.1.0
Published
n8n community node for CalDAV calendars, built and tested against Radicale
Maintainers
Readme
@m4rti21/n8n-nodes-caldav
An n8n community node for CalDAV calendars: list calendars, and create, read, update and delete events, from workflows or as a tool for an AI Agent. Built and tested against Radicale; it speaks plain RFC 4791, so other CalDAV servers work too.
Status: 0.1.0, not yet published to npm. A fork of mediabc/n8n-nodes-caldav-calendar, rewritten; see the changelog.
Operations
| Resource | Operation | What it does | | -------- | --------- | ------------------------------------------------------------------------------ | | Calendar | Get Many | Every calendar the account can see, with its path, name, colour and components | | Event | Create | A timed or all-day event, optionally recurring, optionally with your own UID | | Event | Get | One event by UID, plus any individually changed occurrences | | Event | Get Many | Events in a time range, recurring ones expanded into occurrences | | Event | Update | Change some fields; everything else (alarms, attendees, ...) is kept | | Event | Delete | An event, or a whole recurring series, by UID |
How dates, timezones, all-day events and recurrences behave is in docs/usage.md.
Install in n8n
Settings > Community Nodes > Install, then enter @m4rti21/n8n-nodes-caldav.
Self-hosted n8n only: the package is published from Forgejo, without the npm
provenance n8n Cloud requires.
Then create a CalDAV API credential:
| Field | Radicale example |
| ---------- | ------------------------------------------------------------------------------- |
| Server URL | https://radicale.example.com/ (the root, your /user/ home, or one calendar) |
| Username | your Radicale user |
| Password | its password |
Other servers: Nextcloud https://cloud.example.com/remote.php/dav/, Baikal
https://dav.example.com/dav.php/, iCloud https://caldav.icloud.com/ (with an
app password). Calendars are discovered from whatever URL you give.
Develop
Three ways in; pick one. Details in docs/development.md.
# Docker: n8n with this node loaded, next to a Radicale (tester / testpass)
npm ci && npm run build && docker compose up
# open http://localhost:5678, server URL http://radicale:5232/
# Local tooling: Node 22+ and, for the integration tests, radicale on PATH
npm ci && npm test
# Nix: everything above, plus graft and the git hooks
nix develop -c npm test| Command | Does |
| -------------------------- | -------------------------------------------------- |
| npm run build | compile to dist/ and copy the icons |
| npm run dev | n8n with the node hot-reloaded (n8n-node dev) |
| npm test | unit and integration tests |
| npm run test:unit | unit tests only, no server needed |
| npm run test:integration | against a throwaway Radicale, or CALDAV_TEST_URL |
| npm run lint | n8n's community-node lint rules |
| npm run typecheck | tsc over source and tests |
| npm run format | prettier; format:check to verify |
| npm run check:ascii | fail on non-ASCII characters in source |
Environment variables are only read by the compose stack and the integration
tests; the node takes everything from its credential. See
.env.example:
| Variable | For | Example |
| ------------------------------------------ | ------------------------------------------------- | ------------------------ |
| N8N_PORT, RADICALE_PORT | host ports of the compose stack | 5678, 5232 |
| GENERIC_TIMEZONE | the compose n8n's default timezone | Europe/Madrid |
| CALDAV_TEST_URL | run integration tests against this server instead | http://127.0.0.1:5232/ |
| CALDAV_TEST_USER, CALDAV_TEST_PASSWORD | its credentials | tester, testpass |
Layout
credentials/ the CalDAV API credential
icons/ node and credential icon
nodes/Caldav/ the node: description, operations, n8n transport
nodes/Caldav/lib/ CalDAV client, iCalendar, time and recurrence; no n8n imports
test/unit/ pure tests, no server
test/integration/ tests against a real Radicale, through the node's execute()
test/radicale/ the throwaway Radicale config and image
docs/ usage, installation, development, architecture, releasingDocs
- Usage: dates, timezones, all-day events, recurrences, errors
- Installation: n8n, prerequisites, other servers
- Development: day-to-day, tests, debugging
- Architecture: how a request flows, and why no dependencies
- Releasing: versioning and the Forgejo publish workflow
License
MIT, as declared by the upstream project.
