Modern CalDAV client
- TypeScript 97.2%
- CSS 1.8%
- Rust 0.8%
- JavaScript 0.1%
|
v4ndn
92f2dd6564
feat: undo, keyboard shortcuts, journal tabs, and calendar/recurrence fixes
Adds several features and fixes across the calendar, journal, and editors. Features - Undo (Ctrl+Z): single-action-at-a-time history reversing create/move/edit/ delete for events and tasks, including recurring occurrences (EXDATE + detach). Bulk flows (paste, preset drop, group move, multi-delete) undo as one step. Configurable depth via new "General" > "Max undo limit" preference; toast reports the undone action. - Keyboard shortcuts + help modal (?): global R/1/2/3, N/T/arrows on calendar, N on tasks/journal, Ctrl+S to save a note, Ctrl+Z undo. - Journal: persistent tabs with drag-reorder and note-icon/close controls; raw <-> markdown editor toggle; persist opened note. - Recurring events: recurrence window (start + repeat-until) using a new themed DatePicker with clear button. - Ctrl/Cmd+drag marquee selection of events/tasks on the week grid. Changes - Rename app to "vcal"; move settings/refresh/logout into a top navbar. - Show tasks on the week strip (timed + all-day) with selection, drag, context menu, and copy/paste; keep phantom styling on paste/preset drop. - Allow a collection to be both calendar and journal (isCalendar/isJournal); hide journals from event/task calendar pickers. - Render GFM/HTML markdown in event/task overviews and previews. - Edit/create modal fixed to 50vw. Fixes - Paste now preserves event reminders (VALARM). - Recurring occurrence delete no longer flashes: apply exclusion before await. - Week scroll is responsive (accumulator + gesture lock, no 400ms throttle). - Remove event/task appear + week-scroll animations. - Markdown: visible list markers; task toggles only when the checkbox is clicked. - Remove recurring-task support and its repeat field. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> |
||
|---|---|---|
| public | v1.0 | |
| src | feat: undo, keyboard shortcuts, journal tabs, and calendar/recurrence fixes | |
| src-tauri | feat: tasks on week strip, no recurring tasks, journal tabs | |
| .gitignore | v1.0 | |
| eslint.config.js | v1.0 | |
| index.html | v1.0 | |
| notification.mp3 | v1.0 | |
| package.json | feat: undo, keyboard shortcuts, journal tabs, and calendar/recurrence fixes | |
| README.md | v1.0 | |
| tsconfig.app.json | v1.0 | |
| tsconfig.ds.json | v1.0 | |
| tsconfig.json | v1.0 | |
| tsconfig.node.json | v1.0 | |
| vite.config.ts | v1.0 | |
vcalendar
A CalDAV calendar app with tasks and journaling, built with React and packaged as a native desktop app via Tauri.
Features
Calendar
- Week grid with week navigation and a "Today" shortcut
- Mini calendar in the sidebar for quick week jumping
- Drag events to reschedule them; drag their bottom edge to resize — both snap to 15-minute intervals
- Click-drag on empty space to draw a new event
- All-day event row at the top of the grid
- Shift-click to select multiple events; copy/paste the selection
- Right-click context menu on any event
- Click an event to open a read-only overview, double-click (or use the context menu) to edit
- Recurring event support — edit scope: this occurrence only, or all events in the series
- Event presets: select two or more events, save them as a named preset, then drag the preset from the sidebar onto the calendar to recreate the whole group at once
Events & Tasks (shared form)
- Title, Markdown description, start/end date-time or all-day toggle
- Assign to any synced calendar
- Repeat: daily, weekly, monthly, yearly, weekdays, or custom RRULE string
- Multiple reminders per event (desktop notifications via Tauri)
Tasks
- Dedicated tasks page with tasks grouped by: Overdue, Today, Tomorrow, This week, Later, No due date
- Completed tasks in a collapsible section at the bottom
- Inline Markdown description rendering
- Recurring tasks shown with a repeat indicator
- One-click checkbox to mark complete
- Shift-click to multi-select; bulk delete via right-click context menu
- Search bar to filter by title
- Day panel on the right: click any day in the sidebar mini calendar to see that day's tasks
Journal
- Dedicated journal page with a two-panel layout: tree on the left, editor on the right
- Notes are organized into collections (CalDAV calendars marked as journals)
- Folder hierarchy using
/in the note title — e.g.February/24thcreates aFebruaryfolder - Per-note icon picker (any Lucide icon)
- Shift-click to multi-select notes and folders
- Drag and drop to move notes or entire folders between folders and collections
- Right-click context menu: edit metadata, delete note, delete folder (with nested note count)
- Rich Markdown editor (Milkdown) with inline editing and a manual save button
Theming
- Built-in light, dark, and sepia themes
- Fully custom theme editor — adjust all nine color tokens independently
- Adjustable hour row height in the week grid
- All preferences persisted locally
General
- Connects to any CalDAV server (Nextcloud, iCloud, Fastmail, etc.)
- Toggle individual calendars on/off from the sidebar
- Manual refresh and disconnect buttons
- Mobile-responsive: single-day view with day navigation, bottom tab bar
Planned
- Month and day views
- Attendees / invite flow
- Timezone handling per event
- Per-event colors
- Multiple CalDAV accounts simultaneously
- Keyboard shortcuts
- Mobile app (iOS & Android)
- More customization options in preferences
- Plugin support
Build
Prerequisites: Node.js, Rust (for the desktop build only)
npm install
| Command | What it does |
|---|---|
npm run dev |
Start the web dev server |
npm run build |
Build the web app |
npm run tauri:dev |
Launch the desktop app in dev mode |
npm run tauri:build |
Build a distributable desktop binary |