# octadira/obsidian-folder-git architecture

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

- Interactive diagram: https://gitdiagram.com/octadira/obsidian-folder-git
- Repository: https://github.com/octadira/obsidian-folder-git

## Overview

Folder Git is an Obsidian plugin for managing independent Git repositories per vault folder. Users add or clone a repository, inspect its status, stage and commit changes, then fetch, pull, push, or sync; they can also browse history and diffs, edit ignore rules, and configure automatic commits. The registry is the central Git-operation and per-repository lifecycle layer. The README documents capabilities whose implementation details are not present in the sampled excerpts, so uncertain internal wiring is omitted.

Main entry points: [`src/repoRegistry.ts`](https://github.com/octadira/obsidian-folder-git/blob/main/src/repoRegistry.ts) (Repository registry), [`src/main.ts`](https://github.com/octadira/obsidian-folder-git/blob/main/src/main.ts) (Plugin entry), [`src/settingsTab.ts`](https://github.com/octadira/obsidian-folder-git/blob/main/src/settingsTab.ts) (Plugin settings), [`src/modals/addRepoModal.ts`](https://github.com/octadira/obsidian-folder-git/blob/main/src/modals/addRepoModal.ts) (Add repository)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_plugin["Plugin Control"]
  node_main["Plugin entry<br/>[main.ts]"]
  node_settings["Plugin settings<br/>[settingsTab.ts]"]
  node_addrepo["Add repository<br/>[addRepoModal.ts]"]
end

subgraph group_git["Repository Operations"]
  node_registry["Repository registry<br/>[repoRegistry.ts]"]
  node_nodeapi["Node Git access<br/>[nodeApi.ts]"]
end

subgraph group_views["Git Interfaces"]
  node_sourceview["Source control"]
  node_history["History view<br/>[historyView.ts]"]
  node_diff["Diff viewer<br/>[diffModal.ts]"]
  node_ignore["Ignore editor<br/>[gitignoreModal.ts]"]
end

subgraph group_hosting["Hosting Integration"]
  node_hostingfactory["Hosting provider factory<br/>[hostingService.ts]"]
  node_github["GitHub API client<br/>[githubService.ts]"]
  node_forgejo["Forgejo API client<br/>[forgejoService.ts]"]
end

node_user(("Vault user"))
node_obsidian(("Obsidian"))
node_gitcli["Git executable"]
node_githubapi["GitHub API"]
node_forgejoapi["Forgejo API"]
node_gitrepos[("Folder repositories")]

node_user -->|"uses plugin"| node_obsidian
node_obsidian -->|"loads"| node_main
node_main -->|"initializes and refreshes"| node_registry
node_main -->|"opens and refreshes"| node_sourceview
node_main -->|"opens"| node_addrepo
node_user -->|"uses"| node_sourceview
node_user -->|"configures repository"| node_addrepo
node_user -->|"configures"| node_settings
node_addrepo -->|"adds or clones"| node_registry
node_addrepo -->|"requests provider"| node_hostingfactory
node_settings -->|"validates token"| node_github
node_settings -->|"validates token"| node_forgejo
node_hostingfactory -->|"creates client"| node_github
node_hostingfactory -->|"creates client"| node_forgejo
node_github -.->|"sends API requests"| node_githubapi
node_forgejo -.->|"sends API requests"| node_forgejoapi
node_registry -->|"uses filesystem access"| node_nodeapi
node_registry -->|"runs Git operations"| node_gitcli
node_registry -->|"manages status and history"| node_gitrepos
node_gitrepos -->|"returns Git results"| node_registry
node_sourceview -->|"requests Git actions"| node_registry
node_history -->|"requests commit history and diffs"| node_registry
node_history -->|"opens commit diff"| node_diff
node_sourceview -->|"opens file diff"| node_diff
node_ignore -->|"reads and writes ignore rules"| node_registry
node_main -->|"registers settings"| node_settings

click node_main "https://github.com/octadira/obsidian-folder-git/blob/main/src/main.ts"
click node_settings "https://github.com/octadira/obsidian-folder-git/blob/main/src/settingsTab.ts"
click node_addrepo "https://github.com/octadira/obsidian-folder-git/blob/main/src/modals/addRepoModal.ts"
click node_registry "https://github.com/octadira/obsidian-folder-git/blob/main/src/repoRegistry.ts"
click node_sourceview "https://github.com/octadira/obsidian-folder-git/blob/main/src/views/sourceControlView.ts"
click node_history "https://github.com/octadira/obsidian-folder-git/blob/main/src/views/historyView.ts"
click node_diff "https://github.com/octadira/obsidian-folder-git/blob/main/src/views/diffModal.ts"
click node_ignore "https://github.com/octadira/obsidian-folder-git/blob/main/src/modals/gitignoreModal.ts"
click node_hostingfactory "https://github.com/octadira/obsidian-folder-git/blob/main/src/hosting/hostingService.ts"
click node_github "https://github.com/octadira/obsidian-folder-git/blob/main/src/hosting/githubService.ts"
click node_forgejo "https://github.com/octadira/obsidian-folder-git/blob/main/src/hosting/forgejoService.ts"
click node_nodeapi "https://github.com/octadira/obsidian-folder-git/blob/main/src/nodeApi.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_settings,node_addrepo,node_user toneBlue
class node_registry,node_nodeapi,node_gitrepos toneAmber
class node_sourceview,node_history,node_diff,node_ignore,node_githubapi,node_forgejoapi toneMint
class node_hostingfactory,node_github,node_forgejo toneRose
class node_obsidian,node_gitcli toneIndigo
```

## Components

### Plugin Control

- [Plugin entry](https://github.com/octadira/obsidian-folder-git/blob/main/src/main.ts): `src/main.ts`
- [Plugin settings](https://github.com/octadira/obsidian-folder-git/blob/main/src/settingsTab.ts): `src/settingsTab.ts`
- [Add repository](https://github.com/octadira/obsidian-folder-git/blob/main/src/modals/addRepoModal.ts): `src/modals/addRepoModal.ts`

### Repository Operations

- [Repository registry](https://github.com/octadira/obsidian-folder-git/blob/main/src/repoRegistry.ts): `src/repoRegistry.ts`
- [Node Git access](https://github.com/octadira/obsidian-folder-git/blob/main/src/nodeApi.ts): `src/nodeApi.ts`

### Git Interfaces

- [Source control](https://github.com/octadira/obsidian-folder-git/blob/main/src/views/sourceControlView.ts): `src/views/sourceControlView.ts`
- [History view](https://github.com/octadira/obsidian-folder-git/blob/main/src/views/historyView.ts): `src/views/historyView.ts`
- [Diff viewer](https://github.com/octadira/obsidian-folder-git/blob/main/src/views/diffModal.ts): `src/views/diffModal.ts`
- [Ignore editor](https://github.com/octadira/obsidian-folder-git/blob/main/src/modals/gitignoreModal.ts): `src/modals/gitignoreModal.ts`

### Hosting Integration

- [Hosting provider factory](https://github.com/octadira/obsidian-folder-git/blob/main/src/hosting/hostingService.ts): `src/hosting/hostingService.ts`
- [GitHub API client](https://github.com/octadira/obsidian-folder-git/blob/main/src/hosting/githubService.ts): `src/hosting/githubService.ts`
- [Forgejo API client](https://github.com/octadira/obsidian-folder-git/blob/main/src/hosting/forgejoService.ts): `src/hosting/forgejoService.ts`

### Other components

- **Vault user**
- **Obsidian**
- **Git executable**
- **GitHub API**
- **Forgejo API**
- **Folder repositories**

## Connections

- Vault user → Obsidian: uses plugin
- Obsidian → Plugin entry: loads
- Plugin entry → Repository registry: initializes and refreshes
- Plugin entry → Source control: opens and refreshes
- Plugin entry → Add repository: opens
- Vault user → Source control: uses
- Vault user → Add repository: configures repository
- Vault user → Plugin settings: configures
- Add repository → Repository registry: adds or clones
- Add repository → Hosting provider factory: requests provider
- Plugin settings → GitHub API client: validates token
- Plugin settings → Forgejo API client: validates token
- Hosting provider factory → GitHub API client: creates client
- Hosting provider factory → Forgejo API client: creates client
- GitHub API client → GitHub API: sends API requests
- Forgejo API client → Forgejo API: sends API requests
- Repository registry → Node Git access: uses filesystem access
- Repository registry → Git executable: runs Git operations
- Repository registry → Folder repositories: manages status and history
- Folder repositories → Repository registry: returns Git results
- Source control → Repository registry: requests Git actions
- History view → Repository registry: requests commit history and diffs
- History view → Diff viewer: opens commit diff
- Source control → Diff viewer: opens file diff
- Ignore editor → Repository registry: reads and writes ignore rules
- Plugin entry → Plugin settings: registers settings
