# qingbird1983/keel-markdown architecture

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

- Interactive diagram: https://gitdiagram.com/qingbird1983/keel-markdown
- Repository: https://github.com/qingbird1983/keel-markdown

## Overview

KeelMd is a cross-platform Markdown desktop editor with preview and streamed translation. The main path is launch and open files, edit or preview documents, then optionally translate selected or document prose and review translation writeback. The graph also preserves Git, terminal, settings, and rendering capabilities documented or represented in the tree. Edges are limited to relationships visible in excerpts, the source index, or README; unsampled subsystem links are omitted rather than inferred.

Main entry points: [`crates/winc-app/src/app.rs`](https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-app/src/app.rs) (App state and events), [`crates/winc-app/src/main.rs`](https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-app/src/main.rs) (Application entry), [`crates/keel-translate/src/engine.rs`](https://github.com/qingbird1983/keel-markdown/blob/dev/crates/keel-translate/src/engine.rs) (Translation engine), [`crates/winc-app/src/app/translate/worker.rs`](https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-app/src/app/translate/worker.rs) (Translation UI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Desktop application"]
  node_entry["Application entry<br/>[main.rs]"]
  node_windows["Window coordinator<br/>[winc.rs]"]
  node_appstate["App state and events<br/>[app.rs]"]
  node_layout["Window layout<br/>[layout.rs]"]
  node_keymap["Keyboard bindings<br/>[keymap.rs]"]
  node_settings["Settings and state<br/>[state.rs]"]
end

subgraph group_documents["Documents and editing"]
  node_editor["Document editor<br/>[document.rs]"]
  node_editing["Editing operations<br/>[search.rs]"]
  node_git["Git workflows<br/>[git.rs]"]
  node_workspace["Workspace search<br/>[project_search.rs]"]
end

subgraph group_reading["Preview and rendering"]
  node_preview["Markdown preview<br/>[markdown.rs]"]
  node_syntax["Syntax highlighting<br/>[lexer.rs]"]
  node_render["Rendering and display<br/>[lib.rs]"]
end

subgraph group_translation["Translation engine"]
  node_translate_ui["Translation UI<br/>[worker.rs]"]
  node_translate_engine["Translation engine<br/>[engine.rs]"]
  node_policy["Translation policy<br/>[policy.rs]"]
  node_providers["Provider dispatch<br/>[mod.rs]"]
  node_llm["LLM provider<br/>[llm.rs]"]
  node_cache["Translation cache<br/>[cache.rs]"]
end

subgraph group_platform["Platform services"]
  node_pty["Terminal process support<br/>[client.rs]"]
  node_macos["macOS integration<br/>[macos.rs]"]
end

node_user(("User"))
node_remote{{"Translation services"}}

node_user -->|"launches"| node_entry
node_entry -->|"starts"| node_windows
node_windows -->|"dispatches events"| node_appstate
node_appstate -->|"uses geometry"| node_layout
node_appstate -->|"maps input"| node_keymap
node_appstate -.->|"presents preview"| node_preview
node_appstate -.->|"edits documents"| node_editor
node_appstate -.->|"offers Git workflows"| node_git
node_appstate -.->|"hosts terminal"| node_pty
node_entry -->|"loads state"| node_settings
node_preview -.->|"draws content"| node_render
node_editor -->|"supports search"| node_editing
node_workspace -->|"reuses search"| node_editing
node_translate_ui -->|"returns results"| node_appstate
node_translate_ui -->|"sends events"| node_windows
node_translate_ui -.->|"requests translation"| node_translate_engine
node_translate_engine -->|"checks policy"| node_policy
node_translate_engine -->|"dispatches providers"| node_providers
node_translate_engine -->|"uses cache"| node_cache
node_policy -->|"builds cache keys"| node_cache
node_policy -->|"splits translation units"| node_workspace
node_providers -->|"selects provider"| node_llm
node_llm -.->|"streams requests"| node_remote
node_user -.->|"requests translation"| node_translate_ui
node_entry -.->|"uses platform APIs"| node_macos
node_editor -.->|"provides preview input"| node_preview
node_preview -.->|"uses highlighting"| node_syntax

click node_entry "https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-app/src/main.rs"
click node_windows "https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-app/src/winc.rs"
click node_appstate "https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-app/src/app.rs"
click node_layout "https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-app/src/layout.rs"
click node_keymap "https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-app/src/keymap.rs"
click node_settings "https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-config/src/state.rs"
click node_editor "https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-editor/src/document.rs"
click node_editing "https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-editor/src/editing/search.rs"
click node_git "https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-editor/src/git.rs"
click node_workspace "https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-editor/src/workspace/project_search.rs"
click node_preview "https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-preview/src/markdown.rs"
click node_syntax "https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-syntax/src/lexer.rs"
click node_render "https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-render/src/lib.rs"
click node_translate_ui "https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-app/src/app/translate/worker.rs"
click node_translate_engine "https://github.com/qingbird1983/keel-markdown/blob/dev/crates/keel-translate/src/engine.rs"
click node_policy "https://github.com/qingbird1983/keel-markdown/blob/dev/crates/keel-translate/src/policy.rs"
click node_providers "https://github.com/qingbird1983/keel-markdown/blob/dev/crates/keel-translate/src/providers/mod.rs"
click node_llm "https://github.com/qingbird1983/keel-markdown/blob/dev/crates/keel-translate/src/providers/llm.rs"
click node_cache "https://github.com/qingbird1983/keel-markdown/blob/dev/crates/keel-translate/src/cache.rs"
click node_pty "https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-pty/src/host/client.rs"
click node_macos "https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-app/src/macos.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_entry,node_windows,node_appstate,node_layout,node_keymap,node_settings,node_user toneBlue
class node_editor,node_editing,node_git,node_workspace toneAmber
class node_preview,node_syntax,node_render toneMint
class node_translate_ui,node_translate_engine,node_policy,node_providers,node_llm,node_cache toneRose
class node_pty,node_macos,node_remote toneIndigo
```

## Components

### Desktop application

- [Application entry](https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-app/src/main.rs): `crates/winc-app/src/main.rs`
- [Window coordinator](https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-app/src/winc.rs): `crates/winc-app/src/winc.rs`
- [App state and events](https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-app/src/app.rs): `crates/winc-app/src/app.rs`
- [Window layout](https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-app/src/layout.rs): `crates/winc-app/src/layout.rs`
- [Keyboard bindings](https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-app/src/keymap.rs): `crates/winc-app/src/keymap.rs`
- [Settings and state](https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-config/src/state.rs): `crates/winc-config/src/state.rs`

### Documents and editing

- [Document editor](https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-editor/src/document.rs): `crates/winc-editor/src/document.rs`
- [Editing operations](https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-editor/src/editing/search.rs): `crates/winc-editor/src/editing/search.rs`
- [Git workflows](https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-editor/src/git.rs): `crates/winc-editor/src/git.rs`
- [Workspace search](https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-editor/src/workspace/project_search.rs): `crates/winc-editor/src/workspace/project_search.rs`

### Preview and rendering

- [Markdown preview](https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-preview/src/markdown.rs): `crates/winc-preview/src/markdown.rs`
- [Syntax highlighting](https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-syntax/src/lexer.rs): `crates/winc-syntax/src/lexer.rs`
- [Rendering and display](https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-render/src/lib.rs): `crates/winc-render/src/lib.rs`

### Translation engine

- [Translation UI](https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-app/src/app/translate/worker.rs): `crates/winc-app/src/app/translate/worker.rs`
- [Translation engine](https://github.com/qingbird1983/keel-markdown/blob/dev/crates/keel-translate/src/engine.rs): `crates/keel-translate/src/engine.rs`
- [Translation policy](https://github.com/qingbird1983/keel-markdown/blob/dev/crates/keel-translate/src/policy.rs): `crates/keel-translate/src/policy.rs`
- [Provider dispatch](https://github.com/qingbird1983/keel-markdown/blob/dev/crates/keel-translate/src/providers/mod.rs): `crates/keel-translate/src/providers/mod.rs`
- [LLM provider](https://github.com/qingbird1983/keel-markdown/blob/dev/crates/keel-translate/src/providers/llm.rs): `crates/keel-translate/src/providers/llm.rs`
- [Translation cache](https://github.com/qingbird1983/keel-markdown/blob/dev/crates/keel-translate/src/cache.rs): `crates/keel-translate/src/cache.rs`

### Platform services

- [Terminal process support](https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-pty/src/host/client.rs): `crates/winc-pty/src/host/client.rs`
- [macOS integration](https://github.com/qingbird1983/keel-markdown/blob/dev/crates/winc-app/src/macos.rs): `crates/winc-app/src/macos.rs`

### Other components

- **User**
- **Translation services**

## Connections

- User → Application entry: launches (evidence: `crates/winc-app/src/main.rs`)
- Application entry → Window coordinator: starts (evidence: `crates/winc-app/src/main.rs`)
- Window coordinator → App state and events: dispatches events (evidence: `crates/winc-app/src/winc.rs`)
- App state and events → Window layout: uses geometry (evidence: `crates/winc-app/src/app.rs`)
- App state and events → Keyboard bindings: maps input (evidence: `crates/winc-app/src/app.rs`)
- App state and events → Markdown preview: presents preview
- App state and events → Document editor: edits documents
- App state and events → Git workflows: offers Git workflows
- App state and events → Terminal process support: hosts terminal
- Application entry → Settings and state: loads state (evidence: `crates/winc-app/src/main.rs`)
- Markdown preview → Rendering and display: draws content
- Document editor → Editing operations: supports search (evidence: `crates/winc-editor/src/editing/search.rs`)
- Workspace search → Editing operations: reuses search (evidence: `crates/winc-editor/src/workspace/project_search.rs`)
- Translation UI → App state and events: returns results (evidence: `crates/winc-app/src/app/translate/worker.rs`)
- Translation UI → Window coordinator: sends events (evidence: `crates/winc-app/src/app/translate/worker.rs`)
- Translation UI → Translation engine: requests translation
- Translation engine → Translation policy: checks policy (evidence: `crates/keel-translate/src/engine.rs`)
- Translation engine → Provider dispatch: dispatches providers (evidence: `crates/keel-translate/src/engine.rs`)
- Translation engine → Translation cache: uses cache (evidence: `crates/keel-translate/src/engine.rs`)
- Translation policy → Translation cache: builds cache keys (evidence: `crates/keel-translate/src/policy.rs`)
- Translation policy → Workspace search: splits translation units (evidence: `crates/keel-translate/src/policy.rs`)
- Provider dispatch → LLM provider: selects provider (evidence: `crates/keel-translate/src/providers/mod.rs`)
- LLM provider → Translation services: streams requests
- User → Translation UI: requests translation
- Application entry → macOS integration: uses platform APIs (evidence: `crates/winc-app/src/main.rs`)
- Document editor → Markdown preview: provides preview input
- Markdown preview → Syntax highlighting: uses highlighting
