# va-desai-dev/writertex architecture

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

- Interactive diagram: https://gitdiagram.com/va-desai-dev/writertex
- Repository: https://github.com/va-desai-dev/writertex

## Overview

WriterTex is a macOS scholarly workspace with two principal workflows: authors manage a manuscript and its references while writing and exporting; researchers import data into a StatTex notebook, configure analyses, and review or export results. CiteTex adds Safari citation capture, and Crossref search supports reference discovery. The graph follows documented capabilities and indexed module references; unsampled UI and export internals are represented only at their supported subsystem paths, so some links are intentionally omitted.

Main entry points: [`WriterTex/AppClasses/CiteTex/Library/BibLibrary.swift`](https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/CiteTex/Library/BibLibrary.swift) (Bibliography Library), [`WriterTex/AppClasses/AnalysisControl/NotebookModel.swift`](https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/AnalysisControl/NotebookModel.swift) (Notebook Model), [`WriterTex/AppScreens/WriterTexApp.swift`](https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppScreens/WriterTexApp.swift) (WriterTex App), [`WriterTex/AppScreens/ManuscriptWorkspaceView.swift`](https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppScreens/ManuscriptWorkspaceView.swift) (Manuscript Workspace)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workspace["Workspace and Documents"]
  node_app["WriterTex App<br/>[WriterTexApp.swift]"]
  node_manuscript_ui["Manuscript Workspace"]
  node_notebook_ui["Notebook Workspace"]
end

subgraph group_writing["Manuscript and References"]
  node_manuscript_file["Manuscript Document"]
  node_editor["Rich Text Editor"]
  node_editor_session["Editor Session"]
  node_exports["Document Export"]
  node_bib_library[("Bibliography Library<br/>[BibLibrary.swift]")]
  node_bib_document["BibTeX Document<br/>[BibDocument.swift]"]
  node_bib_parser["BibTeX Parser<br/>[BibTeXParser.swift]"]
  node_citation_model["Citation Records<br/>[Citation.swift]"]
  node_citation_normalizer["Citation Normalizer"]
  node_csl_renderer["CSL Citation Renderer<br/>[CSLRenderer.swift]"]
  node_crossref_ui["Crossref Search UI"]
  node_crossref_model["Crossref Search"]
end

subgraph group_analysis["StatTex Analysis"]
  node_notebook_file["Notebook Package<br/>[NotebookFile.swift]"]
  node_notebook_model["Notebook Model"]
  node_analysis_step["Analysis Steps<br/>[AnalysisStep.swift]"]
  node_analysis_kernel["Statistics Kernel"]
  node_analysis_report["Analysis Report"]
end

subgraph group_capture["Citation Integrations"]
  node_cite_extension["CiteTex Extension"]
  node_cite_inbox[("Shared Citation Inbox<br/>[CiteTexInbox.swift]")]
end

node_author(("Researcher"))
node_safari(("Safari User"))
node_crossref["Crossref Service"]

node_author -->|"opens workspace"| node_app
node_app -->|"offers writing"| node_manuscript_ui
node_app -->|"offers analysis"| node_notebook_ui
node_manuscript_ui -.->|"opens document"| node_manuscript_file
node_manuscript_file -->|"provides editor"| node_editor_session
node_editor_session -->|"coordinates editing"| node_editor
node_manuscript_file -->|"holds bibliography"| node_bib_library
node_bib_library -->|"reads and updates"| node_bib_document
node_bib_parser -->|"parses records"| node_citation_model
node_bib_parser -->|"normalizes records"| node_citation_normalizer
node_editor_session -->|"reads references"| node_bib_library
node_editor -.->|"exports document"| node_exports
node_author -->|"searches references"| node_crossref_ui
node_crossref_ui -->|"submits search"| node_crossref_model
node_crossref_model -->|"queries metadata"| node_crossref
node_crossref_model -.->|"adds citation"| node_bib_library
node_author -->|"imports and analyzes"| node_notebook_ui
node_notebook_ui -->|"configures analysis"| node_notebook_model
node_notebook_model -->|"persists steps and data"| node_notebook_file
node_notebook_model -->|"runs configured steps"| node_analysis_step
node_analysis_kernel -->|"executes step"| node_analysis_step
node_notebook_model -->|"runs analysis"| node_analysis_kernel
node_notebook_model -->|"creates report"| node_analysis_report
node_author -.->|"reads research"| node_safari
node_safari -->|"captures citation"| node_cite_extension
node_cite_extension -->|"queues citations"| node_cite_inbox
node_bib_library -->|"drains captures"| node_cite_inbox
node_bib_library -->|"adds captured records"| node_citation_model
node_manuscript_ui -.->|"formats citations"| node_csl_renderer

