1
0
Fork
You've already forked vcal
0
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>
2026年07月04日 05:36:45 +03:00
public v1.0 2026年06月30日 07:49:30 +03:00
src feat: undo, keyboard shortcuts, journal tabs, and calendar/recurrence fixes 2026年07月04日 05:36:45 +03:00
src-tauri feat: tasks on week strip, no recurring tasks, journal tabs 2026年07月02日 04:40:18 +03:00
.gitignore v1.0 2026年06月30日 07:49:30 +03:00
eslint.config.js v1.0 2026年06月30日 07:49:30 +03:00
index.html v1.0 2026年06月30日 07:49:30 +03:00
notification.mp3 v1.0 2026年06月30日 07:49:30 +03:00
package.json feat: undo, keyboard shortcuts, journal tabs, and calendar/recurrence fixes 2026年07月04日 05:36:45 +03:00
README.md v1.0 2026年06月30日 07:49:30 +03:00
tsconfig.app.json v1.0 2026年06月30日 07:49:30 +03:00
tsconfig.ds.json v1.0 2026年06月30日 07:49:30 +03:00
tsconfig.json v1.0 2026年06月30日 07:49:30 +03:00
tsconfig.node.json v1.0 2026年06月30日 07:49:30 +03:00
vite.config.ts v1.0 2026年06月30日 07:49:30 +03:00

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/24th creates a February folder
  • 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