Dayline Journal

by haoo
5
4
3
2
1
Score: 51/100

Description

Dayline: a visual journal for calendars, timelines, moods, memories, weather, and photos.

Reviews

No reviews yet.

Stats

3
stars
477
downloads
0
forks
20
days
0
days
0
days
2
total PRs
0
open PRs
0
closed PRs
2
merged PRs
0
total issues
0
open issues
0
closed issues
117
commits

Latest Version

6 hours ago

Changelog

Three things: a journaled date now fills its whole calendar cell with the accent color, mood marks survive file sync and finally appear on phones, and the phone cell row lost one control.

Added

  • Written days fill with the accent color (showCalendarWrittenMarker, on by default). A journaled date without a photo fills its entire cell with the theme accent, so a month of writing reads at a glance; photo dates already fill with the image itself. The toggle sits in the calendar display group and is localized in all nine languages. Today changes from an accent fill to an accent ring for the same reason: the fill now means written, so an unwritten today must not claim otherwise.
  • The calendar mood pip on phones. The phone layout suppressed every in-cell control, which left a phone's month grid with no mood marker at all. The pip claims its own press, so it never starts the date gesture; entry count and media controls stay outside the cell. It keeps the compact tablet sizing — a roomy touch-desktop pip would swallow most of a 48px cell — and the empty state stays faintly visible, since neither a phone nor a tablet has hover to reveal it.

Fixed

  • Mood marks survive file sync. The metadata file was committed by writing a temporary file and renaming it over the original, which a sync engine can observe as the primary file going missing and propagate as a deletion to other devices. Commits now happen in place behind a .bak copy.
  • A stale synced copy heals instead of overwriting. Every real deletion leaves a tombstone, so a record that exists in the merge base, is unchanged locally and is simply absent on disk was lost to an older synced file rather than deleted: the next write re-seeds it, and a reconcile pass on load does the same, so two devices converge instead of clobbering each other. Tombstones are deliberately excluded — a recreated note must stay able to expose a fresh record even while this session still holds the old deletion.
  • An orphaned mood returns when its note does. Sync engines replace files as delete + recreate, which moved the mood to the recovery list and hid it until the user restored it by hand; it now restores itself once the file reappears at the same path. A live record at the destination always wins, and a file created before the orphaning is not a recreation.

Removed

  • The phone return-to-note arrow. Phone navigation is swipe-first — the panel and the note are one swipe apart — so the arrow, its always-visible hint, the return-leaf plumbing and the nine-language strings came out; the cell row is one control shorter.

Verification

  • npm run typecheck, npm test (69 files / 791 tests), npm run build, npm run build:tablet, npm run package:release, npm run verify:release, npm run verify:release:zip and git diff --check all pass.
  • Obsidian Sandbox: 2.9.0 deployed byte-identical (main.js 6201135f…, manifest.json aa896e07…, styles.css cc4eb753…), reloaded with no dev:errors. The loaded manifest reports 2.9.0 and showCalendarWrittenMarker is a boolean true. In the live DOM, September 2026 renders 7 .cal-written cells with the accent background and white day numbers, while today in October — unwritten — carries the inset accent ring and no fill.
  • data.json was rewritten during the run by a weather-cache fetch of 2026-10-04 and nothing else; restored from its byte-identical backup. Calendar/journal-metadata.json is unchanged.

Notes

  • Sandbox only: it is a tablet-like desktop window, so the phone mood pip, the compact sizing, and the swipe-first row without the arrow were not exercised on a real device, and the sync fixes need two devices behind a real sync engine. All four stay residual risks.
  • The fill ships on by default, so an existing install changes appearance the moment it updates: written days fill, today becomes a ring.

Release assets

Obsidian's community installer downloads main.js, manifest.json, and styles.css individually. dayline.zip bundles those three plus THIRD_PARTY_NOTICES.md and the icons/ assets for a manual install: extract it into <Vault>/.obsidian/plugins/dayline-journal/ and enable the plugin.


三件事:写了日记的日期会用主题色填满整个日历格子,心情标记扛得住文件同步并终于在手机上出现,手机端的格子行少掉一个控件。

