# sword-note **Repository Path**: favccxx/sword-note ## Basic Information - **Project Name**: sword-note - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-22 - **Last Updated**: 2026-10-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Sword Note 本地优先的个人笔记应用。笔记先写在当前设备上,离线可以创建、编辑和搜索。多端界面共用一套 Vue 3 代码,桌面和移动端分别接入自己的 SQLite。 ## 技术栈 - pnpm workspace - Vue 3、Vue Router、Pinia、Naive UI、Vite - TypeScript 严格模式 - Vitest、Playwright、ESLint、Prettier - Web:IndexedDB(`idb`) - 桌面:Tauri 2 与 `@tauri-apps/plugin-sql` - 移动:Capacitor 8 与 `@capacitor-community/sqlite` - 校验:Zod。没有额外的表单框架。 TypeScript 使用 5.9.3,而不是当前最新的 7.0.2。`typescript-eslint@8.72.0` 的 peer dependency 只接受 `typescript < 6.1.0`。 项目 `.npmrc` 使用 `https://registry.npmmirror.com`。公司源 `https://repo.yyrd.com/artifactory/api/npm/ynpm-all` 没有 `@tauri-apps/plugin-sql`,而 `registry.npmjs.org` 在当前网络下多次 `ECONNRESET`。npmmirror 能解析到与官方相同的包版本。 ## 目录 ```text apps/web Vue 界面 apps/signaling 只转发 SDP/ICE 的配对信令服务 apps/desktop Tauri 2 壳 apps/mobile Capacitor 壳 packages/notes-core packages/storage packages/search packages/sync-core packages/sync-transport packages/device-identity packages/shared-types docs ``` ## 命令 ```bash pnpm install pnpm dev pnpm test pnpm lint pnpm typecheck pnpm build pnpm exec playwright install chromium pnpm test:e2e pnpm platform:status pnpm --filter @sword-note/desktop check ``` 开发服务器默认是 `http://127.0.0.1:5173`。 ## 已实现 - 笔记创建、编辑、自动保存、手动保存和保存失败重试 - 富文本正文:加粗、斜体、下划线、删除线、标题、列表、引用、代码和链接 - 搜索、标签、收藏、排序,以及这些条件的组合筛选 - 软删除、回收站恢复和永久删除 - Web IndexedDB 持久化,刷新后仍可读取 - SQLite schema 2:旧库自动补上 `revision`,不删除已有笔记 - 版本化 JSON 备份。可合并或整库替换;校验失败不会改动现有数据 - 同步状态机。未配置设备、待同步、失败和不可连接都会明确显示 - 跨网络 WebRTC DataChannel 同步、设备密钥配对、AES-GCM 加密和按对端确认的待同步队列 - 三设备通过可信对端接力传播,断开后重连可收敛到一致 - 可选 STUN/TURN,界面显示直连或 TURN 中继路径 - 浅色、深色和跟随系统 - 设备公开 ID,不保存私钥 ## 尚未实现 - Automerge 合并 - 三个设备同时进入同一个信令房间与三路并发连接拓扑 - 真实公网、蜂窝网络、Windows、macOS、iOS 和 Android 设备验证 - SQLite FTS5 - 图片上传、协作编辑和自定义加密 - iOS / Android 原生工程。当前环境没有完整 Xcode 和 Android SDK - Windows 安装包。图标目前是占位 PNG,正式打包前需要用 `tauri icon` 生成完整图标集 ## 平台条件 | 平台 | 当前环境 | 说明 | | ------------ | ------------------------------------ | ----------------------------------------------------- | | Web | 可开发 | Node 22 与 pnpm 已具备 | | macOS 桌面 | Rust 1.91.1,只有 Command Line Tools | `cargo check` 已通过;未运行 `tauri build` | | Windows 桌面 | 未在本机验证 | 需要 Windows 构建工具 | | iOS | 不可用 | `xcode-select` 指向 Command Line Tools,没有 `simctl` | | Android | 不可用 | 未设置 Android SDK | 更多说明见 `docs/architecture.md` 和 `docs/development.md`。 跨网络同步的架构、部署和验证边界见 `docs/p2p-sync.md`。 ## 本次验证 2026-10-22,本机: - 修改前基线:`pnpm typecheck`、`pnpm lint`、`pnpm test`(7 个文件、29 个测试)通过 - 修改后:`pnpm typecheck` 通过,`pnpm lint` 通过,`pnpm test` 通过(8 个文件、33 个测试),`pnpm build` 通过 - `E2E_PORT=5180 PLAYWRIGHT_CHANNEL=chrome pnpm test:e2e` 通过 3 个测试,包含富文本加粗保存和刷新。5173 上已有本项目的 Vite 进程,所以端到端测试改用 5180。Playwright 使用本机 Chrome - `cargo check --manifest-path apps/desktop/src-tauri/Cargo.toml` 通过。索引走 rsproxy,未运行 `tauri build`,也没有 iOS、Android 或 Windows 构建