# shouvik-halder/streamingmarkdown architecture

> Architecture diagram of the GitHub repository shouvik-halder/streamingmarkdown, 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/shouvik-halder/streamingmarkdown
- Repository: https://github.com/shouvik-halder/streamingmarkdown

## Overview

StreamingMarkdown is a .NET library for parsing incrementally received Markdown, reporting document changes, and displaying Markdown in .NET MAUI. Its main workflow is appended text → stream processing → parsed document → diff/update; the MAUI layer provides a separate presentation capability. The README is empty, and several core and MAUI implementations were not sampled, so some internal wiring is shown only where the tree, names, or tests support it.

Main entry points: [`StreamingMarkdown.Core/Streaming/MarkdownStreamProcessor.cs`](https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Streaming/MarkdownStreamProcessor.cs) (Stream processor), [`StreamingMarkdown.Core/Parsing/MarkdigMarkdownParser.cs`](https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Parsing/MarkdigMarkdownParser.cs) (Markdig parser), [`StreamingMarkdown.Maui/Rendering/MarkdownInlineRenderer.cs`](https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Maui/Rendering/MarkdownInlineRenderer.cs) (Inline renderer), [`StreamingMarkdown.Core/Models/MarkdownDocument.cs`](https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Models/MarkdownDocument.cs) (Markdown document)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_stream["Streaming"]
  node_processor["Stream processor"]
  node_buffer["Markdown buffer<br/>[MarkdownBuffer.cs]"]
  node_context["Stream context"]
  node_state["Stream state"]
  node_update["Markdown update<br/>[MarkdownUpdate.cs]"]
end

subgraph group_parse["Parsing and model"]
  node_parser["Markdig parser"]
  node_document["Markdown document"]
  node_blocks["Block models<br/>[MarkdownBlock.cs]"]
  node_inlines["Inline models<br/>[MarkdownInline.cs]"]
end

subgraph group_diff["Change detection"]
  node_reconciler["Document reconciler"]
  node_diffengine["Diff engine"]
  node_diff["Markdown diff<br/>[MarkdownDiff.cs]"]
  node_changes["Block changes<br/>[MarkdownChange.cs]"]
end

subgraph group_maui["MAUI presentation"]
  node_view["Markdown view<br/>[MarkdownView.cs]"]
  node_docrenderer["Document renderer"]
  node_blockrenderer["Block renderer"]
  node_blockviews["Block views"]
  node_inlinerenderer["Inline renderer"]
  node_inlineviews["Inline rendering<br/>[InlineRenderer.cs]"]
  node_style["Markdown style<br/>[MarkdownStyle.cs]"]
end

node_producer(("Text producer"))
node_markdig["Markdig library"]

node_producer -->|"appends text"| node_processor
node_processor -->|"buffers text"| node_buffer
node_processor -->|"parses buffer"| node_parser
node_parser -->|"parses Markdown"| node_markdig
node_parser -->|"creates"| node_document
node_document -->|"contains blocks"| node_blocks
node_blocks -->|"contains inlines"| node_inlines
node_processor -->|"updates context"| node_context
node_processor -->|"tracks state"| node_state
node_processor -->|"reconciles"| node_reconciler
node_processor -->|"compares documents"| node_diffengine
node_diffengine -->|"produces"| node_diff
node_diff -->|"contains changes"| node_changes
node_processor -->|"returns update"| node_update
node_view -->|"renders document"| node_docrenderer
node_docrenderer -->|"renders blocks"| node_blockrenderer
node_blockrenderer -->|"creates views"| node_blockviews
node_blockviews -->|"renders inlines"| node_inlinerenderer
node_inlinerenderer -->|"creates formatted text"| node_inlineviews
node_inlinerenderer -->|"uses style"| node_style