新增

  • 已写日期用主题色填满(showCalendarWrittenMarker,默认开启)。有日记但没有照片的日期用主题强调色填满整个格子,一个月的书写量一眼可读;有照片的日期本来就用照片填满。开关在日历显示设置组里,九种语言都已翻译。今天也因此从填充改成描边:填充现在表示"已写",没写的今天不能谎称写了。
  • 手机端显示日历心情小圆点。 手机布局此前屏蔽了所有格子内控件,结果手机的月视图压根没有心情标记。小圆点自己接管按压,不会触发起日期手势;条目数和媒体控件仍然放在格子外。它沿用平板的紧凑尺寸——桌面那种大圆点在 48px 的格子里会占掉大半、还会抢掉想点日期的手势——并且因为手机和平板都没有 hover,空状态保持隐约可见。

修复

  • 心情标记不再被同步吃掉。 元数据原先是"写临时文件再 rename 覆盖"提交的,同步引擎可能把主文件短暂缺失当成删除,并传播到其他设备。现在改为原地提交,并留一份 .bak。
  • 过期的同步副本会自愈,而不是覆盖。 真正的删除都会留下 tombstone,所以"合并基准里有、本地没改、磁盘上却不见了"的记录是被旧副本冲掉,而不是被删除:下一次写入会重新补回,加载时也多了一次对账做同样的事,两台设备因此收敛而不是互相抹掉。tombstone 故意不对账——本次会话仍持有旧删除时,重建的笔记依然要能带出一条新记录。
  • 笔记回来,孤儿心情也回来。 同步引擎用"删除 + 重建"替换文件,这会把心情挪进恢复列表、藏起来等用户手动恢复;现在文件在同一位置重新出现就自动恢复。目标位置已有有效记录时以它为准,创建时间早于孤儿化时刻的文件不算重建。

移除

  • 手机端的"返回笔记"箭头。 手机导航以滑动为主——面板与笔记之间就一次滑动——按钮、常驻提示、return-leaf 相关代码和九种语言的文案一起去掉,格子行少一个控件。

验证

  • npm run typecheck、npm test(69 个文件 / 791 项测试)、npm run build、npm run build:tablet、npm run package:release、npm run verify:release、npm run verify:release:zip、git diff --check 全部通过。
  • Obsidian Sandbox:2.9.0 已逐字节部署(main.js 6201135f…、manifest.json aa896e07…、styles.css cc4eb753…),插件重载后 dev:errors 无错误。运行中的 manifest 报 2.9.0,showCalendarWrittenMarker 是布尔 true。真实 DOM 里九月 2026 渲染出 7 个 .cal-written 格子,主题色背景配白色数字;十月没写的今天只有内嵌强调色圆环、没有填充。
  • 运行期间 data.json 被改写,内容仅为新增 2026-10-04 的天气缓存,别无改动;已用逐字节备份还原。Calendar/journal-metadata.json 未变。

备注

  • 仅有 Sandbox 证据:那是接近平板形态的桌面窗口,手机心情小圆点、紧凑尺寸、去掉箭头后的滑动路径都没在真机上走过;同步相关的修复需要两台设备加真实同步引擎。这四项都还是残留风险。
  • 填充默认开启,所以老版本用户一更新,日历外观立刻变化:已写的填满,今天变成描边。

发布资源

Obsidian 社区安装器会分别下载 main.js、manifest.json 和 styles.css。dayline.zip 另外打包了 THIRD_PARTY_NOTICES.md 与 icons/ 资源,便于手动安装:解压到 <Vault>/.obsidian/plugins/dayline-journal/ 后启用插件即可。

README file from

Github

Dayline Journal

Dayline 把一文件夹的 Markdown 每日笔记变成 Obsidian 里的可视化日记。你可以在月历中查看一天,在时间线里搜索过去,记录心情和天气,同时不必移动或改写原有笔记。

插件支持 Obsidian 桌面端和手机端,适合已经在使用 Daily Notes 的 vault。

不只看到文件,还能看到日记

日历可以显示图片封面、心情标记、天气和多篇日记徽标。点击日期即可打开笔记;缺少笔记时,确认一次就会按 Daily Notes 模板创建(支持 Templater)。

时间线会把同一批 Markdown 笔记整理成可浏览的日记记录。全文搜索和筛选覆盖日期范围、来源、心情、收藏、位置、标签和媒体类型。

