# obsidian-full-calendar-remastered/plugin-full-calendar architecture

> Architecture diagram of the GitHub repository obsidian-full-calendar-remastered/plugin-full-calendar, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/obsidian-full-calendar-remastered/plugin-full-calendar
- Repository: https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar

## Overview

Full Calendar (Remastered) is an Obsidian plugin for keeping events, tasks, and notes together in a calendar. The main workflow is plugin initialization, source registration and synchronization, centralized event storage and time-aware filtering, then calendar display and interaction. Separate branches cover the documented calendar/task integrations, Chrono Analyser insights, and supporting features such as recurring events and notifications. Source excerpts are partial; documented capabilities are included, while uncertain internal wiring is omitted.

Main entry points: [`src/core/EventCache.ts`](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/core/EventCache.ts) (Event cache), [`src/main.ts`](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/main.ts) (Plugin lifecycle), [`src/providers`](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/tree/main/src/providers) (Calendar providers), [`src/chrono_analyser/AnalysisController.ts`](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/chrono_analyser/AnalysisController.ts) (Analysis controller)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Plugin runtime"]
  node_main["Plugin lifecycle<br/>[main.ts]"]
  node_state["Shared plugin state<br/>[PluginState.ts]"]
  node_settings["Settings<br/>[settings.ts]"]
  node_public_api["Plugin API<br/>[PublicAPI.ts]"]
end

subgraph group_calendar["Calendar core"]
  node_cache["Event cache<br/>[EventCache.ts]"]
  node_store[("Event store<br/>[EventStore.ts]")]
  node_filter["Filter and sort"]
  node_time["Time engine<br/>[TimeEngine.ts]"]
  node_calendar_ui["Calendar view<br/>[view.ts]"]
  node_interactions["Event interactions"]
end

subgraph group_sources["Calendar sources"]
  node_registry["Provider registry"]
  node_providers["Calendar providers"]
  node_local_sources["Vault sources"]
  node_remote_sources["Remote sources"]
  node_task_integrations["Task integrations"]
end

subgraph group_features["Product features"]
  node_recurring["Recurring events"]
  node_notifications["Reminders"]
  node_activitywatch["ActivityWatch sync<br/>[sync.ts]"]
  node_availability["Availability sharing"]
  node_workspace["Workspaces"]
  node_nlp["Natural language commands<br/>[engine.ts]"]
end

subgraph group_analysis["Chrono Analyser"]
  node_chrono_controller["Analysis controller"]
  node_chrono_data["Analysis data manager<br/>[DataManager.ts]"]
  node_insights["Insights engine<br/>[InsightsEngine.ts]"]
  node_chrono_ui["Analysis UI<br/>[UIService.ts]"]
  node_chrono_renderer["Insights renderer"]
end

node_user(("Obsidian user"))
node_obsidian["Obsidian host"]

node_user -->|"uses"| node_obsidian
node_obsidian -->|"loads plugin"| node_main
node_main -->|"initializes"| node_state
node_main -->|"configures sources"| node_registry
node_main -->|"creates"| node_cache
node_main -->|"loads settings"| node_settings
node_registry -.->|"selects providers"| node_providers
node_providers -->|"reads vault events"| node_local_sources
node_providers -->|"syncs calendars"| node_remote_sources
node_providers -->|"syncs tasks"| node_task_integrations
node_cache -->|"fetches and mutates"| node_providers
node_cache -->|"stores events"| node_store
node_cache -->|"queries events"| node_filter
node_cache -->|"builds time state"| node_time
node_calendar_ui -.->|"displays calendar data"| node_cache
node_user -->|"views calendar"| node_calendar_ui
node_calendar_ui -->|"handles event actions"| node_interactions
node_interactions -->|"edits events"| node_cache
node_cache -->|"delegates recurring logic"| node_recurring
node_main -->|"initializes reminders"| node_notifications
node_user -->|"connects integration"| node_activitywatch
node_user -.->|"shares availability"| node_availability
node_user -.->|"switches workspaces"| node_workspace
node_user -->|"issues commands"| node_nlp
node_main -->|"registers command"| node_nlp
node_user -.->|"runs analysis"| node_chrono_controller
node_chrono_controller -->|"loads records"| node_chrono_data
node_chrono_controller -->|"generates insights"| node_insights
node_chrono_controller -->|"controls analysis UI"| node_chrono_ui
node_chrono_ui -->|"renders insights"| node_chrono_renderer
node_user -->|"requests plugin access"| node_public_api

