让每件事,都有迹可循。
下载 Windows 安装包 · 界面预览 · 本地开发 · 非商业许可证
Jotlet 是一个保存在本机的日历与事件追踪桌面应用。用日历安排时间,用事件串起每一步记录,无需账号、后端或云服务。
基于 Electron、TypeScript 和 Vite,当前提供 Windows x64 安装包。项目源码可见,采用 PolyForm Noncommercial 1.0.0 许可证,仅限非商业用途。
- 周/月日历:默认周视图,支持迷你月历、日期跳转、前后翻页和回到今天。周视图只画整点线,单击选择半小时,按住向下拖动可选择更长时间;靠近边缘自动滚动,按 Esc 取消。
- 独立或关联日程:日程可独立保存,也可绑定已有事件;创建并绑定新事件时,自动添加一条包含日程主题、描述及开始时间的初始记录。已关联日程直接显示事件名称。
- 全天日程与颜色:提供五种浅色日程颜色。全天区域无日程时默认收起,有日程时默认展开,也可手动折叠。
- 事件追踪:按事件整理进展,支持置顶、搜索、开始/结束时间,以及记录的追加、编辑和删除;记录按发生时间排列,可补录过去的进展。
- 本地数据与备份:完整导出
.jotlet文件,保留事件、记录、日程、颜色和关联关系。在设置中选择文件或拖入备份,解析预览后取消、合并或覆盖;Windows 安装时注册.jotlet文件关联,双击文件会先询问是否导入。 - 个人偏好:在左下角「设置」中调整默认视图、日程时长、颜色和周视图起始时段,也可管理数据、备份和保存位置。
- 小窗口适配:默认及最小窗口为 860 × 580,支持放大。紧凑工具栏、独立滚动区域和底部操作适配小尺寸;月历放不下的日程通过「还有 N 个日程」查看。
日历顶部的「只显示事件/全部显示」可筛选已关联现有事件的日程。删除日程不影响事件;删除事件不会连带删除日程,原日程将不再显示有效的事件关联。
| 日历周视图 | 事件追踪 |
|---|---|
![]() |
![]() |
| 日历偏好设置 | 数据与备份 |
|---|---|
![]() |
![]() |
前往 GitHub Releases,下载 Jotlet-1.0.1-Setup.exe。Release 同时提供 SHA256SUMS.txt 供校验。
- 关闭正在运行的 Jotlet,打开安装包。
- 首页选择「安装 Jotlet」或「卸载 Jotlet」。未检测到已安装版本时,卸载选项不可选;支持识别旧版 Squirrel 的卸载入口。
- 选择安装后,阅读并接受非商业许可条款,分别选择程序安装目录和数据保存目录。两个目录应相互独立,不能互相包含。
- 安装完成后启动应用。首次启动会使用选择的数据目录;如果已有数据需要迁移,会保留原位置副本。目标与当前位置都有数据时,拒绝自动覆盖。
安装面向当前 Windows 用户,请选择有写入权限的目录。卸载会保留数据文件夹和用户设置,只移除程序文件、快捷方式及卸载注册项。旧版 Squirrel 用户可先从向导卸载旧程序,再安装新版。
校验安装包(PowerShell):
Get-FileHash -Algorithm SHA256 '.\Jotlet-1.0.1-Setup.exe'将输出与 SHA256SUMS.txt 中同名文件的值比较。
所有数据在本机读写,生产应用阻止外部网络请求。数据未加密,备份也包含完整内容。
| 文件/格式 | 用途 |
|---|---|
notes.json |
事件与记录的定期快照 |
calendar.json |
日程、颜色和事件关联的定期快照 |
*.json.journal |
快照之后的增量变更,与对应 JSON 共同组成当前数据 |
active-dataset.json |
导入后指向当前使用的数据批次,事件和日历一起切换 |
.jotlet-datasets/ |
导入的数据批次,保留旧批次文件供恢复 |
*.bak |
已有备份及旧版日历迁移前的原始文件,不再每次写入复制 |
notes.json.v1.bak |
旧版记录迁移为事件前保留的原始文件 |
.jotlet |
可导入的完整备份,包含事件和日程 |
| JSON/Markdown 导出 | 仅包含事件与记录,供外部查看,不支持重新导入 |
- 导入仅支持单个
.jotlet文件,不设文件大小上限,不接受.json、.md、.txt或.jetlet后缀;仍会校验备份格式与内容。 - 普通保存只将变更的事件或日程追加到增量日志,删除写入删除标记,不再重写完整数据集或复制旧文件。日志达到 4 MiB 且不小于快照时,在下一次写入前合并快照,以控制日志增长。启动时恢复快照与已提交日志,末尾未写完的变更不生效。
- 手动复制时请保留整个数据目录,包括 JSON、对应的
.journal、active-dataset.json和.jotlet-datasets/(若存在);跨设备恢复推荐使用.jotlet完整备份,导出时自动包含最新变更。 - 在「设置 → 数据与备份 → 解析与导入」选择文件或拖入单个
.jotlet文件,点击「开始解析」。结果展示备份时间、事件/记录/日程数量、内容列表及合并时的重复和冲突统计,解析和取消均不会更改数据。 - 合并导入:保留本地内容,跳过重复内容,同 ID 的不同内容另存一份,并修正日程关联;引用备份之外事件的日程作为独立日程导入。覆盖当前数据:再次确认后替换整套事件和日历,原数据文件保留。两种模式都继续使用当前保存文件夹,先准备新批次,再一次切换,失败时保留原数据。
- Windows 安装时为当前用户注册
.jotlet文件类型、图标和打开命令。双击文件会启动或唤起 Jotlet,确认「要导入此文件吗?」后打开解析窗口;此时仍需选择合并或覆盖才会修改数据。卸载移除本程序的关联,并保留其他程序的关联设置。 - 在「设置 → 数据与备份」可更换数据目录。迁移成功后立即生效,原位置保留副本;设置中选择的新位置在后续启动时继续使用。
- 数据位置记录在 Electron 用户配置目录的
data-location.json中;未使用安装向导时,默认直接使用该用户目录。目录不可访问或数据损坏时会提示错误,不会静默重置数据。 - 换设备或重装前,先导出
.jotlet完整备份;需要恢复时,再通过设置页导入。
| 快捷键 | 日历页面 | 事件页面 |
|---|---|---|
Ctrl / Cmd + N |
创建日程 | 新建事件 |
Ctrl / Cmd + K |
— | 搜索事件与记录 |
Ctrl / Cmd + S |
— | 立即保存事件名称 |
Esc |
取消时间拖选/关闭弹窗 | 关闭弹窗 |
事件名称停止输入后自动保存;记录在点击「保存记录」后写入。新建日程时显式点击「创建并绑定」会立即创建事件及初始记录,即使随后取消日程,这部分已保存内容仍会保留。
需要 Node.js 22.13+ 与 npm。Windows 安装包需在 Windows 上构建。
npm ci
npm start| 命令 | 作用 |
|---|---|
npm run lint |
代码与格式检查 |
npm run typecheck |
TypeScript 类型检查 |
npm run check |
一次运行类型、代码格式与单元测试检查 |
npm test |
数据、日历交互、迁移和安装配置测试 |
npm run test:installer |
隔离测试安装/卸载、中文路径、目录冲突和数据保留(Windows) |
npm run icons |
从矢量源文件生成应用图标 |
npm run package |
生成当前平台应用目录 |
npm run make |
生成发行安装包 |
Windows 安装包输出到 out/make/nsis/x64/。首次构建会下载 NSIS 3.12,并校验固定的 SHA-256,编译器缓存在 .cache/nsis-3.12。安装器测试仅使用临时目录和独立注册表键,不操作正式安装的数据。
目录结构:
src/
main/ Electron 启动、窗口与 IPC
storage/ 文件读写、数据目录迁移和安装配置
preload/ 向页面暴露受限的桌面 API
shared/ 事件、日程、备份格式及 API 类型
renderer/
app.ts 页面装配与导航
components/ 导航栏、窗口按钮、图标和提示层
pages/
calendar/ 周/月视图、时间拖选和日程编辑
events/ 事件列表、记录编辑和时间线
settings/ 偏好设置、导入导出和保存位置
styles/ 全局样式与应用外壳
utils/ 前端共用的小工具
build/ Electron Forge 的 NSIS 构建扩展
installer/ Windows 安装/卸载向导
scripts/ 图标生成与安装器测试
tests/ 数据、交互和迁移测试
assets/ 应用图标
页面各自管理模板、样式和交互,跨页面操作由 renderer/app.ts 连接。shared 保持为纯 TypeScript,不依赖 Electron、文件系统或页面 DOM;前端通过 preload API 访问本地数据,不直接导入主进程模块。
修改数据格式或保存流程时,先补充对应的 tests/*.test.ts,再运行 npm run check。涉及窗口、preload 或构建入口的改动还需运行 npm run package;涉及安装流程时运行 npm run test:installer。
本项目采用 PolyForm Noncommercial License 1.0.0。允许在许可范围内进行非商业使用、学习、修改及再分发;未经权利人另行授权,不得用于商业目的,包括商业销售、收费服务或商业产品集成。
这是源码可见、限制商业用途的许可,不属于 OSI 定义的开源许可证。许可原文及非商业用途的具体范围以 LICENSE 为准,版权及分发声明见 NOTICE。许可变更不追溯撤销历史副本已经获得的有效授权。
Electron、Chromium、Node.js、NSIS 及其他第三方组件保留各自的许可证。Jotlet 的非商业限制仅适用于本项目权利人拥有的内容,不改变第三方组件的许可。



