# PineNote **Repository Path**: taote/PineNote ## Basic Information - **Project Name**: PineNote - **Description**: PineNote 是一款面向 Windows 10/11 的本地优先笔记应用,采用 Rust + Tauri v2 + TypeScript + Markdown + Git 架构,兼顾原生性能与轻量体积。 所有笔记以标准 Markdown 文件存储在本地,无私有格式,用任何文本编辑器都能直接打开。通过 Git 实现多设备同步与版本历史,配合浏览器扩展一键剪藏网页内容,数据完全透明可控。安装包仅 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2026-04-03 - **Last Updated**: 2026-05-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PineNote PineNote 是一个面向 Windows 10 / Windows 11 的本地笔记桌面应用,当前技术栈为: `Rust + Tauri v2 + TypeScript + Markdown + Git` 项目目标不是做一个"大而全"的知识库平台,而是做一个启动快、结构稳、适合长期本地使用的知识工作台。 ## 界面预览 ### 阅读视图 ![输入图片说明](docs/screenshots/image.png) ## 核心理念 PineNote 坚守三条核心价值观: 1. **数据永远在用户手里** — 所有笔记以标准 Markdown 格式存储在本地,无私有格式,用户随时可以完全掌控和迁移数据 2. **永远秒开** — 采用 Tauri + Rust + 原生 TypeScript 架构,不搞 Electron 级别的内存占用,追求启动即可用、编辑无延迟 3. **永远单机可用** — 不强制登录、不依赖网络、不需要云服务,断网也能正常工作,没有账号体系也能完整使用全部功能 ### 我们不做什么 为了保持「小而美、稳而快」的定位,以下功能明确不纳入主线: - 云端同步 / 在线协作(只做本地 Git 文件级同步支持) - 复杂的知识图谱可视化(保持信息密度,不做花架子) - 插件生态系统(避免架构复杂度侵蚀启动速度和稳定性) - 跨平台过度扩张(深耕 Windows 体验,不盲目铺开多端) ## 当前版本 当前版本:`2.0.1` PineNote 2.0 是一次架构重构版本,从 SQLite 数据库存储切换为纯 Markdown 文件系统存储,并新增 Git 同步能力。 ### 2.0 架构变化 - **文件系统存储**:所有笔记以 `.md` 文件存储,目录结构即分类结构,数据完全透明 - **Git 同步**:支持配置 Git 远程仓库,一键提交推送与拉取,利用 Git 实现版本历史与多设备同步 - **配置文件化**:应用配置使用 TOML 文件,与数据目录一起可被 Git 追踪 - **移除 SQLite 依赖**:不再使用数据库,标签、搜索等均基于文件内容实现 - **统一 Markdown 编辑**:移除富文本编辑模式,统一为 Markdown 编辑 ### 当前核心能力 - 文件夹分类管理:新建、重命名、删除、多级目录 - Markdown 笔记编辑与实时预览(WYSIWYG 所见即所得) - 标签编辑与管理 - 全文搜索 - 自动保存 - 笔记自动重命名(标题变更时文件名同步更新) - 回收站:恢复、彻底删除、批量操作 - Git 同步:提交推送、拉取、冲突处理 - PDF 导出 - Wiki 双向链接 / 关联笔记 - 图片附件:插入图片、粘贴截图、自定义 URI 协议 - Web Clipper 网页剪藏:浏览器扩展一键剪藏网页内容 - 剪藏属性面板:来源、作者、发布日期等元信息在正文中显示 - Markdown 导入导出 - 数据备份恢复 - 浅色 / 深色主题 - 顶部桌面菜单与快捷键 - 设置与关于系统页 - Windows 可执行文件与 NSIS 安装包构建 ## 文档基线 - [README.md](./README.md):项目目标、总体说明和文档索引 - [CHANGELOG.md](./CHANGELOG.md):版本变更记录 - [ARCHITECTURE.md](./ARCHITECTURE.md):真实架构和关键数据流 - [PLAN.md](./PLAN.md):当前开发计划和推进阶段 - [TASKS.md](./TASKS.md):当前待办和优先级 - [CLAUDE.md](./CLAUDE.md):Claude Code 开发指南 ## 目录结构 ```text . ├─ README.md ├─ package.json ├─ src │ ├─ main.ts # 前端入口 │ ├─ pinenote-navigator.ts # 主应用控制器 │ ├─ markdown-wysiwyg.ts # Markdown WYSIWYG 编辑器插件 │ ├─ note-content.ts # Markdown 渲染与转换 │ ├─ types.ts # 前后端共享类型 │ ├─ navigator-types.ts # 导航器内部类型 │ ├─ navigator-utils.ts # 工具函数 │ ├─ pinenote-desktop.css # 桌面端样式 │ ├─ system-panels.ts # 系统页面(设置/关于/帮助) │ ├─ attachments.ts # 附件处理 │ └─ components/ │ ├─ context-menu.ts # 右键菜单 │ ├─ dialogs.ts # 对话框组件 │ ├─ draft-tracking.ts # 保存状态追踪 │ ├─ note-list.ts # 笔记列表渲染 │ ├─ note-links.ts # 笔记链接渲染 │ └─ toc-panel.ts # TOC 目录面板 ├─ clipper-extension │ ├─ manifest.json # Chrome/Edge Manifest V3 扩展配置 │ ├─ popup/ # 弹窗界面(三种剪藏模式) │ └─ options/ # 设置页面 └─ src-tauri ├─ Cargo.toml ├─ tauri.conf.json └─ src ├─ lib.rs # Tauri 命令注册与启动 ├─ commands.rs # Tauri 命令桥接层 ├─ app_state.rs # 应用状态容器 ├─ file_store.rs # 文件系统数据层(核心) ├─ clipper.rs # Web Clipper HTTP 服务器 ├─ config.rs # TOML 配置管理 ├─ git_sync.rs # Git 同步模块 ├─ search_index.rs # 全文搜索索引 ├─ models.rs # 数据模型 └─ windows_pdf.rs # Windows PDF 生成 ``` ## 数据存储 PineNote 2.0 使用纯文件系统存储: - **数据目录**:用户指定的本地目录(如 `D:\my_pino_data`) - **笔记文件**:`数据目录/分类路径/笔记名.md`,标准 Markdown 格式,含 YAML frontmatter - **回收站**:`数据目录/.trash/`,删除的笔记移入此目录 - **附件**:`数据目录/attachments/`,按笔记和日期组织 - **配置**:`数据目录/.pinenote/config.toml`,应用配置文件 - **Git**:`数据目录/.git/`,Git 版本控制 ### 笔记文件格式 ```markdown --- title: 笔记标题 tags: [标签1, 标签2] aliases: [别名1] created: 2026-05-16T10:00:00+08:00 updated: 2026-05-16T10:30:00+08:00 pinned: false source: https://example.com/article author: [张三] published: 2026-05-15 description: 文章摘要 --- 笔记正文内容... ``` ## 本地开发 推荐环境: - Node.js 20+ - npm 10+ - Rust stable - Visual Studio C++ Build Tools - Microsoft WebView2 Runtime - Git(可选,用于同步功能) 安装依赖: ```bash npm install ``` 前端构建: ```bash npm run build ``` 桌面开发模式: ```bash npm run tauri:dev ``` 桌面打包: ```bash npm run tauri:build ``` ## 测试与验证 ```bash # Rust 测试(必须单线程,因为测试共享文件系统状态) cargo test --manifest-path src-tauri/Cargo.toml -- --test-threads=1 ```