# hukernel/essay architecture

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

## Overview

随记是本地优先的 Electron 桌面笔记应用。用户通过窗口快速创建或打开记录，在富文本编辑器中整理内容；渲染层经 preload 暴露的桥接调用主进程，主进程负责本地存储及数据操作。记录管理、搜索、导入导出和隐私设置是围绕编辑工作流的主要分支。README 描述了 SQLite、备份恢复等能力；由于相关实现未完整采样，图中仅保留有路径和文档依据的连接。

Main entry points: [`src/renderer/App.tsx`](https://github.com/hukernel/essay/blob/main/src/renderer/App.tsx) (应用协调界面), [`src/main/main.ts`](https://github.com/hukernel/essay/blob/main/src/main/main.ts) (Electron 主进程), [`src/main/note-transfer.ts`](https://github.com/hukernel/essay/blob/main/src/main/note-transfer.ts) (笔记导入导出), [`src/main/preload.ts`](https://github.com/hukernel/essay/blob/main/src/main/preload.ts) (Preload 桥接)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_desktop["桌面入口"]
  node_app["Electron 主进程<br/>[main.ts]"]
  node_bridge["Preload 桥接<br/>[preload.ts]"]
  node_security["隐私与安全<br/>[security.ts]"]
  node_transfer["笔记导入导出<br/>[note-transfer.ts]"]
  node_html["HTML 导出<br/>[html-export.ts]"]
  node_db[("本地 SQLite 与索引<br/>[main.ts]")]
end

subgraph group_interface["笔记界面"]
  node_renderer["应用协调界面<br/>[App.tsx]"]
  node_home["工作区与记录列表<br/>[WorkspaceHome.tsx]"]
  node_list["文档列表"]
  node_editor["富文本编辑器<br/>[EditorArea.tsx]"]
  node_format["格式面板<br/>[FormatPanel.tsx]"]
  node_palette["命令与快速操作<br/>[CommandPalette.tsx]"]
  node_settings["偏好与数据设置<br/>[SettingsModal.tsx]"]
  node_find["查找面板<br/>[FindPanel.tsx]"]
end

subgraph group_domain["笔记内容"]
  node_extensions["编辑器扩展"]
  node_textutils["文本与搜索辅助<br/>[text.ts]"]
end

subgraph group_formats["共享转换"]
  node_types["笔记与设置类型<br/>[types.ts]"]
  node_markdownparse["Markdown 转文档<br/>[markdown-doc.ts]"]
  node_markdownwrite["文档转 Markdown<br/>[markdown.ts]"]
  node_metadata["笔记元数据<br/>[note-metadata.ts]"]
  node_assets["笔记图片资源<br/>[note-assets.ts]"]
end

node_user(("用户"))

node_user -->|"操作笔记"| node_renderer
node_renderer -->|"呈现工作区"| node_home
node_renderer -->|"呈现记录"| node_list
node_renderer -->|"编辑内容"| node_editor
node_renderer -->|"调度命令"| node_palette
node_renderer -->|"配置数据"| node_settings
node_renderer -->|"查找替换"| node_find
node_editor -->|"启用扩展"| node_extensions
node_renderer -->|"处理查询文本"| node_textutils
node_renderer -->|"调用桌面 API"| node_bridge
node_bridge -->|"转发 IPC"| node_app
node_app -->|"读写笔记"| node_db
node_app -->|"校验与保护"| node_security
node_app -->|"执行数据迁移"| node_transfer
node_transfer -->|"解析导入文档"| node_markdownparse
node_transfer -->|"生成 Markdown"| node_markdownwrite
node_app -->|"生成 HTML"| node_html
node_app -->|"处理笔记资源"| node_assets
node_renderer -->|"移除元数据"| node_metadata
node_renderer -->|"使用共享类型"| node_types
node_app -->|"使用共享类型"| node_types

click node_app "https://github.com/hukernel/essay/blob/main/src/main/main.ts"
click node_bridge "https://github.com/hukernel/essay/blob/main/src/main/preload.ts"
click node_security "https://github.com/hukernel/essay/blob/main/src/main/security.ts"
click node_transfer "https://github.com/hukernel/essay/blob/main/src/main/note-transfer.ts"
click node_html "https://github.com/hukernel/essay/blob/main/src/main/html-export.ts"
click node_renderer "https://github.com/hukernel/essay/blob/main/src/renderer/App.tsx"
click node_home "https://github.com/hukernel/essay/blob/main/src/renderer/components/WorkspaceHome.tsx"
click node_list "https://github.com/hukernel/essay/blob/main/src/renderer/components/DocumentListPage.tsx"
click node_editor "https://github.com/hukernel/essay/blob/main/src/renderer/components/EditorArea.tsx"
click node_format "https://github.com/hukernel/essay/blob/main/src/renderer/components/FormatPanel.tsx"
click node_palette "https://github.com/hukernel/essay/blob/main/src/renderer/components/CommandPalette.tsx"
click node_settings "https://github.com/hukernel/essay/blob/main/src/renderer/components/SettingsModal.tsx"
click node_find "https://github.com/hukernel/essay/blob/main/src/renderer/components/FindPanel.tsx"
click node_extensions "https://github.com/hukernel/essay/tree/main/src/renderer/editor"
click node_textutils "https://github.com/hukernel/essay/blob/main/src/renderer/utils/text.ts"
click node_db "https://github.com/hukernel/essay/blob/main/src/main/main.ts"
click node_types "https://github.com/hukernel/essay/blob/main/src/shared/types.ts"
click node_markdownparse "https://github.com/hukernel/essay/blob/main/src/shared/markdown-doc.ts"
click node_markdownwrite "https://github.com/hukernel/essay/blob/main/src/shared/markdown.ts"
click node_metadata "https://github.com/hukernel/essay/blob/main/src/shared/note-metadata.ts"
click node_assets "https://github.com/hukernel/essay/blob/main/src/shared/note-assets.ts"

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_bridge,node_security,node_transfer,node_html,node_db toneBlue
class node_renderer,node_home,node_list,node_editor,node_format,node_palette,node_settings,node_find toneAmber
class node_extensions,node_textutils toneMint
class node_types,node_markdownparse,node_markdownwrite,node_metadata,node_assets toneRose
class node_user toneIndigo
```

## Components

### 桌面入口

- [Electron 主进程](https://github.com/hukernel/essay/blob/main/src/main/main.ts): `src/main/main.ts`
- [Preload 桥接](https://github.com/hukernel/essay/blob/main/src/main/preload.ts): `src/main/preload.ts`
- [隐私与安全](https://github.com/hukernel/essay/blob/main/src/main/security.ts): `src/main/security.ts`
- [笔记导入导出](https://github.com/hukernel/essay/blob/main/src/main/note-transfer.ts): `src/main/note-transfer.ts`
- [HTML 导出](https://github.com/hukernel/essay/blob/main/src/main/html-export.ts): `src/main/html-export.ts`
- [本地 SQLite 与索引](https://github.com/hukernel/essay/blob/main/src/main/main.ts): `src/main/main.ts`

### 笔记界面

- [应用协调界面](https://github.com/hukernel/essay/blob/main/src/renderer/App.tsx): `src/renderer/App.tsx`
- [工作区与记录列表](https://github.com/hukernel/essay/blob/main/src/renderer/components/WorkspaceHome.tsx): `src/renderer/components/WorkspaceHome.tsx`
- [文档列表](https://github.com/hukernel/essay/blob/main/src/renderer/components/DocumentListPage.tsx): `src/renderer/components/DocumentListPage.tsx`
- [富文本编辑器](https://github.com/hukernel/essay/blob/main/src/renderer/components/EditorArea.tsx): `src/renderer/components/EditorArea.tsx`
- [格式面板](https://github.com/hukernel/essay/blob/main/src/renderer/components/FormatPanel.tsx): `src/renderer/components/FormatPanel.tsx`
- [命令与快速操作](https://github.com/hukernel/essay/blob/main/src/renderer/components/CommandPalette.tsx): `src/renderer/components/CommandPalette.tsx`
- [偏好与数据设置](https://github.com/hukernel/essay/blob/main/src/renderer/components/SettingsModal.tsx): `src/renderer/components/SettingsModal.tsx`
- [查找面板](https://github.com/hukernel/essay/blob/main/src/renderer/components/FindPanel.tsx): `src/renderer/components/FindPanel.tsx`

### 笔记内容

- [编辑器扩展](https://github.com/hukernel/essay/tree/main/src/renderer/editor): `src/renderer/editor`
- [文本与搜索辅助](https://github.com/hukernel/essay/blob/main/src/renderer/utils/text.ts): `src/renderer/utils/text.ts`

### 共享转换

- [笔记与设置类型](https://github.com/hukernel/essay/blob/main/src/shared/types.ts): `src/shared/types.ts`
- [Markdown 转文档](https://github.com/hukernel/essay/blob/main/src/shared/markdown-doc.ts): `src/shared/markdown-doc.ts`
- [文档转 Markdown](https://github.com/hukernel/essay/blob/main/src/shared/markdown.ts): `src/shared/markdown.ts`
- [笔记元数据](https://github.com/hukernel/essay/blob/main/src/shared/note-metadata.ts): `src/shared/note-metadata.ts`
- [笔记图片资源](https://github.com/hukernel/essay/blob/main/src/shared/note-assets.ts): `src/shared/note-assets.ts`

### Other components

- **用户**

## Connections

- 用户 → 应用协调界面: 操作笔记
- 应用协调界面 → 工作区与记录列表: 呈现工作区
- 应用协调界面 → 文档列表: 呈现记录
- 应用协调界面 → 富文本编辑器: 编辑内容
- 应用协调界面 → 命令与快速操作: 调度命令
- 应用协调界面 → 偏好与数据设置: 配置数据
- 应用协调界面 → 查找面板: 查找替换
- 富文本编辑器 → 编辑器扩展: 启用扩展
- 应用协调界面 → 文本与搜索辅助: 处理查询文本
- 应用协调界面 → Preload 桥接: 调用桌面 API
- Preload 桥接 → Electron 主进程: 转发 IPC
- Electron 主进程 → 本地 SQLite 与索引: 读写笔记
- Electron 主进程 → 隐私与安全: 校验与保护
- Electron 主进程 → 笔记导入导出: 执行数据迁移
- 笔记导入导出 → Markdown 转文档: 解析导入文档
- 笔记导入导出 → 文档转 Markdown: 生成 Markdown
- Electron 主进程 → HTML 导出: 生成 HTML
- Electron 主进程 → 笔记图片资源: 处理笔记资源
- 应用协调界面 → 笔记元数据: 移除元数据
- 应用协调界面 → 笔记与设置类型: 使用共享类型
- Electron 主进程 → 笔记与设置类型: 使用共享类型
