# neophack/git-graph-studio architecture

> Architecture diagram of the GitHub repository neophack/git-graph-studio, 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/neophack/git-graph-studio
- Repository: https://github.com/neophack/git-graph-studio

## Overview

Git Graph Studio is a standalone desktop workbench for browsing and editing a workspace, managing Git changes, and extending the shell with VSIX packages. The main user workflow opens a folder in the workbench, where frontend views call Rust services for files, Git, search, and code intelligence; users can then edit, compare, stage, commit, or run tools in the terminal. Separate branches cover persistent symbol navigation and analysis, large-file viewing, and extensions. The README documents additional capabilities beyond the sampled source; links for those are included only where the tree supports their owning modules.

Main entry points: [`src/workbench.ts`](https://github.com/neophack/git-graph-studio/blob/main/src/workbench.ts) (Workbench), [`src-tauri/src/ext_process.rs`](https://github.com/neophack/git-graph-studio/blob/main/src-tauri/src/ext_process.rs) (Extension process host), [`src/editor.ts`](https://github.com/neophack/git-graph-studio/blob/main/src/editor.ts) (Editor), [`src/main.ts`](https://github.com/neophack/git-graph-studio/blob/main/src/main.ts) (App entry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_shell["Workbench shell"]
  node_workbench["Workbench<br/>[workbench.ts]"]
  node_shellentry["App entry<br/>[main.ts]"]
end

subgraph group_workspace["Workspace tools"]
  node_explorer["Explorer<br/>[explorer.ts]"]
  node_editor["Editor<br/>[editor.ts]"]
  node_scm["Source Control<br/>[scm.ts]"]
  node_search["Search and replace<br/>[searchView.ts]"]
  node_compare["Compare views<br/>[folderCompare.ts]"]
  node_viewer["Large-file viewer<br/>[mod.rs]"]
  node_terminal["Terminal<br/>[terminal.ts]"]
end

subgraph group_intelligence["Code intelligence"]
  node_symbolsui["Symbol navigation<br/>[symbolDbView.ts]"]
  node_symbols[("Persistent symbol index<br/>[store.rs]")]
  node_parser["Tree-sitter parsing<br/>[parse.rs]"]
  node_analysisui["Code Analysis view<br/>[analysisView.ts]"]
  node_analysis["Workspace analysis<br/>[mod.rs]"]
  node_analysiscmd["Analysis commands<br/>[cmd_analysis.rs]"]
end

subgraph group_extensions["Extensions"]
  node_extensionsui["Extensions view<br/>[extensionsPanel.ts]"]
  node_gallery["Extension gallery<br/>[ext_gallery.rs]"]
  node_extprocess["Extension process host<br/>[ext_process.rs]"]
  node_nodehost["Node-compatible runtime<br/>[mod.rs]"]
  node_protocol["Extension protocol<br/>[ext_protocol.rs]"]
end

subgraph group_services["Desktop services"]
  node_fs["File service<br/>[cmd_fs.rs]"]
  node_git["Git service<br/>[cmd_scm.rs]"]
  node_searchsvc["Search and compare service<br/>[cmd_search.rs]"]
  node_pty["PTY service<br/>[pty.rs]"]
end

node_user(("User"))
node_gitcli["Git CLI"]
node_openvsx["Open VSX"]
node_extension["Installed VSIX backend"]

node_user -->|"opens app"| node_shellentry
node_shellentry -->|"loads workbench"| node_workbench
node_workbench -->|"hosts view"| node_explorer
node_workbench -->|"hosts view"| node_editor
node_workbench -->|"hosts view"| node_scm
node_workbench -->|"hosts view"| node_search
node_workbench -->|"hosts view"| node_compare
node_workbench -->|"hosts view"| node_terminal
node_explorer -->|"invokes"| node_fs
node_editor -->|"reads and writes"| node_fs
node_scm -->|"invokes"| node_git
node_git -->|"runs"| node_gitcli
node_search -->|"invokes"| node_searchsvc
node_compare -->|"requests comparison"| node_searchsvc
node_editor -->|"opens large files"| node_viewer
node_terminal -->|"starts terminal"| node_pty
node_symbolsui -->|"queries index"| node_symbols
node_symbols -->|"parses source"| node_parser
node_analysisui -->|"requests analysis"| node_analysiscmd
node_analysiscmd -->|"queries model"| node_analysis
node_analysis -->|"uses parsed model"| node_parser
node_workbench -->|"hosts view"| node_extensionsui
node_extensionsui -->|"searches and installs"| node_gallery
node_gallery -.->|"queries marketplace"| node_openvsx
node_workbench -->|"starts installed backends"| node_extprocess
node_extprocess -->|"launches"| node_extension
node_extension -->|"communicates over"| node_protocol
node_extprocess -->|"handles messages"| node_protocol
node_extprocess -.->|"hosts Node backend"| node_nodehost

click node_workbench "https://github.com/neophack/git-graph-studio/blob/main/src/workbench.ts"
click node_shellentry "https://github.com/neophack/git-graph-studio/blob/main/src/main.ts"
click node_explorer "https://github.com/neophack/git-graph-studio/blob/main/src/explorer.ts"
click node_editor "https://github.com/neophack/git-graph-studio/blob/main/src/editor.ts"
click node_scm "https://github.com/neophack/git-graph-studio/blob/main/src/scm.ts"
click node_search "https://github.com/neophack/git-graph-studio/blob/main/src/searchView.ts"
click node_compare "https://github.com/neophack/git-graph-studio/blob/main/src/folderCompare.ts"
click node_viewer "https://github.com/neophack/git-graph-studio/blob/main/src-tauri/src/viewer/mod.rs"
click node_terminal "https://github.com/neophack/git-graph-studio/blob/main/src/terminal.ts"
click node_fs "https://github.com/neophack/git-graph-studio/blob/main/src-tauri/src/cmd_fs.rs"
click node_git "https://github.com/neophack/git-graph-studio/blob/main/src-tauri/src/cmd_scm.rs"
click node_searchsvc "https://github.com/neophack/git-graph-studio/blob/main/src-tauri/src/cmd_search.rs"
click node_pty "https://github.com/neophack/git-graph-studio/blob/main/src-tauri/src/pty.rs"
click node_symbolsui "https://github.com/neophack/git-graph-studio/blob/main/src/symbolDbView.ts"
click node_symbols "https://github.com/neophack/git-graph-studio/blob/main/src-tauri/src/symbols/store.rs"
click node_parser "https://github.com/neophack/git-graph-studio/blob/main/src-tauri/src/symbols/parse.rs"
click node_analysisui "https://github.com/neophack/git-graph-studio/blob/main/src/analysisView.ts"
click node_analysis "https://github.com/neophack/git-graph-studio/blob/main/src-tauri/src/analysis/mod.rs"
click node_analysiscmd "https://github.com/neophack/git-graph-studio/blob/main/src-tauri/src/cmd_analysis.rs"
click node_extensionsui "https://github.com/neophack/git-graph-studio/blob/main/src/extensionsPanel.ts"
click node_gallery "https://github.com/neophack/git-graph-studio/blob/main/src-tauri/src/ext_gallery.rs"
click node_extprocess "https://github.com/neophack/git-graph-studio/blob/main/src-tauri/src/ext_process.rs"
click node_nodehost "https://github.com/neophack/git-graph-studio/blob/main/src-tauri/src/node_runtime/mod.rs"
click node_protocol "https://github.com/neophack/git-graph-studio/blob/main/src-tauri/src/ext_protocol.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_workbench,node_shellentry,node_user toneBlue
class node_explorer,node_editor,node_scm,node_search,node_compare,node_viewer,node_terminal toneAmber
class node_symbolsui,node_symbols,node_parser,node_analysisui,node_analysis,node_analysiscmd toneMint
class node_extensionsui,node_gallery,node_extprocess,node_nodehost,node_protocol toneRose
class node_fs,node_git,node_searchsvc,node_pty,node_gitcli,node_openvsx,node_extension toneIndigo
```

## Components

### Workbench shell

- [Workbench](https://github.com/neophack/git-graph-studio/blob/main/src/workbench.ts): `src/workbench.ts`
- [App entry](https://github.com/neophack/git-graph-studio/blob/main/src/main.ts): `src/main.ts`

### Workspace tools

- [Explorer](https://github.com/neophack/git-graph-studio/blob/main/src/explorer.ts): `src/explorer.ts`
- [Editor](https://github.com/neophack/git-graph-studio/blob/main/src/editor.ts): `src/editor.ts`
- [Source Control](https://github.com/neophack/git-graph-studio/blob/main/src/scm.ts): `src/scm.ts`
- [Search and replace](https://github.com/neophack/git-graph-studio/blob/main/src/searchView.ts): `src/searchView.ts`
- [Compare views](https://github.com/neophack/git-graph-studio/blob/main/src/folderCompare.ts): `src/folderCompare.ts`
- [Large-file viewer](https://github.com/neophack/git-graph-studio/blob/main/src-tauri/src/viewer/mod.rs): `src-tauri/src/viewer/mod.rs`
- [Terminal](https://github.com/neophack/git-graph-studio/blob/main/src/terminal.ts): `src/terminal.ts`

### Code intelligence

- [Symbol navigation](https://github.com/neophack/git-graph-studio/blob/main/src/symbolDbView.ts): `src/symbolDbView.ts`
- [Persistent symbol index](https://github.com/neophack/git-graph-studio/blob/main/src-tauri/src/symbols/store.rs): `src-tauri/src/symbols/store.rs`
- [Tree-sitter parsing](https://github.com/neophack/git-graph-studio/blob/main/src-tauri/src/symbols/parse.rs): `src-tauri/src/symbols/parse.rs`
- [Code Analysis view](https://github.com/neophack/git-graph-studio/blob/main/src/analysisView.ts): `src/analysisView.ts`
- [Workspace analysis](https://github.com/neophack/git-graph-studio/blob/main/src-tauri/src/analysis/mod.rs): `src-tauri/src/analysis/mod.rs`
- [Analysis commands](https://github.com/neophack/git-graph-studio/blob/main/src-tauri/src/cmd_analysis.rs): `src-tauri/src/cmd_analysis.rs`

### Extensions

- [Extensions view](https://github.com/neophack/git-graph-studio/blob/main/src/extensionsPanel.ts): `src/extensionsPanel.ts`
- [Extension gallery](https://github.com/neophack/git-graph-studio/blob/main/src-tauri/src/ext_gallery.rs): `src-tauri/src/ext_gallery.rs`
- [Extension process host](https://github.com/neophack/git-graph-studio/blob/main/src-tauri/src/ext_process.rs): `src-tauri/src/ext_process.rs`
- [Node-compatible runtime](https://github.com/neophack/git-graph-studio/blob/main/src-tauri/src/node_runtime/mod.rs): `src-tauri/src/node_runtime/mod.rs`
- [Extension protocol](https://github.com/neophack/git-graph-studio/blob/main/src-tauri/src/ext_protocol.rs): `src-tauri/src/ext_protocol.rs`

### Desktop services

- [File service](https://github.com/neophack/git-graph-studio/blob/main/src-tauri/src/cmd_fs.rs): `src-tauri/src/cmd_fs.rs`
- [Git service](https://github.com/neophack/git-graph-studio/blob/main/src-tauri/src/cmd_scm.rs): `src-tauri/src/cmd_scm.rs`
- [Search and compare service](https://github.com/neophack/git-graph-studio/blob/main/src-tauri/src/cmd_search.rs): `src-tauri/src/cmd_search.rs`
- [PTY service](https://github.com/neophack/git-graph-studio/blob/main/src-tauri/src/pty.rs): `src-tauri/src/pty.rs`

### Other components

- **User**
- **Git CLI**
- **Open VSX**
- **Installed VSIX backend**

## Connections

- User → App entry: opens app
- App entry → Workbench: loads workbench
- Workbench → Explorer: hosts view
- Workbench → Editor: hosts view
- Workbench → Source Control: hosts view
- Workbench → Search and replace: hosts view
- Workbench → Compare views: hosts view
- Workbench → Terminal: hosts view
- Explorer → File service: invokes
- Editor → File service: reads and writes
- Source Control → Git service: invokes
- Git service → Git CLI: runs
- Search and replace → Search and compare service: invokes
- Compare views → Search and compare service: requests comparison
- Editor → Large-file viewer: opens large files
- Terminal → PTY service: starts terminal
- Symbol navigation → Persistent symbol index: queries index
- Persistent symbol index → Tree-sitter parsing: parses source
- Code Analysis view → Analysis commands: requests analysis
- Analysis commands → Workspace analysis: queries model
- Workspace analysis → Tree-sitter parsing: uses parsed model
- Workbench → Extensions view: hosts view
- Extensions view → Extension gallery: searches and installs
- Extension gallery → Open VSX: queries marketplace
- Workbench → Extension process host: starts installed backends
- Extension process host → Installed VSIX backend: launches
- Installed VSIX backend → Extension protocol: communicates over
- Extension process host → Extension protocol: handles messages
- Extension process host → Node-compatible runtime: hosts Node backend
