# macvim-dev/macvim architecture

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

- Interactive diagram: https://gitdiagram.com/macvim-dev/macvim
- Repository: https://github.com/macvim-dev/macvim

## Overview

MacVim is Vim’s editing engine presented through a native macOS GUI. The main user path is launching the app, opening or editing files in Vim, and interacting with the result in native windows. The repository also includes distinct search, scripting, terminal-emulation, and diff capabilities. The README documents major macOS GUI features; source excerpts are limited, so unverified connections between internal subsystems are omitted or marked dashed.

Main entry points: [`src`](https://github.com/macvim-dev/macvim/tree/master/src) (Editing core), [`src/MacVim/MMAppController.h`](https://github.com/macvim-dev/macvim/blob/master/src/MacVim/MMAppController.h) (MacVim app), [`src/gui.c`](https://github.com/macvim-dev/macvim/blob/master/src/gui.c) (Native GUI), [`src/main.c`](https://github.com/macvim-dev/macvim/blob/master/src/main.c) (Vim startup)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_mac["macOS application"]
  node_app["MacVim app<br/>[MMAppController.h]"]
  node_nativegui["Native GUI<br/>[gui.c]"]
  node_tabs["GUI tabs<br/>[tabpanel.c]"]
  node_update["Software updates"]
end

subgraph group_engine["Vim editing engine"]
  node_startup["Vim startup<br/>[main.c]"]
  node_editor["Editing core"]
  node_buffers["Buffers and files<br/>[buffer.c]"]
  node_commands["Command processing<br/>[ex_docmd.c]"]
  node_search["Search<br/>[search.c]"]
  node_scripting["Vim scripting<br/>[eval.c]"]
end

subgraph group_terminal["Terminal support"]
  node_terminalui["Terminal UI<br/>[terminal.c]"]
  node_termparser["Terminal parser<br/>[parser.c]"]
end

subgraph group_compare["Comparison tools"]
  node_diff["Diff engine<br/>[xdiffi.c]"]
end

node_user(("Mac user"))

node_user -->|"launches"| node_app
node_app -.->|"starts Vim"| node_startup
node_startup -.->|"initializes"| node_editor
node_editor -.->|"edits files"| node_buffers
node_editor -.->|"processes commands"| node_commands
node_editor -.->|"searches text"| node_search
node_editor -.->|"evaluates scripts"| node_scripting
node_app -->|"presents GUI"| node_nativegui
node_nativegui -->|"provides tabs"| node_tabs
node_editor -.->|"compares files"| node_diff
node_editor -.->|"supports terminal"| node_terminalui
node_terminalui -.->|"parses terminal input"| node_termparser
node_app -.->|"offers updates"| node_update

click node_app "https://github.com/macvim-dev/macvim/blob/master/src/MacVim/MMAppController.h"
click node_nativegui "https://github.com/macvim-dev/macvim/blob/master/src/gui.c"
click node_tabs "https://github.com/macvim-dev/macvim/blob/master/src/tabpanel.c"
click node_startup "https://github.com/macvim-dev/macvim/blob/master/src/main.c"
click node_editor "https://github.com/macvim-dev/macvim/tree/master/src"
click node_buffers "https://github.com/macvim-dev/macvim/blob/master/src/buffer.c"
click node_commands "https://github.com/macvim-dev/macvim/blob/master/src/ex_docmd.c"
click node_search "https://github.com/macvim-dev/macvim/blob/master/src/search.c"
click node_scripting "https://github.com/macvim-dev/macvim/blob/master/src/eval.c"
click node_diff "https://github.com/macvim-dev/macvim/blob/master/src/xdiff/xdiffi.c"
click node_terminalui "https://github.com/macvim-dev/macvim/blob/master/src/terminal.c"
click node_termparser "https://github.com/macvim-dev/macvim/blob/master/src/libvterm/src/parser.c"
click node_update "https://github.com/macvim-dev/macvim/blob/master/src/MacVim/Sparkle_2.framework/Versions/B/Headers/SPUStandardUpdaterController.h"

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_app,node_nativegui,node_tabs,node_update,node_user toneBlue
class node_startup,node_editor,node_buffers,node_commands,node_search,node_scripting toneAmber
class node_terminalui,node_termparser toneMint
class node_diff toneRose
```

## Components

### macOS application

- [MacVim app](https://github.com/macvim-dev/macvim/blob/master/src/MacVim/MMAppController.h): `src/MacVim/MMAppController.h`
- [Native GUI](https://github.com/macvim-dev/macvim/blob/master/src/gui.c): `src/gui.c`
- [GUI tabs](https://github.com/macvim-dev/macvim/blob/master/src/tabpanel.c): `src/tabpanel.c`
- [Software updates](https://github.com/macvim-dev/macvim/blob/master/src/MacVim/Sparkle_2.framework/Versions/B/Headers/SPUStandardUpdaterController.h): `src/MacVim/Sparkle_2.framework/Versions/B/Headers/SPUStandardUpdaterController.h`

### Vim editing engine

- [Vim startup](https://github.com/macvim-dev/macvim/blob/master/src/main.c): `src/main.c`
- [Editing core](https://github.com/macvim-dev/macvim/tree/master/src): `src`
- [Buffers and files](https://github.com/macvim-dev/macvim/blob/master/src/buffer.c): `src/buffer.c`
- [Command processing](https://github.com/macvim-dev/macvim/blob/master/src/ex_docmd.c): `src/ex_docmd.c`
- [Search](https://github.com/macvim-dev/macvim/blob/master/src/search.c): `src/search.c`
- [Vim scripting](https://github.com/macvim-dev/macvim/blob/master/src/eval.c): `src/eval.c`

### Terminal support

- [Terminal UI](https://github.com/macvim-dev/macvim/blob/master/src/terminal.c): `src/terminal.c`
- [Terminal parser](https://github.com/macvim-dev/macvim/blob/master/src/libvterm/src/parser.c): `src/libvterm/src/parser.c`

### Comparison tools

- [Diff engine](https://github.com/macvim-dev/macvim/blob/master/src/xdiff/xdiffi.c): `src/xdiff/xdiffi.c`

### Other components

- **Mac user**

## Connections

- Mac user → MacVim app: launches (evidence: `README.md`)
- MacVim app → Vim startup: starts Vim
- Vim startup → Editing core: initializes (evidence: `src/main.c`)
- Editing core → Buffers and files: edits files
- Editing core → Command processing: processes commands
- Editing core → Search: searches text (evidence: `src/search.c`)
- Editing core → Vim scripting: evaluates scripts
- MacVim app → Native GUI: presents GUI (evidence: `README.md`)
- Native GUI → GUI tabs: provides tabs (evidence: `README.md`)
- Editing core → Diff engine: compares files (evidence: `src/xdiff/xdiffi.c`)
- Editing core → Terminal UI: supports terminal
- Terminal UI → Terminal parser: parses terminal input
- MacVim app → Software updates: offers updates
