BlogEdit:基于 Tauri 2 + SvelteKit 5 的 Hugo 博客桌面客户端

如果你是一名 Hugo 博客作者,日常编辑文章需要 SSH 登录服务器、手动创建 Markdown、运行部署命令,那么 BlogEdit 正是为了简化这一流程而生。它是一款桌面客户端,通过 SSH 远程管理博客文章,集成 AI 辅助写作与一键部署,让撰写和发布博客变得更流畅。

核心功能一览

  • 远程文章管理:通过 SSH 连接服务器,浏览、创建、编辑、删除文章,所有操作实时同步。
  • 智能排序与搜索:支持按日期/标题排序、关键词搜索,快速定位文章。
  • 信息统计:提供文章总数、字数、月度分布、标签统计等仪表盘。
  • AI 辅助写作:集成 OpenAI 兼容 API,可在编辑器内直接与 AI 对话,获取写作建议。
  • 一键部署:编辑完成后,一键触发 hugo --minify,自动发布。
  • 安全连接:采用系统 SSH (ControlMaster) 优先免密登录,失败后回退至 sshpass 密码认证。

技术栈

层级技术
前端SvelteKit 2 (SPA) + Svelte 5 runes
后端Tauri 2 (Rust) – 系统 SSH 连接、文件读写、AI 请求
博客引擎Hugo + PaperMod(文章位于 {server_path}/content/post/*.md,YAML front matter)

项目架构清晰,全局状态 $state 单例管理所有组件通信,前端无 props,仅通过 app 读写。

工作流程

  1. 连接:在设置界面输入 SSH 地址、路径和密码(可选),程序自动测试连接并保存配置。
  2. 浏览:侧边栏列出所有文章,支持搜索、排序。
  3. 编辑:点击文章进入编辑器,支持实时预览(通过 marked + DOMPurify 安全渲染)。
  4. AI 辅助:底部 AI 面板可进行对话,temperature=0.7,返回 markdown 内容。
  5. 保存/发布:保存后文件写回远程,点击“部署”执行 Hugo 编译。
  6. 新建/删除:新建文章自动生成 slug 文件名,删除后自动触发部署。

为何选择 Tauri + SvelteKit?

  • 体积小:相比 Electron,Tauri 应用仅数 MB,原生性能优越。
  • 安全:Tauri 的 IPC 接口通过 invoke 调用 Rust 命令,避免前端直接暴露系统操作。
  • 响应式:Svelte 5 的 $state$derived 让状态管理简洁高效,非常适合工具类应用。
  • 跨平台:macOS、Windows、Linux 均可编译。

开发与贡献

项目采用标准 Tauri 2 结构,前端构建为 SPA,依赖 markeddompurifychronoserde 等库。开发命令:

npm install
npm run tauri dev

构建发布:

npm run release  # 自动 bump 版本 → tauri build → 拷贝到 /Applications

所有 Tauri 命令定义在 commands.rs,前端通过 invoke 调用,参数名需与 Rust 结构体字段一致(snake_case)。

未来规划

  • 支持自定义 Hugo 配置路径
  • 多账号管理
  • AI 模型切换(本地 Ollama)
  • 自动同步标签/分类

BlogEdit 目前适合个人 Hugo 博客作者使用,如果你也想告别反复的 SSH 操作,欢迎尝试这个开源项目。更多详情可查看仓库 README 或直接拉取代码体验。

项目仓库:[your-repo-link](假设)