click node_app "https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppScreens/WriterTexApp.swift"
click node_manuscript_ui "https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppScreens/ManuscriptWorkspaceView.swift"
click node_notebook_ui "https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppScreens/NoteBookWorkspaceView.swift"
click node_manuscript_file "https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/DocumentControl/ManuscriptFile.swift"
click node_editor "https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/EditorControl/MarkdownRichTextView.swift"
click node_editor_session "https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/EditorControl/EditorSession.swift"
click node_exports "https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/EditorControl/ManuscriptPDF.swift"
click node_bib_library "https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/CiteTex/Library/BibLibrary.swift"
click node_bib_document "https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/CiteTex/BibTeX/BibDocument.swift"
click node_bib_parser "https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/CiteTex/BibTeX/BibTeXParser.swift"
click node_citation_model "https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/CiteTex/BibTeX/Citation.swift"
click node_citation_normalizer "https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/CiteTex/BibTeX/CitationNormalizer.swift"
click node_csl_renderer "https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/CiteTex/CSL/CSLRenderer.swift"
click node_crossref_ui "https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppScreens/EphemeralViews/CrossrefSearchSheet.swift"
click node_crossref_model "https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/BibliographyWritingControl/CrossrefSearchModel.swift"
click node_notebook_file "https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/DocumentControl/NotebookFile.swift"
click node_notebook_model "https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/AnalysisControl/NotebookModel.swift"
click node_analysis_step "https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/AnalysisControl/AnalysisStep.swift"
click node_analysis_kernel "https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/AnalysisControl/AnalysisKernel.swift"
click node_analysis_report "https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/AnalysisControl/NotebookReport.swift"
click node_cite_extension "https://github.com/va-desai-dev/writertex/blob/origin/WriterTexCiteTex/SafariWebExtensionHandler.swift"
click node_cite_inbox "https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/CiteTex/BibTeX/CiteTexInbox.swift"

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_manuscript_ui,node_notebook_ui,node_safari toneBlue
class node_manuscript_file,node_editor,node_editor_session,node_exports,node_bib_library,node_bib_document,node_bib_parser,node_citation_model,node_citation_normalizer,node_csl_renderer,node_crossref_ui,node_crossref_model toneAmber
class node_notebook_file,node_notebook_model,node_analysis_step,node_analysis_kernel,node_analysis_report toneMint
class node_cite_extension,node_cite_inbox toneRose
class node_author,node_crossref toneIndigo
```

## Components

### Workspace and Documents

- [WriterTex App](https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppScreens/WriterTexApp.swift): `WriterTex/AppScreens/WriterTexApp.swift`
- [Manuscript Workspace](https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppScreens/ManuscriptWorkspaceView.swift): `WriterTex/AppScreens/ManuscriptWorkspaceView.swift`
- [Notebook Workspace](https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppScreens/NoteBookWorkspaceView.swift): `WriterTex/AppScreens/NoteBookWorkspaceView.swift`

### Manuscript and References

- [Manuscript Document](https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/DocumentControl/ManuscriptFile.swift): `WriterTex/AppClasses/DocumentControl/ManuscriptFile.swift`
- [Rich Text Editor](https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/EditorControl/MarkdownRichTextView.swift): `WriterTex/AppClasses/EditorControl/MarkdownRichTextView.swift`
- [Editor Session](https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/EditorControl/EditorSession.swift): `WriterTex/AppClasses/EditorControl/EditorSession.swift`
- [Document Export](https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/EditorControl/ManuscriptPDF.swift): `WriterTex/AppClasses/EditorControl/ManuscriptPDF.swift`
- [Bibliography Library](https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/CiteTex/Library/BibLibrary.swift): `WriterTex/AppClasses/CiteTex/Library/BibLibrary.swift`
- [BibTeX Document](https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/CiteTex/BibTeX/BibDocument.swift): `WriterTex/AppClasses/CiteTex/BibTeX/BibDocument.swift`
- [BibTeX Parser](https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/CiteTex/BibTeX/BibTeXParser.swift): `WriterTex/AppClasses/CiteTex/BibTeX/BibTeXParser.swift`
- [Citation Records](https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/CiteTex/BibTeX/Citation.swift): `WriterTex/AppClasses/CiteTex/BibTeX/Citation.swift`
- [Citation Normalizer](https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/CiteTex/BibTeX/CitationNormalizer.swift): `WriterTex/AppClasses/CiteTex/BibTeX/CitationNormalizer.swift`
- [CSL Citation Renderer](https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/CiteTex/CSL/CSLRenderer.swift): `WriterTex/AppClasses/CiteTex/CSL/CSLRenderer.swift`
- [Crossref Search UI](https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppScreens/EphemeralViews/CrossrefSearchSheet.swift): `WriterTex/AppScreens/EphemeralViews/CrossrefSearchSheet.swift`
- [Crossref Search](https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/BibliographyWritingControl/CrossrefSearchModel.swift): `WriterTex/AppClasses/BibliographyWritingControl/CrossrefSearchModel.swift`

### StatTex Analysis

- [Notebook Package](https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/DocumentControl/NotebookFile.swift): `WriterTex/AppClasses/DocumentControl/NotebookFile.swift`
- [Notebook Model](https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/AnalysisControl/NotebookModel.swift): `WriterTex/AppClasses/AnalysisControl/NotebookModel.swift`
- [Analysis Steps](https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/AnalysisControl/AnalysisStep.swift): `WriterTex/AppClasses/AnalysisControl/AnalysisStep.swift`
- [Statistics Kernel](https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/AnalysisControl/AnalysisKernel.swift): `WriterTex/AppClasses/AnalysisControl/AnalysisKernel.swift`
- [Analysis Report](https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/AnalysisControl/NotebookReport.swift): `WriterTex/AppClasses/AnalysisControl/NotebookReport.swift`

### Citation Integrations

- [CiteTex Extension](https://github.com/va-desai-dev/writertex/blob/origin/WriterTexCiteTex/SafariWebExtensionHandler.swift): `WriterTexCiteTex/SafariWebExtensionHandler.swift`
- [Shared Citation Inbox](https://github.com/va-desai-dev/writertex/blob/origin/WriterTex/AppClasses/CiteTex/BibTeX/CiteTexInbox.swift): `WriterTex/AppClasses/CiteTex/BibTeX/CiteTexInbox.swift`

### Other components

- **Researcher**
- **Safari User**
- **Crossref Service**

## Connections

- Researcher → WriterTex App: opens workspace (evidence: `README.md`)
- WriterTex App → Manuscript Workspace: offers writing
- WriterTex App → Notebook Workspace: offers analysis
- Manuscript Workspace → Manuscript Document: opens document
- Manuscript Document → Editor Session: provides editor (evidence: `WriterTex/AppClasses/DocumentControl/ManuscriptFile.swift`)
- Editor Session → Rich Text Editor: coordinates editing (evidence: `WriterTex/AppClasses/EditorControl/EditorSession.swift`)
- Manuscript Document → Bibliography Library: holds bibliography (evidence: `WriterTex/AppClasses/DocumentControl/ManuscriptFile.swift`)
- Bibliography Library → BibTeX Document: reads and updates (evidence: `WriterTex/AppClasses/CiteTex/Library/BibLibrary.swift`)
- BibTeX Parser → Citation Records: parses records (evidence: `WriterTex/AppClasses/CiteTex/BibTeX/BibTeXParser.swift`)
- BibTeX Parser → Citation Normalizer: normalizes records (evidence: `WriterTex/AppClasses/CiteTex/BibTeX/BibTeXParser.swift`)
- Editor Session → Bibliography Library: reads references (evidence: `WriterTex/AppClasses/EditorControl/EditorSession.swift`)
- Rich Text Editor → Document Export: exports document
- Researcher → Crossref Search UI: searches references (evidence: `README.md`)
- Crossref Search UI → Crossref Search: submits search (evidence: `WriterTex/AppScreens/EphemeralViews/CrossrefSearchSheet.swift`)
- Crossref Search → Crossref Service: queries metadata (evidence: `WriterTex/AppClasses/BibliographyWritingControl/CrossrefSearchModel.swift`)
- Crossref Search → Bibliography Library: adds citation
- Researcher → Notebook Workspace: imports and analyzes (evidence: `README.md`)
- Notebook Workspace → Notebook Model: configures analysis (evidence: `WriterTex/AppScreens/NoteBookWorkspaceView.swift`)
- Notebook Model → Notebook Package: persists steps and data (evidence: `WriterTex/AppClasses/AnalysisControl/NotebookModel.swift`)
- Notebook Model → Analysis Steps: runs configured steps (evidence: `WriterTex/AppClasses/AnalysisControl/NotebookModel.swift`)
- Statistics Kernel → Analysis Steps: executes step (evidence: `WriterTex/AppClasses/AnalysisControl/AnalysisKernel.swift`)
- Notebook Model → Statistics Kernel: runs analysis (evidence: `WriterTex/AppClasses/AnalysisControl/NotebookModel.swift`)
- Notebook Model → Analysis Report: creates report (evidence: `WriterTex/AppClasses/AnalysisControl/NotebookModel.swift`)
- Researcher → Safari User: reads research
- Safari User → CiteTex Extension: captures citation (evidence: `README.md`)
- CiteTex Extension → Shared Citation Inbox: queues citations (evidence: `WriterTexCiteTex/SafariWebExtensionHandler.swift`)
- Bibliography Library → Shared Citation Inbox: drains captures (evidence: `WriterTex/AppClasses/CiteTex/Library/BibLibrary.swift`)
- Bibliography Library → Citation Records: adds captured records (evidence: `WriterTex/AppClasses/CiteTex/Library/BibLibrary.swift`)
- Manuscript Workspace → CSL Citation Renderer: formats citations
