# rosemoe/sora-editor architecture

> Architecture diagram of the GitHub repository rosemoe/sora-editor, 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/rosemoe/sora-editor
- Repository: https://github.com/rosemoe/sora-editor

## Overview

sora-editor is an Android code-editor library. In its primary workflow, a user edits a document; editor text state supports undo/redo and incremental language analysis, which produces styles for display. The library also provides completion, snippets, diagnostics, formatting, bracket matching, and editor events. An optional LSP module adds language-server integration and editor-facing language features. The graph reflects README capabilities and the supplied source excerpts; several feature connections are omitted where their wiring was not sampled.

Main entry points: [`editor/src/main/java/io/github/rosemoe/sora/lang/styling/Styles.java`](https://github.com/rosemoe/sora-editor/blob/main/editor/src/main/java/io/github/rosemoe/sora/lang/styling/Styles.java) (Styles and highlights), [`editor/src/main/java/io/github/rosemoe/sora/text/Content.kt`](https://github.com/rosemoe/sora-editor/blob/main/editor/src/main/java/io/github/rosemoe/sora/text/Content.kt) (Text content), [`editor/src/main/java/io/github/rosemoe/sora/lang/analysis/AsyncIncrementalAnalyzeManager.java`](https://github.com/rosemoe/sora-editor/blob/main/editor/src/main/java/io/github/rosemoe/sora/lang/analysis/AsyncIncrementalAnalyzeManager.java) (Incremental analysis), [`editor-lsp/src/main/java/io/github/rosemoe/sora/lsp/editor/LspEditor.kt`](https://github.com/rosemoe/sora-editor/blob/main/editor-lsp/src/main/java/io/github/rosemoe/sora/lsp/editor/LspEditor.kt) (LSP editor)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_editing["Editing Core"]
  node_content["Text content<br/>[Content.kt]"]
  node_undo["Undo manager<br/>[UndoManager.java]"]
  node_events["Event system<br/>[EventManager.java]"]
  node_snippet["Snippet editing"]
end

subgraph group_language["Language Services"]
  node_analysis["Incremental analysis"]
  node_java["Java analysis"]
  node_treesitter["Tree-sitter analysis"]
  node_completion["Completion and snippets"]
  node_diagnostics["Diagnostics"]
  node_formatting["Formatting<br/>[Formatter.java]"]
end

subgraph group_presentation["Editor Presentation"]
  node_styles["Styles and highlights<br/>[Styles.java]"]
  node_graphics["Text rendering<br/>[TextRow.java]"]
  node_brackets["Bracket matching"]
end

subgraph group_lsp["LSP Integration"]
  node_lspeditor["LSP editor<br/>[LspEditor.kt]"]
  node_lspmanager["LSP requests"]
  node_lspconnection["Server connections"]
  node_lspfeatures["LSP editor features"]
end

node_user(("Editor user"))
node_lspserver(("Language server"))

node_user -->|"edits text"| node_content
node_content -->|"records changes"| node_undo
node_analysis -->|"publishes styles"| node_styles
node_java -->|"extends analysis"| node_analysis
node_treesitter -->|"sets styles"| node_styles
node_styles -->|"provides spans"| node_graphics
node_user -->|"triggers events"| node_events
node_user -->|"edits placeholders"| node_snippet
node_lspeditor -->|"requests features"| node_lspmanager
node_lspmanager -->|"forwards requests"| node_lspserver
node_lspconnection -->|"connects streams"| node_lspserver
node_lspfeatures -->|"presents results"| node_lspeditor

click node_content "https://github.com/rosemoe/sora-editor/blob/main/editor/src/main/java/io/github/rosemoe/sora/text/Content.kt"
click node_undo "https://github.com/rosemoe/sora-editor/blob/main/editor/src/main/java/io/github/rosemoe/sora/text/UndoManager.java"
click node_events "https://github.com/rosemoe/sora-editor/blob/main/editor/src/main/java/io/github/rosemoe/sora/event/EventManager.java"
click node_snippet "https://github.com/rosemoe/sora-editor/blob/main/editor/src/main/java/io/github/rosemoe/sora/widget/snippet/SnippetController.kt"
click node_analysis "https://github.com/rosemoe/sora-editor/blob/main/editor/src/main/java/io/github/rosemoe/sora/lang/analysis/AsyncIncrementalAnalyzeManager.java"
click node_java "https://github.com/rosemoe/sora-editor/blob/main/language-java/src/main/java/io/github/rosemoe/sora/langs/java/JavaIncrementalAnalyzeManager.java"
click node_treesitter "https://github.com/rosemoe/sora-editor/blob/main/language-treesitter/src/main/java/io/github/rosemoe/sora/editor/ts/TsAnalyzeManager.kt"
click node_completion "https://github.com/rosemoe/sora-editor/blob/main/editor/src/main/java/io/github/rosemoe/sora/lang/completion/CompletionItem.java"
click node_diagnostics "https://github.com/rosemoe/sora-editor/blob/main/editor/src/main/java/io/github/rosemoe/sora/lang/diagnostic/DiagnosticsContainer.java"
click node_formatting "https://github.com/rosemoe/sora-editor/blob/main/editor/src/main/java/io/github/rosemoe/sora/lang/format/Formatter.java"
click node_styles "https://github.com/rosemoe/sora-editor/blob/main/editor/src/main/java/io/github/rosemoe/sora/lang/styling/Styles.java"
click node_graphics "https://github.com/rosemoe/sora-editor/blob/main/editor/src/main/java/io/github/rosemoe/sora/graphics/TextRow.java"
click node_brackets "https://github.com/rosemoe/sora-editor/blob/main/editor/src/main/java/io/github/rosemoe/sora/lang/brackets/OnlineBracketsMatcher.java"
click node_lspeditor "https://github.com/rosemoe/sora-editor/blob/main/editor-lsp/src/main/java/io/github/rosemoe/sora/lsp/editor/LspEditor.kt"
click node_lspmanager "https://github.com/rosemoe/sora-editor/blob/main/editor-lsp/src/main/java/io/github/rosemoe/sora/lsp/client/languageserver/requestmanager/DefaultRequestManager.kt"
click node_lspconnection "https://github.com/rosemoe/sora-editor/blob/main/editor-lsp/src/main/java/io/github/rosemoe/sora/lsp/client/connection/StreamConnectionProvider.kt"
click node_lspfeatures "https://github.com/rosemoe/sora-editor/blob/main/editor-lsp/src/main/java/io/github/rosemoe/sora/lsp/editor/completion/CompletionItemProvider.kt"

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_content,node_undo,node_events,node_snippet,node_user toneBlue
class node_analysis,node_java,node_treesitter,node_completion,node_diagnostics,node_formatting toneAmber
class node_styles,node_graphics,node_brackets,node_lspserver toneMint
class node_lspeditor,node_lspmanager,node_lspconnection,node_lspfeatures toneRose
```

## Components

### Editing Core

- [Text content](https://github.com/rosemoe/sora-editor/blob/main/editor/src/main/java/io/github/rosemoe/sora/text/Content.kt): `editor/src/main/java/io/github/rosemoe/sora/text/Content.kt`
- [Undo manager](https://github.com/rosemoe/sora-editor/blob/main/editor/src/main/java/io/github/rosemoe/sora/text/UndoManager.java): `editor/src/main/java/io/github/rosemoe/sora/text/UndoManager.java`
- [Event system](https://github.com/rosemoe/sora-editor/blob/main/editor/src/main/java/io/github/rosemoe/sora/event/EventManager.java): `editor/src/main/java/io/github/rosemoe/sora/event/EventManager.java`
- [Snippet editing](https://github.com/rosemoe/sora-editor/blob/main/editor/src/main/java/io/github/rosemoe/sora/widget/snippet/SnippetController.kt): `editor/src/main/java/io/github/rosemoe/sora/widget/snippet/SnippetController.kt`

### Language Services

- [Incremental analysis](https://github.com/rosemoe/sora-editor/blob/main/editor/src/main/java/io/github/rosemoe/sora/lang/analysis/AsyncIncrementalAnalyzeManager.java): `editor/src/main/java/io/github/rosemoe/sora/lang/analysis/AsyncIncrementalAnalyzeManager.java`
- [Java analysis](https://github.com/rosemoe/sora-editor/blob/main/language-java/src/main/java/io/github/rosemoe/sora/langs/java/JavaIncrementalAnalyzeManager.java): `language-java/src/main/java/io/github/rosemoe/sora/langs/java/JavaIncrementalAnalyzeManager.java`
- [Tree-sitter analysis](https://github.com/rosemoe/sora-editor/blob/main/language-treesitter/src/main/java/io/github/rosemoe/sora/editor/ts/TsAnalyzeManager.kt): `language-treesitter/src/main/java/io/github/rosemoe/sora/editor/ts/TsAnalyzeManager.kt`
- [Completion and snippets](https://github.com/rosemoe/sora-editor/blob/main/editor/src/main/java/io/github/rosemoe/sora/lang/completion/CompletionItem.java): `editor/src/main/java/io/github/rosemoe/sora/lang/completion/CompletionItem.java`
- [Diagnostics](https://github.com/rosemoe/sora-editor/blob/main/editor/src/main/java/io/github/rosemoe/sora/lang/diagnostic/DiagnosticsContainer.java): `editor/src/main/java/io/github/rosemoe/sora/lang/diagnostic/DiagnosticsContainer.java`
- [Formatting](https://github.com/rosemoe/sora-editor/blob/main/editor/src/main/java/io/github/rosemoe/sora/lang/format/Formatter.java): `editor/src/main/java/io/github/rosemoe/sora/lang/format/Formatter.java`

### Editor Presentation

- [Styles and highlights](https://github.com/rosemoe/sora-editor/blob/main/editor/src/main/java/io/github/rosemoe/sora/lang/styling/Styles.java): `editor/src/main/java/io/github/rosemoe/sora/lang/styling/Styles.java`
- [Text rendering](https://github.com/rosemoe/sora-editor/blob/main/editor/src/main/java/io/github/rosemoe/sora/graphics/TextRow.java): `editor/src/main/java/io/github/rosemoe/sora/graphics/TextRow.java`
- [Bracket matching](https://github.com/rosemoe/sora-editor/blob/main/editor/src/main/java/io/github/rosemoe/sora/lang/brackets/OnlineBracketsMatcher.java): `editor/src/main/java/io/github/rosemoe/sora/lang/brackets/OnlineBracketsMatcher.java`

### LSP Integration

- [LSP editor](https://github.com/rosemoe/sora-editor/blob/main/editor-lsp/src/main/java/io/github/rosemoe/sora/lsp/editor/LspEditor.kt): `editor-lsp/src/main/java/io/github/rosemoe/sora/lsp/editor/LspEditor.kt`
- [LSP requests](https://github.com/rosemoe/sora-editor/blob/main/editor-lsp/src/main/java/io/github/rosemoe/sora/lsp/client/languageserver/requestmanager/DefaultRequestManager.kt): `editor-lsp/src/main/java/io/github/rosemoe/sora/lsp/client/languageserver/requestmanager/DefaultRequestManager.kt`
- [Server connections](https://github.com/rosemoe/sora-editor/blob/main/editor-lsp/src/main/java/io/github/rosemoe/sora/lsp/client/connection/StreamConnectionProvider.kt): `editor-lsp/src/main/java/io/github/rosemoe/sora/lsp/client/connection/StreamConnectionProvider.kt`
- [LSP editor features](https://github.com/rosemoe/sora-editor/blob/main/editor-lsp/src/main/java/io/github/rosemoe/sora/lsp/editor/completion/CompletionItemProvider.kt): `editor-lsp/src/main/java/io/github/rosemoe/sora/lsp/editor/completion/CompletionItemProvider.kt`

### Other components

- **Editor user**
- **Language server**

## Connections

- Editor user → Text content: edits text
- Text content → Undo manager: records changes
- Incremental analysis → Styles and highlights: publishes styles
- Java analysis → Incremental analysis: extends analysis
- Tree-sitter analysis → Styles and highlights: sets styles
- Styles and highlights → Text rendering: provides spans
- Editor user → Event system: triggers events
- Editor user → Snippet editing: edits placeholders
- LSP editor → LSP requests: requests features
- LSP requests → Language server: forwards requests
- Server connections → Language server: connects streams
- LSP editor features → LSP editor: presents results
