一款极简的跨平台灵感速记工具。一个热键呼出,写完回车即存,自动消失。
笔记以纯 Markdown 文件落盘到你自己指定的文件夹(本地目录 / Obsidian 库 / 网盘同步文件夹 / WebDAV),也可一键授权写入 Notion / Dropbox(OAuth,凭据存系统钥匙串),不上传任何服务器,不需要注册登录。
| 对比 | 差异 |
|---|---|
| vs 系统备忘录 | 全局热键秒级呼出,写完自动隐藏;文件是你自己的 .md,不锁在生态里 |
| vs Obsidian Daily Notes | 不用打开重型编辑器,几十 MB 内存、毫秒级唤起 |
| vs Notion Quick Capture | 不用登录、不用联网,隐私完全本地 |
| vs 便签类工具 | 存的是标准 Markdown 文件,可被任意笔记软件二次消费 |
- 全局热键呼出:Windows
Alt+Q/ macOSOption+Q,可自定义 - 回车即存:Enter 保存并隐藏,Esc 取消(中文输入法合成态不误触发)
- 多存储槽位:同时写入本地文件夹 + WebDAV(坚果云等)+ Notion / Dropbox(OAuth 授权,Token 存系统钥匙串,不落盘)
- 正文全文搜索:搜索命中后跳转到对应日期,自动定位到该条并居中高亮
- 按日回看:列表按日期分组,每次加载 100 条,滑到 90% 自动加载下一批
- 6 套莫兰迪主题:雾灰粉 / 鼠尾草绿 / 雾霾蓝 / 燕麦奶 / 灰豆紫 / 岩灰
- 系统托盘常驻:点击托盘图标显隐,关闭窗口不退出
- 失焦自动隐藏(Windows):点击其他窗口自动收回托盘
- 呼出跟随光标(Windows):热键呼出时窗口出现在鼠标位置附近
- 极小体积:Release 二进制 ~6 MB,MSI 安装包 ~3 MB
从 Releases 下载:
InspIdea_x.x.x_x64_en-US.msi— 双击安装(推荐)inspiration-idea.exe— 免安装直接运行(需系统已有 WebView2 Runtime,Win11 自带)
从 Releases 下载 .dmg,拖入 Applications。首次运行如提示"无法验证开发者":
xattr -cr /Applications/InspIdea.app配置文件位置
| 平台 | 路径 |
|---|---|
| Windows | %APPDATA%\com.inspidea.app\settings.json |
| macOS | ~/Library/Application Support/com.inspidea.app/settings.json |
笔记文件
默认存储在 ~/Inspirations/,每条笔记一个独立文件:
Inspirations/
├── 20260803-a1b2c3d4.md
├── 20260803-e5f6a7b8.md
└── 20260804-c9d0e1f2.md
文件名格式 YYYYMMDD-<8位uuid>.md,内容格式:
[14:22] 周五前和供应商确认包装打样时间为什么一条一个文件而不是按天追加? 单条独立文件写入后永不修改,网盘/Obsidian Sync 同步时零冲突;阅读器在 UI 层按日期聚合,体验上仍是"日记"形式。
- 登录坚果云 → 账户信息 → 安全选项 → 添加应用密码
- InspIdea 设置 → 存储 → 点击槽位 2 → 选择 "WebDAV(坚果云等)"
- 填入:
- 服务器地址:
https://dav.jianguoyun.com/dav/你的文件夹/ - 账号:坚果云登录邮箱
- 应用密码:上一步生成的密码(不是登录密码)
- 服务器地址:
- 点保存 — 会先做一次连接验证,通过后才写入配置
Notion 是"授权 + 选页面"两步走,比 WebDAV 多一步页面授权,照做即可:
- InspIdea 设置 → 存储 → 点击一个空槽位 → 选择 "Notion"
- 在「Notion 父页面 URL」框中粘贴你想让笔记写入的那个页面的链接
- 打开该页面 → 右上角「···」→ 「复制链接」,粘贴进来即可
- 笔记会以子页面的形式写在这个页面下面,所以请选一个专门收纳灵感的页面(比如新建一个叫"灵感收件箱"的页面)
- 点「授权并接入」→ 浏览器会打开 Notion 授权页
授权页会要求你明确勾选允许访问哪些页面,Notion 不会自动把整个工作空间交给应用:
- 在「Add pages & databases」搜索框中,找到并选中第一步填的那个父页面
- Recents 列表里通常能直接找到最近编辑过的页面
- 确认它出现在 "Allow inspidea to access the following pages" 列表里
- 点蓝色允许按钮 → 页面提示授权成功 → 回到 InspIdea,槽位显示你的账号名即接入完成
为什么保存报 404? 九成是父页面没被授权。Notion 的访问控制以页面为单位:换父页面、或换个工作空间授权,都需要重新走一遍上面的页面选择。也可以随时在 Notion 里打开父页面 →「···」→「连接」→ 添加本应用来补授权。
授权页左上角会显示当前工作空间(如"青阳轩辕's Notion")。如果你想写入另一个工作空间的页面,先在授权页右上角切换工作空间,再选页面——应用只能拿到你在授权时选中的那个工作空间里被勾选的页面。
比 Notion 简单:无需选页面、无需复制链接,授权一次即可。
- InspIdea 设置 → 存储 → 点击一个空槽位 → 选择 "Dropbox" → 点「授权并接入」
- 浏览器登录 Dropbox 并允许 → 回到应用即接入完成
- 笔记以
.md文件写入 Dropbox 的应用专属文件夹:Apps/InspIdea/(应用文件夹对其他应用隔离,只有 InspIdea 能读写)
macOS 首次保存时系统可能弹出钥匙串授权,输入开机密码点"始终允许"即可——这是应用把你的授权凭据安全存入系统钥匙串,Token 不会落盘到任何明文文件。
# 前置:Node 22+、Rust stable、平台构建工具链
# Windows 需要 VS Build Tools (C++)
# macOS 需要 Xcode Command Line Tools
npm install
npm run tauri dev # 开发模式
npm run tauri build # 生产构建(出安装包)测试
cargo test --manifest-path src-tauri/Cargo.toml # Rust 单元测试(13 项)
npx tsc --noEmit # TypeScript 类型检查
node test-slot.mjs # 槽位逻辑验证项目结构
src/ 前端 (React + TypeScript)
├── App.tsx 路由与状态编排
├── platform.ts 平台差异抽象层
├── components/ 页面组件
│ ├── CardPage.tsx 主输入卡片
│ ├── ListPage.tsx 列表 + 搜索 + 懒加载
│ ├── ReaderPage.tsx 阅读器 + 定位高亮
│ └── SettingsPage.tsx 设置
└── hooks/ 数据层
├── useSettings.ts 配置读写
├── useNotes.ts 笔记分页/搜索
└── useAppWindow.ts 窗口行为
src-tauri/src/ 后端 (Rust)
├── main.rs 装配 + 托盘 + 命令注册
├── config.rs 配置持久化 + schema 迁移
├── storage.rs 笔记落盘 + 分页 + 搜索 + WebDAV
├── hotkey.rs 全局热键注册与解析
└── window.rs 窗口显隐(平台条件编译)
以下经验来自将本项目从 macOS 单平台扩展到 Windows 的过程,供跨平台 Tauri 项目参考:
- 所有平台差异用条件编译隔离:Rust 用
#[cfg(target_os = "windows")],前端用IS_WINDOWS运行时标志,CSS 用.is-windows作用域。不删除任何 macOS 逻辑。 - 新增
tauri.windows.conf.json:Tauri 2 的平台覆盖配置机制,自动合并到主配置。用于设置resizable: false、shadow: true、NSIS/MSI 打包参数等 Windows 专属项。
| 问题 | 根因 | 解决方案 |
|---|---|---|
Cmd+Option+A 在 Windows 注册为 Win+Alt+A 与系统冲突 |
hotkey normalize 把 Cmd 映射为 Super(= Win 键) | 按平台给不同默认值 + schema 迁移自动替换旧默认 |
| 无边框窗口顶部拖拽"变形" | resizable: true 时,Windows 在无装饰窗口顶部保留了隐藏的 resize 边框 |
设 resizable: false,尺寸切换走 setSize API |
data-tauri-drag-region 在 WebView2 上不可靠 |
WebView2 对 HTML 属性式拖拽支持不如 WKWebView | 显式调用 appWindow.startDragging(),且必须在 mousedown 同步栈内调用(不能 await/preventDefault) |
| 拖拽热区太窄难命中 | 隐藏标题栏后只留了 10px 热区 | 用负 margin 让顶栏撑满整个窗口顶部宽度,高度提到 36/44px |
| 失焦隐藏与拖拽/对话框冲突 | 原生拖拽和文件选择器会短暂夺焦,触发 blur→hide | 用 draggingRef + dialogOpenRef 在特定操作期间屏蔽 blur 处理器 |
| 渐隐关闭闪白底 | transparent: true + 无背景色 = WebView2 短暂渲染白色底图 |
Windows 覆盖配置用 transparent: false + backgroundColor 指定底色 |
| 输入法候选框位置异常 | WebView2 的 IME 候选框定位依赖 textarea 的 CSS 上下文 | 给 textarea 加 position: relative; transform: translateZ(0) |
| 字体回退到宋体 | 系统字体栈中 macOS 字体优先 + WebView2 不识别时回退 serif | 把 Microsoft YaHei UI 提前到 -apple-system 之前 |
| 阅读器等宽字体渲染差 | SF Mono 只存在于 macOS |
改为 font-family: inherit,走系统无衬线字体 |
| 单实例:调试时新 exe 打不开 | single-instance 插件让旧实例拦截了新进程 | 测试新构建前先 kill 旧进程;生产上是预期行为 |
Settings结构体加schema_version字段(#[serde(default)]确保旧 JSON 反序列化不崩)load_settings时调migrate()逐级迁移,迁移后自动回写磁盘- 对"是否为旧默认值"的判断要穷举所有历史变体(如
Cmd+Option+A、Super+Alt+A、⌘ ⌥ A都是同一个快捷键的不同表示)
- 笔记列表不要全量读正文:只读文件名 + 首行预览做元数据分页(每页 100 条),滚动到 90% 再拉下一页
- 搜索设结果上限(200 条)保护超大目录
- Release profile 全开
lto + codegen-units=1 + panic=abort + strip + opt-level=s,二进制从 18MB 压到 ~6MB
- 所有笔记只写入你自己指定的本地目录或你自己配置的 WebDAV 服务器
- 不收集任何遥测数据,不上报使用行为,不需要账号
- WebDAV 密码存储在本地
settings.json(明文,请勿在共享设备上使用) - 应用无任何对外网络请求,除你主动配置的 WebDAV 上传
- 登录 / 注册、语雀 / Notion / OneDrive / Dropbox 接入为 UI 占位,尚未实现
- 搜索结果上限 200 条(超大目录性能保护)
- 阅读器为只读,暂不支持编辑或删除单条
- macOS 未做代码签名公证,首次运行需手动信任
- NSIS 安装包构建需从 GitHub 下载
nsis_tauri_utils.dll,国内网络可能超时(MSI 不受影响)
MIT
