# ishizakahiroshi/offline-md-editor-viewer architecture

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

- Interactive diagram: https://gitdiagram.com/ishizakahiroshi/offline-md-editor-viewer
- Repository: https://github.com/ishizakahiroshi/offline-md-editor-viewer

## Overview

This is an offline-first Markdown editor/viewer for browser and Windows desktop use: users open or choose a Markdown file, edit its source, see a live rendered preview, and save back locally. The README also documents folder browsing, tabs, search/replace, navigation, themes, localization, and desktop-specific file access. The browser implementation is a single HTML file and the Rust excerpt supports the desktop IPC and filesystem boundary; unsampled UI wiring is not inferred beyond documented behavior.

Main entry points: [`apps/browser/offline-md-editor-viewer.html`](https://github.com/ishizakahiroshi/offline-md-editor-viewer/blob/main/apps/browser/offline-md-editor-viewer.html) (Browser editor), [`apps/desktop/src-tauri/src/lib.rs`](https://github.com/ishizakahiroshi/offline-md-editor-viewer/blob/main/apps/desktop/src-tauri/src/lib.rs) (Desktop filesystem), [`apps/npm/bin/offline-md-editor-viewer.js`](https://github.com/ishizakahiroshi/offline-md-editor-viewer/blob/main/apps/npm/bin/offline-md-editor-viewer.js) (npm launcher)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_editing["Editing Experience"]
  node_browser["Browser editor"]
  node_markdown["Markdown rendering"]
  node_editor_tools["Editor tools"]
  node_document_state["Document state"]
end

subgraph group_files["Local Files"]
  node_local_files["Local files"]
  node_folder_browsing["Folder browsing"]
  node_encoding["Encoding handling"]
end

subgraph group_desktop["Desktop Integration"]
  node_desktop_shell["Desktop shell<br/>[lib.rs]"]
  node_desktop_fs["Desktop filesystem<br/>[lib.rs]"]
  node_workspace_access["Workspace authorization<br/>[lib.rs]"]
  node_external_links["External links<br/>[lib.rs]"]
end

subgraph group_launch["App Launch"]
  node_npm_launcher["npm launcher"]
end

node_user(("User"))
node_default_browser(("Default browser"))

node_user -->|"opens app"| node_browser
node_user -->|"opens file"| node_local_files
node_browser -->|"renders edits"| node_markdown
node_browser -->|"updates state"| node_document_state
node_browser -->|"provides tools"| node_editor_tools
node_browser -->|"reads and saves"| node_local_files
node_browser -->|"browses folders"| node_folder_browsing
node_browser -->|"decodes and encodes"| node_encoding
node_user -->|"opens desktop app"| node_desktop_shell
node_desktop_shell -->|"hosts interface"| node_browser
node_browser -->|"invokes file commands"| node_desktop_fs
node_desktop_fs -->|"checks paths"| node_workspace_access
node_desktop_fs -->|"reads and writes"| node_local_files
node_browser -.->|"requests opt-in URL"| node_external_links
node_user -->|"runs command"| node_npm_launcher
node_npm_launcher -->|"opens bundled app"| node_default_browser

click node_browser "https://github.com/ishizakahiroshi/offline-md-editor-viewer/blob/main/apps/browser/offline-md-editor-viewer.html"
click node_markdown "https://github.com/ishizakahiroshi/offline-md-editor-viewer/blob/main/apps/browser/offline-md-editor-viewer.html"
click node_editor_tools "https://github.com/ishizakahiroshi/offline-md-editor-viewer/blob/main/apps/browser/offline-md-editor-viewer.html"
click node_document_state "https://github.com/ishizakahiroshi/offline-md-editor-viewer/blob/main/apps/browser/offline-md-editor-viewer.html"
click node_local_files "https://github.com/ishizakahiroshi/offline-md-editor-viewer/blob/main/apps/browser/offline-md-editor-viewer.html"
click node_folder_browsing "https://github.com/ishizakahiroshi/offline-md-editor-viewer/blob/main/apps/browser/offline-md-editor-viewer.html"
click node_encoding "https://github.com/ishizakahiroshi/offline-md-editor-viewer/blob/main/apps/browser/offline-md-editor-viewer.html"
click node_desktop_shell "https://github.com/ishizakahiroshi/offline-md-editor-viewer/blob/main/apps/desktop/src-tauri/src/lib.rs"
click node_desktop_fs "https://github.com/ishizakahiroshi/offline-md-editor-viewer/blob/main/apps/desktop/src-tauri/src/lib.rs"
click node_workspace_access "https://github.com/ishizakahiroshi/offline-md-editor-viewer/blob/main/apps/desktop/src-tauri/src/lib.rs"
click node_external_links "https://github.com/ishizakahiroshi/offline-md-editor-viewer/blob/main/apps/desktop/src-tauri/src/lib.rs"
click node_npm_launcher "https://github.com/ishizakahiroshi/offline-md-editor-viewer/blob/main/apps/npm/bin/offline-md-editor-viewer.js"

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_browser,node_markdown,node_editor_tools,node_document_state,node_user,node_default_browser toneBlue
class node_local_files,node_folder_browsing,node_encoding toneAmber
class node_desktop_shell,node_desktop_fs,node_workspace_access,node_external_links toneMint
class node_npm_launcher toneRose
```

## Components

### Editing Experience

- [Browser editor](https://github.com/ishizakahiroshi/offline-md-editor-viewer/blob/main/apps/browser/offline-md-editor-viewer.html): `apps/browser/offline-md-editor-viewer.html`
- [Markdown rendering](https://github.com/ishizakahiroshi/offline-md-editor-viewer/blob/main/apps/browser/offline-md-editor-viewer.html): `apps/browser/offline-md-editor-viewer.html`
- [Editor tools](https://github.com/ishizakahiroshi/offline-md-editor-viewer/blob/main/apps/browser/offline-md-editor-viewer.html): `apps/browser/offline-md-editor-viewer.html`
- [Document state](https://github.com/ishizakahiroshi/offline-md-editor-viewer/blob/main/apps/browser/offline-md-editor-viewer.html): `apps/browser/offline-md-editor-viewer.html`

### Local Files

- [Local files](https://github.com/ishizakahiroshi/offline-md-editor-viewer/blob/main/apps/browser/offline-md-editor-viewer.html): `apps/browser/offline-md-editor-viewer.html`
- [Folder browsing](https://github.com/ishizakahiroshi/offline-md-editor-viewer/blob/main/apps/browser/offline-md-editor-viewer.html): `apps/browser/offline-md-editor-viewer.html`
- [Encoding handling](https://github.com/ishizakahiroshi/offline-md-editor-viewer/blob/main/apps/browser/offline-md-editor-viewer.html): `apps/browser/offline-md-editor-viewer.html`

### Desktop Integration

- [Desktop shell](https://github.com/ishizakahiroshi/offline-md-editor-viewer/blob/main/apps/desktop/src-tauri/src/lib.rs): `apps/desktop/src-tauri/src/lib.rs`
- [Desktop filesystem](https://github.com/ishizakahiroshi/offline-md-editor-viewer/blob/main/apps/desktop/src-tauri/src/lib.rs): `apps/desktop/src-tauri/src/lib.rs`
- [Workspace authorization](https://github.com/ishizakahiroshi/offline-md-editor-viewer/blob/main/apps/desktop/src-tauri/src/lib.rs): `apps/desktop/src-tauri/src/lib.rs`
- [External links](https://github.com/ishizakahiroshi/offline-md-editor-viewer/blob/main/apps/desktop/src-tauri/src/lib.rs): `apps/desktop/src-tauri/src/lib.rs`

### App Launch

- [npm launcher](https://github.com/ishizakahiroshi/offline-md-editor-viewer/blob/main/apps/npm/bin/offline-md-editor-viewer.js): `apps/npm/bin/offline-md-editor-viewer.js`

### Other components

- **User**
- **Default browser**

## Connections

- User → Browser editor: opens app
- User → Local files: opens file
- Browser editor → Markdown rendering: renders edits
- Browser editor → Document state: updates state
- Browser editor → Editor tools: provides tools
- Browser editor → Local files: reads and saves
- Browser editor → Folder browsing: browses folders
- Browser editor → Encoding handling: decodes and encodes
- User → Desktop shell: opens desktop app
- Desktop shell → Browser editor: hosts interface
- Browser editor → Desktop filesystem: invokes file commands
- Desktop filesystem → Workspace authorization: checks paths
- Desktop filesystem → Local files: reads and writes
- Browser editor → External links: requests opt-in URL
- User → npm launcher: runs command
- npm launcher → Default browser: opens bundled app