主要能力

  • 会读取日记的日历。 每日笔记中的图片会成为日期格背景,心情颜色、可选天气、今天、浏览日期和多篇日记状态都一目了然。
  • 为回忆而做的时间线。 搜索日记全文,并按日期、来源、心情、收藏、位置、标签和媒体类型筛选。
  • 有上下文的心情记录。 五级颜色、备注和标签,可查看趋势与报告,也提供恢复、备份、完整性检查及 JSON/CSV 导出。
  • 回忆与媒体。 “去年今日”会整理往年摘要和照片墙,入口可以关闭、合并进天气卡或放到顶栏图标;图片、视频和音频条目支持封面、元数据、EXIF 浮层,以及桌面端 HEIC/HEIF 缩略图。
  • 可定制的心情标记。 日期格上的心情可以用角落色点,也可以改成底部色条并让日期居中;窄侧栏下日期、天气和心情会分列在格子四角。
  • 桌面端与手机端。 手机视图支持日历/时间线切换、触控控件、键盘自适应心情编辑,并可从 Markdown 笔记快速进入。
  • vault 仍是数据源。 日记正文继续使用 Markdown。Dayline 只索引你选择的目录,并把可视化元数据单独保存,笔记始终可读、可迁移。

工作方式

  1. 指定每日笔记文件夹。
  2. Dayline 识别日期并索引其中的 Markdown 笔记。你也可以把外部导入目录添加为普通日记来源。
  3. 通过日历或时间线浏览,记录心情和上下文,然后直接从日期打开 Obsidian 笔记。

默认情况下,心情元数据保存在 Calendar/journal-metadata.json,天气快照保存在插件的 data.json。Frontmatter 心情镜像默认关闭。Dayline 不依赖远程媒体:附件链接仍留在 vault;你未主动开启前,不会把 EXIF GPS 坐标交给反向地理编码服务。

安装

在 Obsidian 中安装

  1. 打开 设置 → 第三方插件。
  2. 浏览并安装 Dayline Journal。
  3. 启用插件,然后运行命令 Open Dayline。

通过 BRAT

  1. 安装并启用 BRAT。
  2. 添加 Beta 插件 Haoo-7/Obsidian-Dayline。
  3. 启用 Dayline Journal,然后运行命令 Open Dayline。

手动安装

  1. 从 Releases 下载 dayline.zip。
  2. 解压到 vault 的 .obsidian/plugins/dayline-journal/。
  3. 重新加载 Obsidian,启用 Dayline Journal,然后运行 Open Dayline。

如果新插件目录没有 data.json,Dayline 会迁移旧 dayline 或 Calendar Sidebar 1.x 的设置。迁移不会改写 vault 笔记和心情元数据。

常规

设置 作用
显示语言 统一控制插件界面、提示、标签和辅助文本,可选系统、简体中文、繁体中文、English、日本語、한국어、Français、Deutsch、Español、Русский。默认中文。
每周起始日 设置日历每周从星期几开始。默认跟随系统。

日历和日记

设置 作用
日记来源目录 配置每日笔记目录(默认日记目录 字段,默认 Calendar/Daily;填 / 表示日记就放在笔记库根目录,此时只读取根目录下的文件,不包含子目录)和可选外部导入目录。旧版独立条目来源不再默认启用。
缩略图筛选 选择哪些嵌入图片作为日期缩略图:所有嵌入图片(默认)或 仅日期前缀 (YYYY-MM-DD_*)。
日记工具 打开时间线或检测外部导入目录。
显示时间线心情趋势 在日记时间线顶部显示近七天的心情轨迹。默认开启。
显示时间轴日记标题 在日记时间线中显示标题及标题编辑入口。默认开启。
显示日历心情标记 在日期格显示心情颜色标记;关闭后不会删除心情记录。默认开启。
日历心情样式 色点 放在格子角落(默认);色条 贴在底部并让日期保持居中。仅在上面的标记开启时显示。
显示同日记录角标 同一天有多篇记录时显示额外篇数,点击角标打开主日记。默认开启。
显示日历天气卡片 显示月历顶部天气卡片;关闭后不影响日期格天气图标。默认开启。
显示天气位置 在天气卡片中显示配置的地点名称。默认关闭;仅在天气卡片开启时显示。
显示日期天气图标 显示日期格右上角天气图标;关闭后不影响顶部天气卡片。默认开启。

心情

设置 作用
镜像心情到 frontmatter 开启后保存心情时才写入 Markdown 的 mood 和 mood_labels。默认关闭。
每日提醒 今天没有日记记录时显示本地提醒。默认关闭。

天气(需先开启 启用天气,否则下列各项不显示)