click node_processor "https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Streaming/MarkdownStreamProcessor.cs"
click node_buffer "https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Streaming/MarkdownBuffer.cs"
click node_context "https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Streaming/MarkdownStreamContext.cs"
click node_state "https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Streaming/MarkdownStreamState.cs"
click node_update "https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Results/MarkdownUpdate.cs"
click node_parser "https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Parsing/MarkdigMarkdownParser.cs"
click node_document "https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Models/MarkdownDocument.cs"
click node_blocks "https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Models/Blocks/MarkdownBlock.cs"
click node_inlines "https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Models/Inlines/MarkdownInline.cs"
click node_reconciler "https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Diffing/DocumentReconciler.cs"
click node_diffengine "https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Diffing/DocumentDiffEngine.cs"
click node_diff "https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Diffing/MarkdownDiff.cs"
click node_changes "https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Diffing/MarkdownChange.cs"
click node_view "https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Maui/Controls/MarkdownView.cs"
click node_docrenderer "https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Maui/Rendering/MarkdownDocumentRenderer.cs"
click node_blockrenderer "https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Maui/Rendering/MarkdownBlockRenderer.cs"
click node_blockviews "https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Maui/Rendering/Views/IMarkdownBlockView.cs"
click node_inlinerenderer "https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Maui/Rendering/MarkdownInlineRenderer.cs"
click node_inlineviews "https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Maui/Rendering/InlineRenderer.cs"
click node_style "https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Maui/Styling/MarkdownStyle.cs"

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_processor,node_buffer,node_context,node_state,node_update toneBlue
class node_parser,node_document,node_blocks,node_inlines toneAmber
class node_reconciler,node_diffengine,node_diff,node_changes toneMint
class node_view,node_docrenderer,node_blockrenderer,node_blockviews,node_inlinerenderer,node_inlineviews,node_style toneRose
class node_producer,node_markdig toneIndigo
```

## Components

### Streaming

- [Stream processor](https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Streaming/MarkdownStreamProcessor.cs): `StreamingMarkdown.Core/Streaming/MarkdownStreamProcessor.cs`
- [Markdown buffer](https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Streaming/MarkdownBuffer.cs): `StreamingMarkdown.Core/Streaming/MarkdownBuffer.cs`
- [Stream context](https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Streaming/MarkdownStreamContext.cs): `StreamingMarkdown.Core/Streaming/MarkdownStreamContext.cs`
- [Stream state](https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Streaming/MarkdownStreamState.cs): `StreamingMarkdown.Core/Streaming/MarkdownStreamState.cs`
- [Markdown update](https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Results/MarkdownUpdate.cs): `StreamingMarkdown.Core/Results/MarkdownUpdate.cs`

### Parsing and model

- [Markdig parser](https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Parsing/MarkdigMarkdownParser.cs): `StreamingMarkdown.Core/Parsing/MarkdigMarkdownParser.cs`
- [Markdown document](https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Models/MarkdownDocument.cs): `StreamingMarkdown.Core/Models/MarkdownDocument.cs`
- [Block models](https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Models/Blocks/MarkdownBlock.cs): `StreamingMarkdown.Core/Models/Blocks/MarkdownBlock.cs`
- [Inline models](https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Models/Inlines/MarkdownInline.cs): `StreamingMarkdown.Core/Models/Inlines/MarkdownInline.cs`

### Change detection

- [Document reconciler](https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Diffing/DocumentReconciler.cs): `StreamingMarkdown.Core/Diffing/DocumentReconciler.cs`
- [Diff engine](https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Diffing/DocumentDiffEngine.cs): `StreamingMarkdown.Core/Diffing/DocumentDiffEngine.cs`
- [Markdown diff](https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Diffing/MarkdownDiff.cs): `StreamingMarkdown.Core/Diffing/MarkdownDiff.cs`
- [Block changes](https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Core/Diffing/MarkdownChange.cs): `StreamingMarkdown.Core/Diffing/MarkdownChange.cs`

### MAUI presentation

- [Markdown view](https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Maui/Controls/MarkdownView.cs): `StreamingMarkdown.Maui/Controls/MarkdownView.cs`
- [Document renderer](https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Maui/Rendering/MarkdownDocumentRenderer.cs): `StreamingMarkdown.Maui/Rendering/MarkdownDocumentRenderer.cs`
- [Block renderer](https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Maui/Rendering/MarkdownBlockRenderer.cs): `StreamingMarkdown.Maui/Rendering/MarkdownBlockRenderer.cs`
- [Block views](https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Maui/Rendering/Views/IMarkdownBlockView.cs): `StreamingMarkdown.Maui/Rendering/Views/IMarkdownBlockView.cs`
- [Inline renderer](https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Maui/Rendering/MarkdownInlineRenderer.cs): `StreamingMarkdown.Maui/Rendering/MarkdownInlineRenderer.cs`
- [Inline rendering](https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Maui/Rendering/InlineRenderer.cs): `StreamingMarkdown.Maui/Rendering/InlineRenderer.cs`
- [Markdown style](https://github.com/shouvik-halder/streamingmarkdown/blob/main/StreamingMarkdown.Maui/Styling/MarkdownStyle.cs): `StreamingMarkdown.Maui/Styling/MarkdownStyle.cs`

### Other components

- **Text producer**
- **Markdig library**

## Connections

- Text producer → Stream processor: appends text
- Stream processor → Markdown buffer: buffers text
- Stream processor → Markdig parser: parses buffer
- Markdig parser → Markdig library: parses Markdown
- Markdig parser → Markdown document: creates
- Markdown document → Block models: contains blocks
- Block models → Inline models: contains inlines
- Stream processor → Stream context: updates context
- Stream processor → Stream state: tracks state
- Stream processor → Document reconciler: reconciles
- Stream processor → Diff engine: compares documents
- Diff engine → Markdown diff: produces
- Markdown diff → Block changes: contains changes
- Stream processor → Markdown update: returns update
- Markdown view → Document renderer: renders document
- Document renderer → Block renderer: renders blocks
- Block renderer → Block views: creates views
- Block views → Inline renderer: renders inlines
- Inline renderer → Inline rendering: creates formatted text
- Inline renderer → Markdown style: uses style
