# sjasonp/historylib architecture

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

- Interactive diagram: https://gitdiagram.com/sjasonp/historylib
- Repository: https://github.com/sjasonp/historylib

## Overview

HistoryLib is a SwiftUI app for importing browser-history data, storing and managing records, then browsing, summarizing, and exporting them. The central ContentView coordinates user actions and derived views around a SwiftData-backed history store. Import and export support Safari, Chrome Takeout, and HistoryLib archives; archive encryption, iCloud sync, and favicon fetching extend the core workflow. The README documents several capabilities whose implementation was not sampled, so those subsystem links are shown only where supported by the tree or excerpts.

Main entry points: [`HistoryLib/App/ContentView.swift`](https://github.com/sjasonp/historylib/blob/main/HistoryLib/App/ContentView.swift) (App Coordinator), [`HistoryLib/Models/Item.swift`](https://github.com/sjasonp/historylib/blob/main/HistoryLib/Models/Item.swift) (SwiftData Store), [`HistoryLib/Services/Import/HistoryImporter.swift`](https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Import/HistoryImporter.swift) (Import Coordinator), [`HistoryLib/Services/Export/HistoryExporter.swift`](https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Export/HistoryExporter.swift) (Export Coordinator)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["App and Views"]
  node_appentry["App Entry"]
  node_content["App Coordinator<br/>[ContentView.swift]"]
  node_composition["View Composition"]
  node_actions["User Actions"]
  node_library["History Library"]
  node_search["History Search"]
  node_manage["Data Management<br/>[ManageView.swift]"]
  node_summary["Summary Views"]
end

subgraph group_records["History Records"]
  node_item["History Record<br/>[Item.swift]"]
  node_store[("SwiftData Store<br/>[Item.swift]")]
  node_snapshot["Summary Snapshot"]
end

subgraph group_transfer["Import and Export"]
  node_importer["Import Coordinator"]
  node_safariimport["Safari Import"]
  node_chromeimport["Chrome Import"]
  node_takeout["Takeout Parser"]
  node_hlimport["Archive Import"]
  node_exporter["Export Coordinator"]
  node_safaexport["Safari Export"]
  node_hlexport["HistoryLib Export"]
  node_encrypted["Archive Encryption"]
end

subgraph group_services["Supporting Services"]
  node_dedup["Duplicate Cleaner"]
  node_sync["Cloud Sync"]
  node_favicon[("Favicon Cache<br/>[FaviconStore.swift]")]
  node_cache["Cache Management"]
end

node_user(("User"))
node_browser(("System Browser"))
node_icloud(("iCloud"))
node_web(("Website Network"))

node_user -->|"launches"| node_appentry
node_appentry -->|"shows"| node_content
node_content -->|"composes"| node_composition
node_content -->|"handles actions"| node_actions
node_content -->|"shows library"| node_library
node_content -->|"loads matches"| node_search
node_content -->|"refreshes summary"| node_summary
node_content -->|"starts import"| node_importer
node_content -->|"prepares export"| node_exporter
node_content -->|"schedules cleanup"| node_dedup
node_content -.->|"checks sync"| node_sync
node_content -->|"fetches and saves"| node_store
node_library -->|"browses records"| node_store
node_search -->|"scans records"| node_store
node_summary -->|"computes statistics"| node_store
node_summary -->|"persists snapshot"| node_snapshot
node_actions -->|"deletes records"| node_store
node_actions -->|"opens records"| node_browser
node_importer -->|"dispatches"| node_safariimport
node_importer -->|"dispatches"| node_chromeimport
node_importer -->|"dispatches"| node_hlimport
node_chromeimport -->|"parses Takeout"| node_takeout
node_importer -->|"inserts records"| node_store
node_exporter -->|"dispatches"| node_safaexport
node_exporter -->|"dispatches"| node_hlexport
node_exporter -->|"reads records"| node_store
node_hlexport -->|"encrypts archive"| node_encrypted
node_hlimport -->|"decrypts archive"| node_encrypted
node_dedup -->|"deduplicates records"| node_store
node_sync -.->|"syncs settings"| node_icloud
node_sync -.->|"syncs records"| node_store
node_library -.->|"shows site icons"| node_favicon
node_favicon -.->|"fetches icons"| node_web
node_manage -->|"measures and clears"| node_cache
node_manage -->|"requests management"| node_actions

click node_appentry "https://github.com/sjasonp/historylib/blob/main/HistoryLib/App/HistoryLibApp.swift"
click node_content "https://github.com/sjasonp/historylib/blob/main/HistoryLib/App/ContentView.swift"
click node_composition "https://github.com/sjasonp/historylib/blob/main/HistoryLib/Shared/ContentView_ViewComposition.swift"
click node_actions "https://github.com/sjasonp/historylib/blob/main/HistoryLib/Shared/ContentView_Actions.swift"
click node_library "https://github.com/sjasonp/historylib/blob/main/HistoryLib/Features/Library/HistoryListView.swift"
click node_search "https://github.com/sjasonp/historylib/blob/main/HistoryLib/Features/Library/ContentView_Search.swift"
click node_manage "https://github.com/sjasonp/historylib/blob/main/HistoryLib/Features/Manage/ManageView.swift"
click node_summary "https://github.com/sjasonp/historylib/blob/main/HistoryLib/Features/Summary/ContentView_Summary.swift"
click node_item "https://github.com/sjasonp/historylib/blob/main/HistoryLib/Models/Item.swift"
click node_store "https://github.com/sjasonp/historylib/blob/main/HistoryLib/Models/Item.swift"
click node_importer "https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Import/HistoryImporter.swift"
click node_safariimport "https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Import/SafariHistoryImporter.swift"
click node_chromeimport "https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Import/ChromeHistoryImporter.swift"
click node_takeout "https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Import/ChromeTakeoutStreamParser.swift"
click node_hlimport "https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Import/HistoryLibArchiveImporter.swift"
click node_exporter "https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Export/HistoryExporter.swift"
click node_safaexport "https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Export/HistoryExporter_Safari.swift"
click node_hlexport "https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Export/HistoryExporter_HistoryLib.swift"
click node_encrypted "https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Archive/HistoryLibEncryptedArchive.swift"
click node_dedup "https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Sync/HistoryDuplicateCleaner.swift"
click node_sync "https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Sync/AppSettingsCloudSync.swift"
click node_favicon "https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Favicon/FaviconStore.swift"
click node_cache "https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Cache/ClearCacheStorageUsage.swift"
click node_snapshot "https://github.com/sjasonp/historylib/blob/main/HistoryLib/Features/Summary/SummarySnapshot.swift"

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_appentry,node_content,node_composition,node_actions,node_library,node_search,node_manage,node_summary,node_user,node_browser toneBlue
class node_item,node_store,node_snapshot toneAmber
class node_importer,node_safariimport,node_chromeimport,node_takeout,node_hlimport,node_exporter,node_safaexport,node_hlexport,node_encrypted toneMint
class node_dedup,node_sync,node_favicon,node_cache toneRose
class node_icloud,node_web toneIndigo
```

## Components

### App and Views

- [App Entry](https://github.com/sjasonp/historylib/blob/main/HistoryLib/App/HistoryLibApp.swift): `HistoryLib/App/HistoryLibApp.swift`
- [App Coordinator](https://github.com/sjasonp/historylib/blob/main/HistoryLib/App/ContentView.swift): `HistoryLib/App/ContentView.swift`
- [View Composition](https://github.com/sjasonp/historylib/blob/main/HistoryLib/Shared/ContentView_ViewComposition.swift): `HistoryLib/Shared/ContentView_ViewComposition.swift`
- [User Actions](https://github.com/sjasonp/historylib/blob/main/HistoryLib/Shared/ContentView_Actions.swift): `HistoryLib/Shared/ContentView_Actions.swift`
- [History Library](https://github.com/sjasonp/historylib/blob/main/HistoryLib/Features/Library/HistoryListView.swift): `HistoryLib/Features/Library/HistoryListView.swift`
- [History Search](https://github.com/sjasonp/historylib/blob/main/HistoryLib/Features/Library/ContentView_Search.swift): `HistoryLib/Features/Library/ContentView_Search.swift`
- [Data Management](https://github.com/sjasonp/historylib/blob/main/HistoryLib/Features/Manage/ManageView.swift): `HistoryLib/Features/Manage/ManageView.swift`
- [Summary Views](https://github.com/sjasonp/historylib/blob/main/HistoryLib/Features/Summary/ContentView_Summary.swift): `HistoryLib/Features/Summary/ContentView_Summary.swift`

### History Records

- [History Record](https://github.com/sjasonp/historylib/blob/main/HistoryLib/Models/Item.swift): `HistoryLib/Models/Item.swift`
- [SwiftData Store](https://github.com/sjasonp/historylib/blob/main/HistoryLib/Models/Item.swift): `HistoryLib/Models/Item.swift`
- [Summary Snapshot](https://github.com/sjasonp/historylib/blob/main/HistoryLib/Features/Summary/SummarySnapshot.swift): `HistoryLib/Features/Summary/SummarySnapshot.swift`

### Import and Export

- [Import Coordinator](https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Import/HistoryImporter.swift): `HistoryLib/Services/Import/HistoryImporter.swift`
- [Safari Import](https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Import/SafariHistoryImporter.swift): `HistoryLib/Services/Import/SafariHistoryImporter.swift`
- [Chrome Import](https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Import/ChromeHistoryImporter.swift): `HistoryLib/Services/Import/ChromeHistoryImporter.swift`
- [Takeout Parser](https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Import/ChromeTakeoutStreamParser.swift): `HistoryLib/Services/Import/ChromeTakeoutStreamParser.swift`
- [Archive Import](https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Import/HistoryLibArchiveImporter.swift): `HistoryLib/Services/Import/HistoryLibArchiveImporter.swift`
- [Export Coordinator](https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Export/HistoryExporter.swift): `HistoryLib/Services/Export/HistoryExporter.swift`
- [Safari Export](https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Export/HistoryExporter_Safari.swift): `HistoryLib/Services/Export/HistoryExporter_Safari.swift`
- [HistoryLib Export](https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Export/HistoryExporter_HistoryLib.swift): `HistoryLib/Services/Export/HistoryExporter_HistoryLib.swift`
- [Archive Encryption](https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Archive/HistoryLibEncryptedArchive.swift): `HistoryLib/Services/Archive/HistoryLibEncryptedArchive.swift`

### Supporting Services

- [Duplicate Cleaner](https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Sync/HistoryDuplicateCleaner.swift): `HistoryLib/Services/Sync/HistoryDuplicateCleaner.swift`
- [Cloud Sync](https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Sync/AppSettingsCloudSync.swift): `HistoryLib/Services/Sync/AppSettingsCloudSync.swift`
- [Favicon Cache](https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Favicon/FaviconStore.swift): `HistoryLib/Services/Favicon/FaviconStore.swift`
- [Cache Management](https://github.com/sjasonp/historylib/blob/main/HistoryLib/Services/Cache/ClearCacheStorageUsage.swift): `HistoryLib/Services/Cache/ClearCacheStorageUsage.swift`

### Other components

- **User**
- **System Browser**
- **iCloud**
- **Website Network**

## Connections

- User → App Entry: launches
- App Entry → App Coordinator: shows
- App Coordinator → View Composition: composes
- App Coordinator → User Actions: handles actions
- App Coordinator → History Library: shows library
- App Coordinator → History Search: loads matches
- App Coordinator → Summary Views: refreshes summary
- App Coordinator → Import Coordinator: starts import
- App Coordinator → Export Coordinator: prepares export
- App Coordinator → Duplicate Cleaner: schedules cleanup
- App Coordinator → Cloud Sync: checks sync
- App Coordinator → SwiftData Store: fetches and saves
- History Library → SwiftData Store: browses records
- History Search → SwiftData Store: scans records
- Summary Views → SwiftData Store: computes statistics
- Summary Views → Summary Snapshot: persists snapshot
- User Actions → SwiftData Store: deletes records
- User Actions → System Browser: opens records
- Import Coordinator → Safari Import: dispatches
- Import Coordinator → Chrome Import: dispatches
- Import Coordinator → Archive Import: dispatches
- Chrome Import → Takeout Parser: parses Takeout
- Import Coordinator → SwiftData Store: inserts records
- Export Coordinator → Safari Export: dispatches
- Export Coordinator → HistoryLib Export: dispatches
- Export Coordinator → SwiftData Store: reads records
- HistoryLib Export → Archive Encryption: encrypts archive
- Archive Import → Archive Encryption: decrypts archive
- Duplicate Cleaner → SwiftData Store: deduplicates records
- Cloud Sync → iCloud: syncs settings
- Cloud Sync → SwiftData Store: syncs records
- History Library → Favicon Cache: shows site icons
- Favicon Cache → Website Network: fetches icons
- Data Management → Cache Management: measures and clears
- Data Management → User Actions: requests management