设置 作用
启用天气 在日历侧边栏中显示日期天气信息。默认关闭。
纬度 / 经度 所在地坐标,决定天气数据来源。失焦或停止输入约 0.8 秒后才会保存;不合法或超出范围的输入会就地提示且不会保存。
使用当前位置 只在你点击按钮时读取一次设备定位并填入坐标(保留 2 位小数,约 1 km 精度)。仅在 Obsidian 手机端显示,桌面端 Electron 通常没有可用的定位服务。
位置名称 显示名称(可选,鼠标悬停时显示)。
温度单位 摄氏 (°C)(默认)或 华氏 (°F)。
天气字段 选择天气卡片中显示的字段。体感和湿度默认开启;风速、降水、日出、日落和位置可单独开启。
天气时区 日记日期比较和 Open-Meteo 使用的 IANA 时区。auto 使用系统时区。
自动获取天气 打开日记时自动获取天气数据。默认开启。
缓存时长(小时) 天气数据缓存的有效时长,过期后重新获取。默认 2 小时。

媒体元数据与隐私

设置 作用
显示图片 EXIF 信息 鼠标悬停在日历图片上时,显示相机参数和拍摄数据。默认开启。
解析 GPS 地点 将 EXIF GPS 坐标发送到 OpenStreetMap Nominatim 以显示地名。默认关闭,未主动开启前不会发送坐标。

去年今日

设置 作用
侧边栏入口 关闭、合并进天气卡(默认)或 顶栏图标。合并条带显示往年封面和日期,顶栏图标位于月份控件旁。
摘要模式 如何生成往年日记的文字预览:自动提取正文(默认)、从 frontmatter 字段、自定义模板 或 不显示摘要。
Frontmatter 字段名 读取哪个 frontmatter 键。默认 excerpt,仅在 从 frontmatter 字段 模式下显示。
模板 自定义摘要的模板字符串,支持 {body}、{year}、{date} 或任意 frontmatter 键。默认 {body},仅在 自定义模板 模式下显示。

数据与维护

设置 作用
心情元数据路径 vault 内 JSON 路径。默认 Calendar/journal-metadata.json,JSON 是心情主数据源。
心情导出 导出心情记录为 CSV 或 JSON。
元数据备份 导出或恢复心情元数据备份。
数据维护 检查数据完整性或导入 frontmatter 记录。
恢复心情记录 检查被删除或移走的心情记录,并恢复到原始文件路径。仅在检测到孤立记录时出现。
回填历史天气 为所有已有日记但缺少天气数据的日期批量拉取天气(约需数分钟)。仅在开启 启用天气 后出现。

天气功能可选,使用 Open-Meteo 且不需要 API Key。天气卡可显示当前条件;历史日期会在归档接口有覆盖时读取历史数据。

设备定位:天气设置里的 使用当前位置 按钮只在你主动点击时读取一次设备定位并填入坐标(保留 2 位小数,约 1 km 精度),不会自动跟踪、不会在后台读取,也不用于其他用途。桌面端 Electron 通常没有可用的定位服务,因此该按钮只在 Obsidian 手机端(iOS/Android)显示,桌面端可手动输入坐标。填入的坐标会随天气请求发送到 Open-Meteo。

导入 Day One 或 Apple Journal 时,先使用 Day One Importer 或 Obsidian Importer,再把输出目录添加为 Journal source。Dayline 不解析 JSON/ZIP 导出,也不改写导入文件。

日期会依次从配置的日期字段、date、creationDate 和合法的日期前缀文件名识别。插件不会用修改时间猜测日期;无法解析日期的文件会进入诊断,而不会进入时间线。

兼容性与限制

  • 需要 Obsidian v1.5.0+,支持桌面端和手机端。
  • 每日笔记默认使用 YYYY-MM-DD.md,目录、来源和日期字段可以配置。
  • HEIC/HEIF 缩略图转换仅在桌面端提供。视频封面、音频封面以及不支持或过大的媒体,会根据设备能力降级为元数据或原始附件。
  • 历史天气是否可用取决于归档覆盖。刷新失败时,兼容的缓存可能继续显示为过期或离线状态。
  • 时间线只打开你配置目录中的笔记,不替代 Obsidian 的文件浏览器、Markdown 编辑器或同步系统。

开发

npm install
npm run typecheck
npm test
npm run build

仓库中的 main.js 由构建生成。打包发布前请运行 npm run verify:release,版本变更见 CHANGELOG.md。

许可证

MIT