# sata1000000/vimium-o architecture

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

- Interactive diagram: https://gitdiagram.com/sata1000000/vimium-o
- Repository: https://github.com/sata1000000/vimium-o

## Overview

Vimium-O is an Obsidian plugin for keyboard-driven navigation and interaction. Key events enter through the plugin’s document listeners and are routed to scrolling, clickable-element hints, workspace navigation, marks, and search; feature-specific modals support bookmark, tab, and mark selection. Search bridges a custom HUD to Obsidian’s native find UI, while marks retain scroll positions for later jumps. The README documents additional tab, history, file, and command actions. Some implementations were not sampled, so their nodes use supported directory paths and uncertain call wiring is omitted.

Main entry points: [`src/logic/KeyboardRouter.ts`](https://github.com/sata1000000/vimium-o/blob/main/src/logic/KeyboardRouter.ts) (Keyboard router), [`src/main.ts`](https://github.com/sata1000000/vimium-o/blob/main/src/main.ts) (Plugin lifecycle), [`src/logic/MarkManager.ts`](https://github.com/sata1000000/vimium-o/blob/main/src/logic/MarkManager.ts) (Scroll marks), [`src/logic/SearchManager.ts`](https://github.com/sata1000000/vimium-o/blob/main/src/logic/SearchManager.ts) (Find manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["Plugin entry"]
  node_plugin["Plugin lifecycle<br/>[main.ts]"]
  node_router["Keyboard router<br/>[KeyboardRouter.ts]"]
end

subgraph group_navigation["Keyboard navigation"]
  node_scroll["Scroll and zoom<br/>[ScrollEngine.ts]"]
  node_hints["Clickable hints<br/>[HintManager.ts]"]
  node_navigator["Workspace navigation"]
end

subgraph group_findmarks["Search and marks"]
  node_marks["Scroll marks<br/>[MarkManager.ts]"]
  node_marksearch["Mark finder<br/>[MarkSearch.ts]"]
  node_search["Find manager<br/>[SearchManager.ts]"]
  node_texthud["Find HUD<br/>[TextSearch.ts]"]
end

subgraph group_workspace["Workspace tools"]
  node_bookmarksearch["Bookmark finder<br/>[BookmarkSearch.ts]"]
  node_tabsearch["Tab finder<br/>[TabSearch.ts]"]
  node_help["Help modal<br/>[Help.ts]"]
end

subgraph group_configuration["Configuration"]
  node_settings["Settings tab<br/>[settings.ts]"]
  node_pluginstate[("Plugin settings data")]
end

node_user(("Keyboard user"))
node_obsidian["Obsidian app"]

node_user -->|"presses keys"| node_plugin
node_plugin -->|"routes key events"| node_router
node_plugin -->|"routes find keys"| node_search
node_plugin -->|"draws marks"| node_marks
node_plugin -->|"registers settings"| node_settings
node_plugin -->|"loads and saves settings"| node_obsidian
node_router -->|"controls scrolling"| node_scroll
node_router -->|"shows hints"| node_hints
node_router -->|"handles navigation"| node_navigator
node_router -->|"handles mark keys"| node_marks
node_router -->|"opens finder"| node_bookmarksearch
node_router -->|"opens finder"| node_tabsearch
node_router -->|"opens help"| node_help
node_router -->|"runs workspace commands"| node_obsidian
node_search -->|"creates HUD"| node_texthud
node_search -->|"syncs native find"| node_obsidian
node_texthud -->|"syncs query"| node_search
node_marks -->|"opens mark finder"| node_marksearch
node_marksearch -->|"jumps or deletes"| node_marks
node_marks -->|"opens marked file"| node_obsidian
node_bookmarksearch -->|"opens bookmark"| node_obsidian
node_tabsearch -->|"switches tab"| node_obsidian
node_settings -->|"updates settings"| node_plugin
node_plugin -->|"persists settings"| node_pluginstate

click node_plugin "https://github.com/sata1000000/vimium-o/blob/main/src/main.ts"
click node_router "https://github.com/sata1000000/vimium-o/blob/main/src/logic/KeyboardRouter.ts"
click node_settings "https://github.com/sata1000000/vimium-o/blob/main/src/settings.ts"
click node_scroll "https://github.com/sata1000000/vimium-o/blob/main/src/logic/ScrollEngine.ts"
click node_hints "https://github.com/sata1000000/vimium-o/blob/main/src/logic/HintManager.ts"
click node_navigator "https://github.com/sata1000000/vimium-o/blob/main/src/logic/WorkspaceNavigator.ts"
click node_marks "https://github.com/sata1000000/vimium-o/blob/main/src/logic/MarkManager.ts"
click node_marksearch "https://github.com/sata1000000/vimium-o/blob/main/src/modals/MarkSearch.ts"
click node_search "https://github.com/sata1000000/vimium-o/blob/main/src/logic/SearchManager.ts"
click node_texthud "https://github.com/sata1000000/vimium-o/blob/main/src/modals/TextSearch.ts"
click node_bookmarksearch "https://github.com/sata1000000/vimium-o/blob/main/src/modals/BookmarkSearch.ts"
click node_tabsearch "https://github.com/sata1000000/vimium-o/blob/main/src/modals/TabSearch.ts"
click node_help "https://github.com/sata1000000/vimium-o/blob/main/src/modals/Help.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_router,node_user toneBlue
class node_scroll,node_hints,node_navigator toneAmber
class node_marks,node_marksearch,node_search,node_texthud toneMint
class node_bookmarksearch,node_tabsearch,node_help toneRose
class node_settings,node_pluginstate,node_obsidian toneIndigo
```

## Components

### Plugin entry

- [Plugin lifecycle](https://github.com/sata1000000/vimium-o/blob/main/src/main.ts): `src/main.ts`
- [Keyboard router](https://github.com/sata1000000/vimium-o/blob/main/src/logic/KeyboardRouter.ts): `src/logic/KeyboardRouter.ts`

### Keyboard navigation

- [Scroll and zoom](https://github.com/sata1000000/vimium-o/blob/main/src/logic/ScrollEngine.ts): `src/logic/ScrollEngine.ts`
- [Clickable hints](https://github.com/sata1000000/vimium-o/blob/main/src/logic/HintManager.ts): `src/logic/HintManager.ts`
- [Workspace navigation](https://github.com/sata1000000/vimium-o/blob/main/src/logic/WorkspaceNavigator.ts): `src/logic/WorkspaceNavigator.ts`

### Search and marks

- [Scroll marks](https://github.com/sata1000000/vimium-o/blob/main/src/logic/MarkManager.ts): `src/logic/MarkManager.ts`
- [Mark finder](https://github.com/sata1000000/vimium-o/blob/main/src/modals/MarkSearch.ts): `src/modals/MarkSearch.ts`
- [Find manager](https://github.com/sata1000000/vimium-o/blob/main/src/logic/SearchManager.ts): `src/logic/SearchManager.ts`
- [Find HUD](https://github.com/sata1000000/vimium-o/blob/main/src/modals/TextSearch.ts): `src/modals/TextSearch.ts`

### Workspace tools

- [Bookmark finder](https://github.com/sata1000000/vimium-o/blob/main/src/modals/BookmarkSearch.ts): `src/modals/BookmarkSearch.ts`
- [Tab finder](https://github.com/sata1000000/vimium-o/blob/main/src/modals/TabSearch.ts): `src/modals/TabSearch.ts`
- [Help modal](https://github.com/sata1000000/vimium-o/blob/main/src/modals/Help.ts): `src/modals/Help.ts`

### Configuration

- [Settings tab](https://github.com/sata1000000/vimium-o/blob/main/src/settings.ts): `src/settings.ts`
- **Plugin settings data**

### Other components

- **Keyboard user**
- **Obsidian app**

## Connections

- Keyboard user → Plugin lifecycle: presses keys
- Plugin lifecycle → Keyboard router: routes key events
- Plugin lifecycle → Find manager: routes find keys
- Plugin lifecycle → Scroll marks: draws marks
- Plugin lifecycle → Settings tab: registers settings
- Plugin lifecycle → Obsidian app: loads and saves settings
- Keyboard router → Scroll and zoom: controls scrolling
- Keyboard router → Clickable hints: shows hints
- Keyboard router → Workspace navigation: handles navigation
- Keyboard router → Scroll marks: handles mark keys
- Keyboard router → Bookmark finder: opens finder
- Keyboard router → Tab finder: opens finder
- Keyboard router → Help modal: opens help
- Keyboard router → Obsidian app: runs workspace commands
- Find manager → Find HUD: creates HUD
- Find manager → Obsidian app: syncs native find
- Find HUD → Find manager: syncs query
- Scroll marks → Mark finder: opens mark finder
- Mark finder → Scroll marks: jumps or deletes
- Scroll marks → Obsidian app: opens marked file
- Bookmark finder → Obsidian app: opens bookmark
- Tab finder → Obsidian app: switches tab
- Settings tab → Plugin lifecycle: updates settings
- Plugin lifecycle → Plugin settings data: persists settings
