# an0319/obsidian-plugin architecture

> Architecture diagram of the GitHub repository an0319/obsidian-plugin, 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/an0319/obsidian-plugin
- Repository: https://github.com/an0319/obsidian-plugin

## Overview

Smart Notes Organizer is an Obsidian plugin for local-first Markdown filing. Users trigger an individual-note or Inbox run, or let vault events queue eligible notes; the organizer analyzes each note through the selected classification engine, then moves it into the suggested folder and records the action. Its major capabilities include rule, TF-IDF, Ollama, and imported shared-config classification; learning folder profiles from existing notes; custom-rule and settings workflows; and batch reports with undo. The README documents the engine fallback behavior; excerpts do not show all dispatcher wiring, so uncertain calls are omitted.

Main entry points: [`src/scheduler/dispatcher.ts`](https://github.com/an0319/obsidian-plugin/blob/main/src/scheduler/dispatcher.ts) (Engine dispatcher), [`src/scheduler/organizerService.ts`](https://github.com/an0319/obsidian-plugin/blob/main/src/scheduler/organizerService.ts) (Organizer service), [`src/settings/settingsTab.ts`](https://github.com/an0319/obsidian-plugin/blob/main/src/settings/settingsTab.ts) (Settings panel), [`src/main.ts`](https://github.com/an0319/obsidian-plugin/blob/main/src/main.ts) (Plugin entry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Organizing runtime"]
  node_plugin["Plugin entry<br/>[main.ts]"]
  node_organizer["Organizer service"]
  node_dispatcher["Engine dispatcher<br/>[dispatcher.ts]"]
end

subgraph group_classification["Classification engines"]
  node_rules["Rule engine<br/>[ruleEngine.ts]"]
  node_tfidf["TF-IDF engine<br/>[tfidfEngine.ts]"]
  node_tfidf_math["TF-IDF math<br/>[tfidf.ts]"]
  node_tokenizer["Tokenizer<br/>[tokenizer.ts]"]
  node_ollama_engine["Ollama engine<br/>[ollamaEngine.ts]"]
  node_shared["Shared-config engine"]
end

subgraph group_configuration["Configuration and learning"]
  node_settings["Settings panel<br/>[settingsTab.ts]"]
  node_settings_data["Settings model<br/>[settings.ts]"]
  node_custom_rules["Custom rules loader"]
  node_folder_mapping["Seed folder mapping"]
  node_user_folders["User folders<br/>[userFolders.ts]"]
end

subgraph group_results["Filing and review"]
  node_file_organizer["File organizer<br/>[fileOrganizer.ts]"]
  node_activity_log[("Activity log<br/>[fileOrganizer.ts]")]
  node_batch_report["Batch report and undo"]
end

node_user(("Obsidian user"))
node_vault[("Obsidian Vault")]
node_ollama(("Ollama service"))

node_user -->|"runs commands"| node_plugin
node_vault -->|"sends file events"| node_plugin
node_plugin -->|"organizes notes"| node_organizer
node_plugin -->|"configures engines"| node_dispatcher
node_organizer -->|"requests analysis"| node_dispatcher
node_dispatcher -->|"dispatches analysis"| node_rules
node_dispatcher -->|"dispatches analysis"| node_tfidf
node_dispatcher -->|"dispatches analysis"| node_ollama_engine
node_dispatcher -->|"dispatches analysis"| node_shared
node_tfidf -->|"computes vectors"| node_tfidf_math
node_tfidf_math -->|"tokenizes text"| node_tokenizer
node_shared -->|"computes similarity"| node_tfidf_math
node_ollama_engine -.->|"requests classification"| node_ollama
node_organizer -->|"reads note snapshots"| node_vault
node_organizer -->|"moves and logs"| node_file_organizer
node_file_organizer -->|"creates folders and moves"| node_vault
node_file_organizer -->|"writes activity"| node_activity_log
node_plugin -->|"opens settings"| node_settings
node_settings -->|"updates preferences"| node_settings_data
node_settings -->|"imports rule files"| node_custom_rules
node_settings -->|"prepares seed mappings"| node_folder_mapping
node_settings -->|"lists existing folders"| node_user_folders
node_organizer -->|"presents batch results"| node_batch_report
node_batch_report -->|"restores moved files"| node_vault
node_batch_report -->|"records undo"| node_activity_log

click node_plugin "https://github.com/an0319/obsidian-plugin/blob/main/src/main.ts"
click node_organizer "https://github.com/an0319/obsidian-plugin/blob/main/src/scheduler/organizerService.ts"
click node_dispatcher "https://github.com/an0319/obsidian-plugin/blob/main/src/scheduler/dispatcher.ts"
click node_rules "https://github.com/an0319/obsidian-plugin/blob/main/src/engines/ruleEngine.ts"
click node_tfidf "https://github.com/an0319/obsidian-plugin/blob/main/src/engines/tfidf/tfidfEngine.ts"
click node_tfidf_math "https://github.com/an0319/obsidian-plugin/blob/main/src/engines/tfidf/tfidf.ts"
click node_tokenizer "https://github.com/an0319/obsidian-plugin/blob/main/src/engines/tfidf/tokenizer.ts"
click node_ollama_engine "https://github.com/an0319/obsidian-plugin/blob/main/src/engines/ollamaEngine.ts"
click node_shared "https://github.com/an0319/obsidian-plugin/blob/main/src/engines/sharedModelEngine.ts"
click node_settings "https://github.com/an0319/obsidian-plugin/blob/main/src/settings/settingsTab.ts"
click node_settings_data "https://github.com/an0319/obsidian-plugin/blob/main/src/settings/settings.ts"
click node_custom_rules "https://github.com/an0319/obsidian-plugin/blob/main/src/services/customRulesLoader.ts"
click node_folder_mapping "https://github.com/an0319/obsidian-plugin/blob/main/src/services/seedFolderMapper.ts"
click node_user_folders "https://github.com/an0319/obsidian-plugin/blob/main/src/services/userFolders.ts"
click node_file_organizer "https://github.com/an0319/obsidian-plugin/blob/main/src/services/fileOrganizer.ts"
click node_activity_log "https://github.com/an0319/obsidian-plugin/blob/main/src/services/fileOrganizer.ts"
click node_batch_report "https://github.com/an0319/obsidian-plugin/blob/main/src/ui/batchReportModal.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_plugin,node_organizer,node_dispatcher,node_user toneBlue
class node_rules,node_tfidf,node_tfidf_math,node_tokenizer,node_ollama_engine,node_shared,node_vault toneAmber
class node_settings,node_settings_data,node_custom_rules,node_folder_mapping,node_user_folders toneMint
class node_file_organizer,node_activity_log,node_batch_report toneRose
class node_ollama toneIndigo
```

## Components

### Organizing runtime

- [Plugin entry](https://github.com/an0319/obsidian-plugin/blob/main/src/main.ts): `src/main.ts`
- [Organizer service](https://github.com/an0319/obsidian-plugin/blob/main/src/scheduler/organizerService.ts): `src/scheduler/organizerService.ts`
- [Engine dispatcher](https://github.com/an0319/obsidian-plugin/blob/main/src/scheduler/dispatcher.ts): `src/scheduler/dispatcher.ts`

### Classification engines

- [Rule engine](https://github.com/an0319/obsidian-plugin/blob/main/src/engines/ruleEngine.ts): `src/engines/ruleEngine.ts`
- [TF-IDF engine](https://github.com/an0319/obsidian-plugin/blob/main/src/engines/tfidf/tfidfEngine.ts): `src/engines/tfidf/tfidfEngine.ts`
- [TF-IDF math](https://github.com/an0319/obsidian-plugin/blob/main/src/engines/tfidf/tfidf.ts): `src/engines/tfidf/tfidf.ts`
- [Tokenizer](https://github.com/an0319/obsidian-plugin/blob/main/src/engines/tfidf/tokenizer.ts): `src/engines/tfidf/tokenizer.ts`
- [Ollama engine](https://github.com/an0319/obsidian-plugin/blob/main/src/engines/ollamaEngine.ts): `src/engines/ollamaEngine.ts`
- [Shared-config engine](https://github.com/an0319/obsidian-plugin/blob/main/src/engines/sharedModelEngine.ts): `src/engines/sharedModelEngine.ts`

### Configuration and learning

- [Settings panel](https://github.com/an0319/obsidian-plugin/blob/main/src/settings/settingsTab.ts): `src/settings/settingsTab.ts`
- [Settings model](https://github.com/an0319/obsidian-plugin/blob/main/src/settings/settings.ts): `src/settings/settings.ts`
- [Custom rules loader](https://github.com/an0319/obsidian-plugin/blob/main/src/services/customRulesLoader.ts): `src/services/customRulesLoader.ts`
- [Seed folder mapping](https://github.com/an0319/obsidian-plugin/blob/main/src/services/seedFolderMapper.ts): `src/services/seedFolderMapper.ts`
- [User folders](https://github.com/an0319/obsidian-plugin/blob/main/src/services/userFolders.ts): `src/services/userFolders.ts`

### Filing and review

- [File organizer](https://github.com/an0319/obsidian-plugin/blob/main/src/services/fileOrganizer.ts): `src/services/fileOrganizer.ts`
- [Activity log](https://github.com/an0319/obsidian-plugin/blob/main/src/services/fileOrganizer.ts): `src/services/fileOrganizer.ts`
- [Batch report and undo](https://github.com/an0319/obsidian-plugin/blob/main/src/ui/batchReportModal.ts): `src/ui/batchReportModal.ts`

### Other components

- **Obsidian user**
- **Obsidian Vault**
- **Ollama service**

## Connections

- Obsidian user → Plugin entry: runs commands
- Obsidian Vault → Plugin entry: sends file events
- Plugin entry → Organizer service: organizes notes
- Plugin entry → Engine dispatcher: configures engines
- Organizer service → Engine dispatcher: requests analysis
- Engine dispatcher → Rule engine: dispatches analysis
- Engine dispatcher → TF-IDF engine: dispatches analysis
- Engine dispatcher → Ollama engine: dispatches analysis
- Engine dispatcher → Shared-config engine: dispatches analysis
- TF-IDF engine → TF-IDF math: computes vectors
- TF-IDF math → Tokenizer: tokenizes text
- Shared-config engine → TF-IDF math: computes similarity
- Ollama engine → Ollama service: requests classification
- Organizer service → Obsidian Vault: reads note snapshots
- Organizer service → File organizer: moves and logs
- File organizer → Obsidian Vault: creates folders and moves
- File organizer → Activity log: writes activity
- Plugin entry → Settings panel: opens settings
- Settings panel → Settings model: updates preferences
- Settings panel → Custom rules loader: imports rule files
- Settings panel → Seed folder mapping: prepares seed mappings
- Settings panel → User folders: lists existing folders
- Organizer service → Batch report and undo: presents batch results
- Batch report and undo → Obsidian Vault: restores moved files
- Batch report and undo → Activity log: records undo