click node_main "https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/main.ts"
click node_state "https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/core/PluginState.ts"
click node_settings "https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/types/settings.ts"
click node_registry "https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/providers/ProviderRegistry.ts"
click node_providers "https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/tree/main/src/providers"
click node_local_sources "https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/tree/main/src/providers"
click node_remote_sources "https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/tree/main/src/providers"
click node_task_integrations "https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/tree/main/src/providers"
click node_cache "https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/core/EventCache.ts"
click node_store "https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/core/EventStore.ts"
click node_filter "https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/core/EventFilterSortEngine.ts"
click node_time "https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/core/TimeEngine.ts"
click node_calendar_ui "https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/ui/view.ts"
click node_interactions "https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/ui/calendar/ViewEventInteractionHandler.ts"
click node_recurring "https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/features/recur_events/RecurringEventManager.ts"
click node_notifications "https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/features/notifications/NotificationManager.ts"
click node_activitywatch "https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/features/activitywatch/sync.ts"
click node_availability "https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/features/availability/AvailabilityService.ts"
click node_workspace "https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/features/workspaces/WorkspaceManager.ts"
click node_nlp "https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/features/nlp/engine.ts"
click node_chrono_controller "https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/chrono_analyser/AnalysisController.ts"
click node_chrono_data "https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/chrono_analyser/data/DataManager.ts"
click node_insights "https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/chrono_analyser/data/InsightsEngine.ts"
click node_chrono_ui "https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/chrono_analyser/ui/UIService.ts"
click node_chrono_renderer "https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/chrono_analyser/ui/components/InsightsRenderer.ts"
click node_public_api "https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/api/PublicAPI.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_state,node_settings,node_public_api,node_user toneBlue
class node_cache,node_store,node_filter,node_time,node_calendar_ui,node_interactions toneAmber
class node_registry,node_providers,node_local_sources,node_remote_sources,node_task_integrations toneMint
class node_recurring,node_notifications,node_activitywatch,node_availability,node_workspace,node_nlp toneRose
class node_chrono_controller,node_chrono_data,node_insights,node_chrono_ui,node_chrono_renderer,node_obsidian toneIndigo
```

## Components

### Plugin runtime

- [Plugin lifecycle](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/main.ts): `src/main.ts`
- [Shared plugin state](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/core/PluginState.ts): `src/core/PluginState.ts`
- [Settings](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/types/settings.ts): `src/types/settings.ts`
- [Plugin API](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/api/PublicAPI.ts): `src/api/PublicAPI.ts`

### Calendar core

- [Event cache](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/core/EventCache.ts): `src/core/EventCache.ts`
- [Event store](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/core/EventStore.ts): `src/core/EventStore.ts`
- [Filter and sort](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/core/EventFilterSortEngine.ts): `src/core/EventFilterSortEngine.ts`
- [Time engine](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/core/TimeEngine.ts): `src/core/TimeEngine.ts`
- [Calendar view](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/ui/view.ts): `src/ui/view.ts`
- [Event interactions](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/ui/calendar/ViewEventInteractionHandler.ts): `src/ui/calendar/ViewEventInteractionHandler.ts`

### Calendar sources

- [Provider registry](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/providers/ProviderRegistry.ts): `src/providers/ProviderRegistry.ts`
- [Calendar providers](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/tree/main/src/providers): `src/providers`
- [Vault sources](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/tree/main/src/providers): `src/providers`
- [Remote sources](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/tree/main/src/providers): `src/providers`
- [Task integrations](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/tree/main/src/providers): `src/providers`

### Product features

- [Recurring events](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/features/recur_events/RecurringEventManager.ts): `src/features/recur_events/RecurringEventManager.ts`
- [Reminders](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/features/notifications/NotificationManager.ts): `src/features/notifications/NotificationManager.ts`
- [ActivityWatch sync](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/features/activitywatch/sync.ts): `src/features/activitywatch/sync.ts`
- [Availability sharing](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/features/availability/AvailabilityService.ts): `src/features/availability/AvailabilityService.ts`
- [Workspaces](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/features/workspaces/WorkspaceManager.ts): `src/features/workspaces/WorkspaceManager.ts`
- [Natural language commands](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/features/nlp/engine.ts): `src/features/nlp/engine.ts`

### Chrono Analyser

- [Analysis controller](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/chrono_analyser/AnalysisController.ts): `src/chrono_analyser/AnalysisController.ts`
- [Analysis data manager](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/chrono_analyser/data/DataManager.ts): `src/chrono_analyser/data/DataManager.ts`
- [Insights engine](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/chrono_analyser/data/InsightsEngine.ts): `src/chrono_analyser/data/InsightsEngine.ts`
- [Analysis UI](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/chrono_analyser/ui/UIService.ts): `src/chrono_analyser/ui/UIService.ts`
- [Insights renderer](https://github.com/obsidian-full-calendar-remastered/plugin-full-calendar/blob/main/src/chrono_analyser/ui/components/InsightsRenderer.ts): `src/chrono_analyser/ui/components/InsightsRenderer.ts`

### Other components

- **Obsidian user**
- **Obsidian host**

## Connections

- Obsidian user → Obsidian host: uses (evidence: `README.md`)
- Obsidian host → Plugin lifecycle: loads plugin (evidence: `src/main.ts`)
- Plugin lifecycle → Shared plugin state: initializes (evidence: `src/main.ts`)
- Plugin lifecycle → Provider registry: configures sources (evidence: `src/main.ts`)
- Plugin lifecycle → Event cache: creates (evidence: `src/main.ts`)
- Plugin lifecycle → Settings: loads settings (evidence: `src/main.ts`)
- Provider registry → Calendar providers: selects providers
- Calendar providers → Vault sources: reads vault events (evidence: `README.md`)
- Calendar providers → Remote sources: syncs calendars (evidence: `README.md`)
- Calendar providers → Task integrations: syncs tasks (evidence: `README.md`)
- Event cache → Calendar providers: fetches and mutates (evidence: `src/core/EventCache.ts`)
- Event cache → Event store: stores events (evidence: `src/core/EventCache.ts`)
- Event cache → Filter and sort: queries events (evidence: `src/core/EventCache.ts`)
- Event cache → Time engine: builds time state (evidence: `src/core/EventCache.ts`)
- Calendar view → Event cache: displays calendar data
- Obsidian user → Calendar view: views calendar (evidence: `README.md`)
- Calendar view → Event interactions: handles event actions (evidence: `src/ui/calendar/ViewEventInteractionHandler.ts`)
- Event interactions → Event cache: edits events (evidence: `src/ui/calendar/ViewEventInteractionHandler.ts`)
- Event cache → Recurring events: delegates recurring logic (evidence: `src/core/EventCache.ts`)
- Plugin lifecycle → Reminders: initializes reminders (evidence: `src/main.ts`)
- Obsidian user → ActivityWatch sync: connects integration (evidence: `README.md`)
- Obsidian user → Availability sharing: shares availability
- Obsidian user → Workspaces: switches workspaces
- Obsidian user → Natural language commands: issues commands
- Plugin lifecycle → Natural language commands: registers command (evidence: `src/main.ts`)
- Obsidian user → Analysis controller: runs analysis
- Analysis controller → Analysis data manager: loads records (evidence: `src/chrono_analyser/AnalysisController.ts`)
- Analysis controller → Insights engine: generates insights (evidence: `src/chrono_analyser/AnalysisController.ts`)
- Analysis controller → Analysis UI: controls analysis UI (evidence: `src/chrono_analyser/AnalysisController.ts`)
- Analysis UI → Insights renderer: renders insights (evidence: `src/chrono_analyser/ui/UIService.ts`)
- Obsidian user → Plugin API: requests plugin access (evidence: `README.md`)
