Full Calendar Changelog¶
This page provides a detailed breakdown of every version of the Full Calendar plugin, including new features, improvements, and bugfixes.
Version 0.12.7.1¶
New Features¶
- Asynchronous Event Discovery Pipeline
The core synchronization engine has been rewritten to eliminate UI freezes and dramatically improve load performance.- Re-architected
ProviderRegistryremote discovery into a true Stage 1 → Stage 2 pipeline. - Stage 2 for each provider now begins immediately after its own Stage 1 completes, removing the previous global Promise barrier.
- Enables background pipelining and significantly reduces perceived startup time.
- Re-architected
Improvements & Fixes¶
-
Local Provider Concurrency
Improved I/O throughput and removed unnecessary blocking during startup.- Parallelized Local Provider Stage 1 reads using
Promise.allinstead of sequentialfor..ofiteration. - Prevents main-thread stalls during large vault scans.
- Parallelized Local Provider Stage 1 reads using
-
EventCache Optimization
Removed expensive diffing operations that caused major slowdowns on large datasets.- Eliminated O(N)
JSON.stringifycomparisons inEventCache.syncCalendarwhen cache size changes significantly (e.g., Stage 2 replacing Stage 1 data). - Added short-circuit invalidation logic to bypass redundant comparisons.
- Eliminated O(N)
-
Selective UI Reconciliation
Replaced full calendar teardown cycles with targeted updates.- Updated
EventCacheandCalendarViewflush callbacks to accept anaffectedCalendarsarray. - Replaced
removeAllEventSources()with selectiveremoveEventSource/addEventSourceoperations for dirty calendars only. - Fully resolves prior 1–3 second UI freezes during large refreshes.
- Updated
-
DailyNoteProvider Algorithm Fix
Eliminated a critical O(N²) bottleneck in event resolution.- Removed full Vault Daily Note cache iteration from
getEventHandle. - Events now resolve purely by date string.
ProviderRegistrysecurely injects authoritativelocation.pathmetadata before write/delete operations.
- Removed full Vault Daily Note cache iteration from
-
Performance Audit Results
Benchmark run on 1000+ Daily Note events and 69 Google Calendar events.- Daily Note Stage 1: 1209.1ms → 110.8ms (~11x faster)
- Daily Note Stage 2: 2839.4ms → 143.3ms (~20x faster)
- Remote Stage timings remain steady while now starting earlier in the pipeline.
- Total two-stage discovery: 4880.9ms → 908.9ms (>5x faster overall)
- Complete elimination of observable main-thread UI freezing on load.
-
Linting & Type Safety
Strengthened long-term maintainability and compliance.- Enforced ESLint rules for UI string formatting consistency.
- Improved TypeScript type safety across core components.
- Refactored related modules to align with stricter linting and safer type contracts.
Version 0.12.7¶
-
Local ICS Support
You can now view.icsfiles stored directly in your Obsidian vault!- Added a mode toggle for standard Web URLs versus Vault relative files.
- Extended provider interfaces to safely support the
app.vaultAPI.
-
Timezone & DST Hardening (#194)
The timezone pipeline has been modularized and significantly hardened for recurring events crossing Daylight Saving Time boundaries.- Removed
luxonentirely in favor of native and internal logic. - Corrected floating time expansion, EU/US DST transitions, and half-hour/45-min offset zones.
- Restored dynamic display timezone toggles.
- Fixed missing DTSTART/EXDATE alignment in RRule passthrough.
- Removed
-
Staged Loading Architecture
Dramatic startup performance and UI responsiveness improvements.- Providers now load events in two stages: Stage 1 quickly fetches a 3-month window surrounding the current date, while Stage 2 quietly loads the full history in the background.
- Eliminates UI locking when CalDAV or Google APIs stall or time out on huge event caches.
-
Linting & Code Quality
The codebase has been migrated to standardeslint.config.mjsand nativeeslint-plugin-obsidianmd.- Refactored 80+ warnings across 18 core files.
- Eliminated thousands of unsafe
anyusages and tightened type safety for caching and Google Auth. - Safeguarded tests with mocked vaults and standard JS generic mocks.
-
General UI Fixes (#169, #191, #214, #218)
Fixed LiveSync header injections by targetingcontentEl, improved mobile responsiveness across fullcalendar views, improved edit modal error namespace, and added proper API error handling for HTTP POST timeouts.
Version 0.12.6¶
Thanks to @kapej42 and @mivanit for the incredible contributions in this release!
-
Full CalDAV Two-Way Sync (#205)
CalDAV calendars are no longer read-only! You can now create, edit, and delete events directly in Obsidian, and changes will sync back to your CalDAV server. -
Mobile Workspace Support (#203)
Workspaces are now fully accessible on mobile!- Added workspace button to footer toolbar on mobile/narrow views.
- Improved menu handling and truncated labels for better fit.
- Renamed button from
WS ▾toWorkspace ▾for clarity.
-
Mobile Monthly View (#201)
You can now access the monthly view on mobile devices via the view dropdown or workspace settings. -
Rich Read-Only Modal (#205)
The event details modal for read-only events has been upgraded to show rich information including descriptions, attendees, and more, matching the editing experience. -
ICS Parsing & Date Validation (#199, #203)
Major hardening of the ICS parser for better compatibility and stability:- Timezones: Map Windows timezones (e.g.,
W. Europe Standard Time) to IANA identifiers, fixing issues with Outlook/Exchange calendars falling back to UTC. - Date Handling: Convert
YYYYMMDDdates to ISO format, validated skip dates in recurring events, and handled all-day events more robustly. - Validation: Added defensive checks to prevent
RangeError: Invalid time valuecrashes and improved error logging.
- Timezones: Map Windows timezones (e.g.,
-
Google Calendar Settings (#204)
Fixed an issue where the Google Calendar settings menu for credentials was not displaying correctly. -
Title Parsing (#203)
Fixed category parsing to prevent false positives (e.g., "anything - Red Hat One") and now shows the full title when no category is defined. -
Other Fixes
- Scheduler license key is now only included when the resource-timeline plugin is loaded.
- Updated
CONTRIBUTING.mdstandards.
Version 0.12.5¶
-
CalDAV validation and parsing (#193)
CalDAVProvider now validates calendar collections with PROPFIND, parses calendar-data via DOMParser, adds JSDOM-backed tests, and surfaces clearer errors when a URL is not a calendar collection. -
Provider initialization and cache refresh (#173)
Providers call initialize() after construction, load events into the cache with completion callbacks, adjust load priorities, and resync event sources without a full calendar rebuild. -
Google auth and recurring timezone handling (#191, #190, #94)
Mobile OAuth opens windows synchronously to avoid popup blockers; recurring Google events now honor exdates and BYDAY across timezones, correctly hiding deleted instances and preserving durations across DST. -
ChronoAnalyser data integrity and Bases provider
ChronoAnalyser pulls from the main EventStore with corrected category/project parsing, and you can now add an Obsidian Bases calendar (with a guard to enable the Bases plugin first).
Version 0.12.4¶
-
CalDAV and Provider Architecture Refactor (#cc01102)
The calendar source/provider system has been refactored for modularity, reliability, and easier extension. CalDAV support is now more robust and easier to configure. -
Multi-Language (i18n) Support
Full Calendar now supports multiple languages. The UI will automatically switch based on your Obsidian language setting. Developers can add new translations via the i18n system with type-safe keys. -
Provider Registry and Error Handling
Provider registry logic has been improved for better calendar source management and error handling. Adding new calendar types is now simpler and safer. -
Documentation and Translation Files
Updated documentation and added instructions for contributing new translations. See i18n documentation.
Version 0.12.3.1-beta¶
-
Tasks Provider Rearchitected for Performance and Precision (#151, #155)
The Tasks provider is now powered by the official Tasks plugin's live cache, eliminating manual vault scans and delivering instant updates. Edits are now "surgical," preserving user metadata like links, tags, and comments when scheduling or completing tasks. -
Robust and Stable Settings UI (#141)
The settings panel has been refactored for stability. The color picker no longer loses focus on changes, and a newCalendarSettingRowcomponent ensures a consistent and reliable layout for all calendar sources. -
Provider-Specific Task Completion (#143, #144)
ThetoggleCompletelogic is now abstracted, allowing calendar providers to implement their own custom behavior for completing tasks. -
ICS Timezone Fallback (#91)
Remote ICS calendars with unrecognized timezones will now safely fall back to UTC instead of failing to load.
Version 0.12.3¶
-
Deep Tasks Integration with Backlog & Filtering (#122, #128, #136)
Full Calendar now has first-class support for the Obsidian Tasks plugin. A new "Tasks" calendar source syncs your tasks directly onto the calendar. Features include a dedicated task backlog, drag-and-drop rescheduling, and in-calendar completion. Create, update, and delete tasks without leaving the calendar view. -
Advanced Date Navigation (#106)
Navigate your calendar with precision using the new "Go To" dropdown in the toolbar. It features a reusableDatePickerand context-aware navigation. Right-click on the calendar to jump to a specific month, week, or day. -
Task Management Workflow & Parsing (#132, #134, #138)
The Tasks integration includes advanced parsing for dated and undated tasks, multi-day event support, and custom status detection. A new setting allows stripping tags from task titles for a cleaner display. The entire parsing logic is covered by a comprehensive test suite for maximum reliability. -
Performance & Stability
The plugin now performs surgical updates on file changes instead of full-vault rescans, significantly improving performance in large vaults. Remote calendars now load in a non-blocking, priority-ordered manner, and race conditions during event source removal have been fixed. -
Provider Architecture
The provider registry now loads calendars with priority and uses a newisFileRelevant()hook for cleaner file-change handling. "Manage calendar" logic has been delegated to the respective providers for better modularity. -
Notification and Reminder Reliability
End-time reminders now fire correctly for events that are already in progress, ensuring you never miss the end of an important block of time. -
Core Component Stability (#100, #101, #126)
Fixed numerous bugs, including a race condition when removing event sources, an issue preventing the create modal from appearing if no editable calendars exist, and a bug where the Daily Notes calendar would fail without a template. New calendars now appear instantly in settings without a "Provider not found" flash.
Version 0.12.2 (beta)¶
-
Multi-day Daily Note events with explicit endDate
Daily Note calendar now supports explicit multi‑day events via[endDate:: YYYY-MM-DD]while remaining backward compatible with legacy overnight detection. -
Central TimeEngine
Single timer maintains a sorted time-sensitive cache and publishes atime-tickevent consumed by status bar, notifications, and other listeners. -
Status Bar current/upcoming events
Lightweight status bar UI subscribes toTimeEngineto surface what's happening now and next. -
Interactive time‑axis zoom (#96)
Ctrl/Cmd + scroll to dynamically zoom the vertical (timeGrid) or horizontal (resourceTimeline) axis for fast focus changes. -
Advanced recurrence intervals & positional monthly rules (#97)
Support for interval-based repeats (e.g., every 2 weeks) and positional monthly rules (2nd Tuesday, last Friday) with iCal import/export parity. -
Codebase compliance & safety
Replaced looseanycasts, moved inline styles to CSS, addedinstanceofguards for file/folder objects, removed custom leaf detaching on unload. -
Reactive calendar view lifecycle
view-config-changednow triggers targeted cache repopulation and a newresyncevent prompts precise re-renders for snappier UI updates. -
NotificationManager refactor
No internal timer; now a passive subscriber toTimeEngine, reducing duplicate intervals and simplifying lifecycle management. -
Robust timezone conversion for cross-day events
convertEventrewritten as a pure function; correctly handles explicitendDateand legacy overnight semantics with stricter type guards.
Version 0.12.1 (beta)¶
-
Event Reminder System with Desktop Notifications (BETA)
Introducing theNotificationManagerfor native desktop notifications. Users can opt-in to receive reminders 10 minutes before events start and, optionally, 10 minutes before they end. Perfect for never missing important meetings or deadlines. -
Multi-Account Google Calendar Integration
Google Calendar integration now supports connecting and managing multiple accounts simultaneously. Features a dedicated account management hub with a streamlined two-step wizard for adding new calendars from any connected account. -
Provider-Based Architecture with Multi-Account Support
Complete architectural overhaul to a provider-based system where each calendar source (Local, Daily Notes, ICS, CalDAV, Google) is a self-contained, instanced provider. The newProviderRegistryacts as a central persistence gateway, managing all I/O and abstracting storage details. This enables stateful features and robust multi-account Google Calendar integration. -
Event-Driven Settings with Instant Updates
Settings persistence refactored to a publish/subscribe model. ThesaveSettingsfunction now diffs old vs new state and publishes granular events (sources-changed,view-config-changed,settings-updated). Calendar views re-render instantly without flicker or unnecessary reloads. -
Lazy-Loading for Faster Startup Performance
Heavy dependencies are now dynamically imported only when needed: FullCalendar engine loads when opening a calendar view, React modals load on demand. This dramatically reduces startup time and memory usage. -
Centralized Event Enhancement Pipeline
NewEventEnhancermodule centralizes all timezone conversions and category parsing, essentially intercepting all raw events befor it reaches the Cache. Business logic extracted into dedicated stateless modules with a newWorkspaceManagerhandling all workspace filtering and display logic. -
Timezone Handling for Recurring Events #94
Recurring events now properly handle timezones with endDate support, resolving timezone branching issues and ensuring correct time display across different time zones. -
ICS events now loads properly #91
Parsing issues in Remote ICS calendar is fixed and should now load properly.
Version 0.11.9¶
-
Calendar Workspaces (#90)
Save and switch between customized calendar setups (sources, filters, and view preferences). Workspaces include a header switcher, a command palette action ("Full Calendar: Switch Workspace"), and an optional default workspace on startup. Saved state covers selected sources (Local, Daily Notes, ICS, CalDAV, Google), category/sub‑category filters, tasks visibility, all‑day toggle, initial view (month/week/day/timeline), week start, and time‑grid display options. -
Faster Switching and Rendering
Workspace application is incremental (sources → filters → view) to avoid full calendar rebuilds. Switching preserves context where possible (e.g., scroll/selection) and significantly improves responsiveness on large vaults. -
Workspace Management UX
Add Save as Workspace, Rename, Delete in the calendar header menu; set a Default Workspace in Settings; and assign hotkeys through Obsidian’s Hotkeys for one‑press switching. -
Edit Modal Sub‑category Parsing
Fixes a regression where sub‑categories could disappear when editing the title in the modal. The title parser now consistently preserves theCategory - SubCategory - Titleformat on save. -
Workspace Persistence Edge Cases
Improved robustness when loading a workspace that references a removed or renamed source. Adds safe fallbacks to an "All Events" view and clearer status messaging.
Version 0.11.8¶
-
Business Hours and Background Events Support
Highlight working hours in calendar views and display events as background highlights (e.g., vacations or focus blocks). Configurable via settings and event frontmatter. -
Timeline View Category Shadow Events (#76)
Adds optional display of category shadow events in Timeline View for better visual context and planning. -
Real-Time Duplicate Event Validation (#67)
Prevents creation of duplicate events in the calendar interface, improving scheduling accuracy. -
Edit Modal Now Supports Subcategory Editing
The "Edit Event" modal now parses and displays sub-categories directly in the event title. Users can edit them inline and changes are preserved. -
Settings Modal Reorganization and Footer
UI updates include reorganized settings for better clarity, hover hints for display options, and a new footer for versioning and help links. -
Configuration Migration for Legacy Support
Legacy settings likesubprojectKeywords_excludeare migrated automatically, and missing fields (e.g.,persona) are filled safely. -
Type Safety and Safer DOM Manipulations (#69, #71)
Removed unsafe type assertions across key modules (DailyNoteCalendar,GoogleCalendar,interop) and introduced robust DOM update utilities (safeCreateEl,safeEmpty). -
Recurring Task Completion Preserves Child Timing (#75)
Undoing completed recurring tasks now correctly retains the timing of override events. Adds full test coverage for various edge cases. -
All-Day Events Treated as Floating in RRULE
All-day recurring events now behave correctly as floating events, fixing unintended start time offsets. -
Coverage for Business Hours, Background Events, and Override Logic
New test suites validate schema correctness, UI rendering, and recurring timing behavior.
Version 0.11.7¶
-
Full Google Calendar Integration with Two‑Way Sync
Connect your Google account to create, modify, and delete events (including recurring events) directly in Obsidian. Includes OAuth 2.0 authentication, calendar selection, and proper token refresh handling. -
Centralized and Reusable Form Components
Inputs like URL, Username, Password, Directory Select, and Heading have been refactored into dual‑mode primitives with areadOnlymode for consistent display. A genericTextInputreplaces one‑off components. -
Modularized Settings Tab and Changelog Component
Settings sections are now organized into dedicated renderers with improved type safety. A newChangelog.tsxcomponent has been added for clearer update visibility. -
Unified Event Parsing Pipeline
Calendar parsers now output raw events without settings dependencies and pass them through a singleenhanceEventfunction for category logic. Tests have been updated to separately verify raw parsing and enhancement. -
Modular Event Cache Management
TheEventCachelogic is split into dedicated modules (RemoteCacheUpdater,LocalCacheUpdater,IdentifierManager,RecurringEventManager), making synchronization and recurring event handling more reliable. -
Daily Note Calendar Parsing and Cache Update Logic
Parsing bugs inDailyNoteCalendarhave been fixed, andmodifyEventnow correctly flags dirty events to ensure the UI updates when frontmatter changes (e.g.,skipDate). -
Codebase Refactor for Type Safety and Maintainability
Shared types and utilities have been centralized, internal names clarified, and redundant code removed—all without changing user‑facing behavior.
Version 0.11.6¶
-
Advanced Categorization with Hierarchical Timeline View
Events can now be organized by categories and sub-categories in a new Resource Timeline view. Expandable groups and aggregated parent rows make it easier to manage complex schedules. -
Drag-and-Drop Category Reassignment
Change an event’s category or sub-category directly from the timeline view by dragging it to a different lane. Titles and metadata update automatically. -
Cleaner UI and Initial View Options
The event modal and settings UI have been polished with dropdown options and a new initial view setting that supports the timeline view. -
Smarter Event Titles and Filenames
Events now display clearer titles (e.g.,SubCategory - Event Name) while keeping filenames and internal data consistent. -
Multi-Level Category Parsing
Parsing of event titles with multiple category levels (e.g.,Category - SubCategory - Title) has been fixed, ensuring correct category and sub-category assignment. -
License Update
The plugin license has been updated to GPLv3 to comply with FullCalendar requirements.
Version 0.11.5-beta¶
-
Monthly and Yearly Recurring Events
You can now create events that repeat every month or every year — perfect for things like anniversaries, billing cycles, or project reviews. -
Smarter "Repeats" Menu in Event Modal
The old "Recurring" checkbox is gone. Instead, use a new dropdown to choose from Weekly, Monthly, or Yearly recurrence. The UI updates dynamically to match your selection. -
Human-Friendly Filenames for Recurring Notes
Recurring event notes now get cleaner, more descriptive names like(Every year on July 30th) My Event.md. -
Enhanced Timezone and All-Day Support
Timezone handling for recurring events is now more accurate, and All-Day events display correctly across time boundaries. -
Right-Click Task Toggle for Recurring Tasks
Recurring tasks can now be marked as complete using the right-click menu, just like one-off tasks. -
Safer Rendering and UI Cleanups
Removed use of unsafe HTML injection in the UI. Improved event rendering, loading states, and general UI responsiveness.
Version 0.11.4¶
-
Smarter Recurring Events and Tasks
Recurring events can now be edited per-instance — drag, resize, or complete a task without affecting the whole series. Changes are reversible and tracked cleanly. -
Safe Deletion with Confirmation Options
Deleting a recurring event now asks whether to remove just one instance, the entire series, or promote existing edits to standalone events. -
Better Task Behavior for Repeating Events
Recurring tasks now behave just like regular ones — you can check them off individually, and they show up correctly in the calendar. -
Multi-day all-day events fix by @yalikebaz
Multi-day all-day events made inclusive for local calendars. Thanks to @yalikebaz for the fix! -
Performance and Architecture Improvements
Refactored recurring event logic, improved performance on large calendars, and cleaned up the plugin architecture to prepare for future features.
Version 0.11.3¶
-
Insights Engine has smarter Dashboard with Personas
Adding persona (predefined rules like "Productivity", "Routine") to Categories in Insight Config Setting now cater to more powerful analysis. -
Insights Panel and Dashboard Bugfixes
Multiple bugfixes and UI adjustments focused on the Insights panel.
Version 0.11.2¶
-
Insights Engine in ChronoAnalyser
New intelligent engine that can analyse your calendar for past events and give you cool insights. -
Redesigned ChronoAnalyser UI/UX
Chronoanalyser now much more elegant. Check it using theAnalysisbutton in the Full-Calendar Window. -
Multiple Bugfixes in ChronoAnalyser
Make ChronoAnalyser more stable and reliable. Plotting and Insights now work more reliably.
Version 0.11.1¶
-
Category Coloring Engine and Settings UI
A new optional setting, 'Enable Category Coloring,' allows you to color events based on a category defined in the event's title (e.g., 'Work - Project Meeting'). This overrides the default calendar color for fine-grained visual organization. -
Category-Aware Event Modal
The Edit/Create Event modal now features a dedicated 'Category' input field. It provides intelligent autocomplete suggestions based on all your previously used categories, making categorization fast and consistent. -
Redesigned Event Modal UI/UX
The Edit/Create Event modal has been completely redesigned with a polished two-column layout, logical grouping of fields, and a dedicated footer for actions, improving clarity and ergonomics. -
Color Palette Enhancements
Colors no longer default to black, but are now rotated from a carefully chosen Palette. -
"Open Note" Workflow Enhancement
Clicking 'Open Note' in the modal now opens the note in a split view, improving calendar-note navigation.
Version 0.10.13-beta¶
-
Robust Timezone Support
Events from local and remote calendars are now fully timezone-aware, fixing bugs related to DST and travel. -
Strict Timezone Mode for Daily Notes
A new setting allows users to anchor daily note events to a specific timezone, just like regular notes. -
Correctly Parse UTC Events from ICS Feeds
Fixed a critical bug where events specified in UTC from Google Calendar and other sources would appear at the wrong time.
Version 0.10.8¶
- ChronoAnalyser Released
ChronoAnalyser can now analyse your time spending! Check the newAnalysisbutton in the Full-Calendar Window.
Version 0.10.7¶
- Initial Plugin Release
Welcome to the first version of the enhanced Full Calendar!
For a summary of major features, see What's New.