# kud3n013/kalendar architecture

> Architecture diagram of the GitHub repository kud3n013/kalendar, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-15). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/kud3n013/kalendar
- Repository: https://github.com/kud3n013/kalendar

## Overview

Kalendar is a local-first Linux calendar and task planner. The user edits events and tasks in the desktop UI; the app keeps them in its local data model and files, while optional calendar feeds and account sync provide external calendar data. The map includes the documented planning, task, calendar, settings, and sync capabilities. Several modules are only identified by the source index or README, so their internal behavior and unshown call paths are not expanded.

Main entry points: [`src/main.rs`](https://github.com/kud3n013/kalendar/blob/main/src/main.rs) (App orchestration), [`src/model.rs`](https://github.com/kud3n013/kalendar/blob/main/src/model.rs) (Events and tasks), [`src/sync/mod.rs`](https://github.com/kud3n013/kalendar/blob/main/src/sync/mod.rs) (Sync coordination), [`src/ics.rs`](https://github.com/kud3n013/kalendar/blob/main/src/ics.rs) (iCalendar feeds)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_desktop["Desktop experience"]
  node_app["App orchestration<br/>[main.rs]"]
  node_views["Calendar and task views<br/>[views.rs]"]
  node_dialogs["Editing and commands<br/>[dialogs.rs]"]
  node_settings["Settings UI<br/>[settings.rs]"]
  node_icons["Icon glyphs<br/>[icons.rs]"]
  node_fonts["Font setup<br/>[fonts.rs]"]
end

subgraph group_planning["Calendar and planning"]
  node_model["Events and tasks<br/>[model.rs]"]
  node_planner["Frames and planner<br/>[model.rs]"]
  node_timezone["Time zones<br/>[tz.rs]"]
end

subgraph group_storage["Local data and feeds"]
  node_localdata[("Local JSON data<br/>[model.rs]")]
  node_ics["iCalendar feeds<br/>[ics.rs]"]
end

subgraph group_sync["Account synchronization"]
  node_syncengine["Sync coordination<br/>[mod.rs]"]
  node_caldav["CalDAV and Nextcloud<br/>[caldav.rs]"]
  node_google["Google Calendar<br/>[google.rs]"]
  node_graph["Microsoft Graph<br/>[graph.rs]"]
  node_oauth["OAuth sign-in<br/>[oauth.rs]"]
  node_proton["Proton Calendar<br/>[proton.rs]"]
end

subgraph group_security["Credentials and crypto"]
  node_secrets[("Secret storage<br/>[secrets.rs]")]
  node_protonkeys["Proton key handling<br/>[proton_keys.rs]"]
  node_protonsrp["Proton SRP<br/>[proton_srp.rs]"]
end

node_user(("Calendar user"))
node_browser(("Web browser"))
node_calendarservices(("Calendar services"))
node_feedhosts(("Subscribed feed hosts"))

node_user -->|"uses"| node_app
node_app -->|"draws"| node_views
node_app -->|"opens"| node_dialogs
node_app -->|"opens"| node_settings
node_app -->|"updates"| node_model
node_views -->|"reads and edits"| node_model
node_dialogs -->|"edits"| node_model
node_settings -->|"configures"| node_model
node_views -->|"uses"| node_icons
node_settings -->|"uses"| node_icons
node_app -->|"configures"| node_fonts
node_app -->|"loads and saves"| node_localdata
node_model -->|"persists"| node_localdata
node_model -->|"parses calendar data"| node_ics
node_views -->|"presents planning"| node_planner
node_app -->|"uses"| node_timezone
node_app -->|"fetches feeds"| node_ics
node_feedhosts -->|"serves feeds"| node_ics
node_app -->|"coordinates sync"| node_syncengine
node_syncengine -->|"dispatches"| node_caldav
node_syncengine -->|"dispatches"| node_google
node_syncengine -->|"dispatches"| node_graph
node_syncengine -->|"dispatches"| node_proton
node_caldav -->|"parses calendar data"| node_ics
node_graph -->|"uses event format"| node_ics
node_google -->|"uses sign-in"| node_oauth
node_graph -->|"uses sign-in"| node_oauth
node_oauth -->|"opens sign-in"| node_browser
node_oauth -->|"requests tokens"| node_calendarservices
node_caldav -->|"syncs calendars"| node_calendarservices
node_graph -->|"syncs calendars"| node_calendarservices
node_proton -->|"syncs calendars"| node_calendarservices
node_app -->|"stores feed secrets"| node_secrets
node_proton -->|"uses keys"| node_protonkeys
node_proton -->|"proves sign-in"| node_protonsrp
node_protonkeys -->|"uses crypto"| node_protonsrp

click node_app "https://github.com/kud3n013/kalendar/blob/main/src/main.rs"
click node_views "https://github.com/kud3n013/kalendar/blob/main/src/views.rs"
click node_dialogs "https://github.com/kud3n013/kalendar/blob/main/src/dialogs.rs"
click node_settings "https://github.com/kud3n013/kalendar/blob/main/src/settings.rs"
click node_icons "https://github.com/kud3n013/kalendar/blob/main/src/icons.rs"
click node_fonts "https://github.com/kud3n013/kalendar/blob/main/src/fonts.rs"
click node_model "https://github.com/kud3n013/kalendar/blob/main/src/model.rs"
click node_planner "https://github.com/kud3n013/kalendar/blob/main/src/model.rs"
click node_timezone "https://github.com/kud3n013/kalendar/blob/main/src/tz.rs"
click node_localdata "https://github.com/kud3n013/kalendar/blob/main/src/model.rs"
click node_ics "https://github.com/kud3n013/kalendar/blob/main/src/ics.rs"
click node_syncengine "https://github.com/kud3n013/kalendar/blob/main/src/sync/mod.rs"
click node_caldav "https://github.com/kud3n013/kalendar/blob/main/src/sync/caldav.rs"
click node_google "https://github.com/kud3n013/kalendar/blob/main/src/sync/google.rs"
click node_graph "https://github.com/kud3n013/kalendar/blob/main/src/sync/graph.rs"
click node_oauth "https://github.com/kud3n013/kalendar/blob/main/src/sync/oauth.rs"
click node_proton "https://github.com/kud3n013/kalendar/blob/main/src/sync/proton.rs"
click node_secrets "https://github.com/kud3n013/kalendar/blob/main/src/secrets.rs"
click node_protonkeys "https://github.com/kud3n013/kalendar/blob/main/src/sync/proton_keys.rs"
click node_protonsrp "https://github.com/kud3n013/kalendar/blob/main/src/sync/proton_srp.rs"

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_app,node_views,node_dialogs,node_settings,node_icons,node_fonts,node_user,node_browser toneBlue
class node_model,node_planner,node_timezone toneAmber
class node_localdata,node_ics toneMint
class node_syncengine,node_caldav,node_google,node_graph,node_oauth,node_proton toneRose
class node_secrets,node_protonkeys,node_protonsrp,node_calendarservices,node_feedhosts toneIndigo
```

## Components

### Desktop experience

- [App orchestration](https://github.com/kud3n013/kalendar/blob/main/src/main.rs): `src/main.rs`
- [Calendar and task views](https://github.com/kud3n013/kalendar/blob/main/src/views.rs): `src/views.rs`
- [Editing and commands](https://github.com/kud3n013/kalendar/blob/main/src/dialogs.rs): `src/dialogs.rs`
- [Settings UI](https://github.com/kud3n013/kalendar/blob/main/src/settings.rs): `src/settings.rs`
- [Icon glyphs](https://github.com/kud3n013/kalendar/blob/main/src/icons.rs): `src/icons.rs`
- [Font setup](https://github.com/kud3n013/kalendar/blob/main/src/fonts.rs): `src/fonts.rs`

### Calendar and planning

- [Events and tasks](https://github.com/kud3n013/kalendar/blob/main/src/model.rs): `src/model.rs`
- [Frames and planner](https://github.com/kud3n013/kalendar/blob/main/src/model.rs): `src/model.rs`
- [Time zones](https://github.com/kud3n013/kalendar/blob/main/src/tz.rs): `src/tz.rs`

### Local data and feeds

- [Local JSON data](https://github.com/kud3n013/kalendar/blob/main/src/model.rs): `src/model.rs`
- [iCalendar feeds](https://github.com/kud3n013/kalendar/blob/main/src/ics.rs): `src/ics.rs`

### Account synchronization

- [Sync coordination](https://github.com/kud3n013/kalendar/blob/main/src/sync/mod.rs): `src/sync/mod.rs`
- [CalDAV and Nextcloud](https://github.com/kud3n013/kalendar/blob/main/src/sync/caldav.rs): `src/sync/caldav.rs`
- [Google Calendar](https://github.com/kud3n013/kalendar/blob/main/src/sync/google.rs): `src/sync/google.rs`
- [Microsoft Graph](https://github.com/kud3n013/kalendar/blob/main/src/sync/graph.rs): `src/sync/graph.rs`
- [OAuth sign-in](https://github.com/kud3n013/kalendar/blob/main/src/sync/oauth.rs): `src/sync/oauth.rs`
- [Proton Calendar](https://github.com/kud3n013/kalendar/blob/main/src/sync/proton.rs): `src/sync/proton.rs`

### Credentials and crypto

- [Secret storage](https://github.com/kud3n013/kalendar/blob/main/src/secrets.rs): `src/secrets.rs`
- [Proton key handling](https://github.com/kud3n013/kalendar/blob/main/src/sync/proton_keys.rs): `src/sync/proton_keys.rs`
- [Proton SRP](https://github.com/kud3n013/kalendar/blob/main/src/sync/proton_srp.rs): `src/sync/proton_srp.rs`

### Other components

- **Calendar user**
- **Web browser**
- **Calendar services**
- **Subscribed feed hosts**

## Connections

- Calendar user → App orchestration: uses (evidence: `README.md`)
- App orchestration → Calendar and task views: draws (evidence: `src/main.rs`)
- App orchestration → Editing and commands: opens (evidence: `src/main.rs`)
- App orchestration → Settings UI: opens (evidence: `src/main.rs`)
- App orchestration → Events and tasks: updates (evidence: `src/main.rs`)
- Calendar and task views → Events and tasks: reads and edits (evidence: `src/views.rs`)
- Editing and commands → Events and tasks: edits (evidence: `src/dialogs.rs`)
- Settings UI → Events and tasks: configures (evidence: `src/settings.rs`)
- Calendar and task views → Icon glyphs: uses (evidence: `src/views.rs`)
- Settings UI → Icon glyphs: uses (evidence: `src/settings.rs`)
- App orchestration → Font setup: configures (evidence: `src/main.rs`)
- App orchestration → Local JSON data: loads and saves (evidence: `README.md`)
- Events and tasks → Local JSON data: persists (evidence: `README.md`)
- Events and tasks → iCalendar feeds: parses calendar data (evidence: `src/model.rs`)
- Calendar and task views → Frames and planner: presents planning (evidence: `README.md`)
- App orchestration → Time zones: uses (evidence: `src/main.rs`)
- App orchestration → iCalendar feeds: fetches feeds (evidence: `src/main.rs`)
- Subscribed feed hosts → iCalendar feeds: serves feeds (evidence: `README.md`)
- App orchestration → Sync coordination: coordinates sync (evidence: `src/main.rs`)
- Sync coordination → CalDAV and Nextcloud: dispatches (evidence: `src/sync/mod.rs`)
- Sync coordination → Google Calendar: dispatches (evidence: `src/sync/mod.rs`)
- Sync coordination → Microsoft Graph: dispatches (evidence: `src/sync/mod.rs`)
- Sync coordination → Proton Calendar: dispatches (evidence: `src/sync/mod.rs`)
- CalDAV and Nextcloud → iCalendar feeds: parses calendar data (evidence: `src/sync/caldav.rs`)
- Microsoft Graph → iCalendar feeds: uses event format (evidence: `src/sync/graph.rs`)
- Google Calendar → OAuth sign-in: uses sign-in (evidence: `src/sync/google.rs`)
- Microsoft Graph → OAuth sign-in: uses sign-in (evidence: `src/sync/graph.rs`)
- OAuth sign-in → Web browser: opens sign-in (evidence: `src/sync/oauth.rs`)
- OAuth sign-in → Calendar services: requests tokens (evidence: `src/sync/oauth.rs`)
- CalDAV and Nextcloud → Calendar services: syncs calendars (evidence: `src/sync/caldav.rs`)
- Microsoft Graph → Calendar services: syncs calendars (evidence: `src/sync/graph.rs`)
- Proton Calendar → Calendar services: syncs calendars (evidence: `src/sync/proton.rs`)
- App orchestration → Secret storage: stores feed secrets (evidence: `src/main.rs`)
- Proton Calendar → Proton key handling: uses keys (evidence: `src/sync/proton.rs`)
- Proton Calendar → Proton SRP: proves sign-in (evidence: `src/sync/proton.rs`)
- Proton key handling → Proton SRP: uses crypto (evidence: `src/sync/proton_keys.rs`)
