我一直觉得,打开 Obsidian 时看到的主页不该只有一种样子。有人想先看今天的任务和日历,有人更关心最近编辑的笔记、写作进度或知识库统计。与其把这些需求塞进一个固定面板,我做了 MyPage:一个面向 Obsidian 的可定制可视化主页,也是一套可以扩展 DIY 模块的平台。

项目地址:SuShuheng/MyPage。

不只是一个仪表盘

MyPage 支持创建多个命名主页,并通过 TAB 切换、排序和指定默认主页。每个主页由网格中的组件组成,可以拖动、调整尺寸、分组,也可以按自己的工作流组合不同内容。查看模式下主页保持稳定;进入编辑模式后再调整布局,确认完成时统一保存,取消则丢弃本次主页改动。

组件不必共用一套查询条件。每个组件都能单独设置包含和排除的文件夹、标签、扩展名、Frontmatter 条件、时间范围、排序与聚合。内置数据源覆盖 Vault 文件、任务和 Bases 筛选,因此同一个主页既可以放统计图表,也可以放笔记集合、待办、日历目标、Markdown 内容和快捷操作。

让主页适配不同工作流

项目内置指标卡、贡献热力图、趋势图、分布图、笔记集合、TODO、日历、Markdown 和快捷操作等组件。主题也分为三级:Obsidian 基础主题、MyPage 主页主题,以及组件级样式覆盖。

这些能力可以组合成写作面板、任务面板、日常回顾页,或博客生命周期工作台。MyPage 提供可组合的积木,具体主页由使用者自己决定。

DIY 模块:把扩展能力交给生态

如果内置组件不够用,可以安装或开发 DIY 模块。一个模块包可以贡献组件、数据源、数据转换、动作、主页模板和设置。官方模块放在仓库的 diy-plugins/ 目录中,并通过模块市场索引分发;使用者也可以添加第三方市场、导入 ZIP,或从 GitHub 仓库索引安装模块。

模块平台的关键不只是“能安装”,还要让权限清楚且可控。模块默认运行在沙箱中,来源是官方或第三方都不会自动获得信任。模块需要声明能力,使用者再针对当前设备、当前 Vault、模块版本和具体作用范围逐项授权。网络、Vault 写入、Git 和系统执行等高风险能力都有明确的边界。

模块运行在隔离的 iframe 中,通过受限 API 与宿主通信;蓝图可以分享布局和模块依赖,但不包含可执行代码、权限或密钥。这样的设计让 DIY 扩展保留自由度,同时不把“安装了某个模块”直接等同于“它可以访问所有数据”。

面向本地 Vault 的设计

MyPage 的正式配置保存在 Obsidian 插件数据中。主页蓝图用于导入和分享布局,安装模块前会预览缺失依赖;设备绝对路径需要重新绑定,授权不会随蓝图传播。模块设置里的 Token 等秘密使用 Obsidian SecretStorage 保存,避免把密钥明文放进普通配置或蓝图。

更新流程也尽量保守:插件从 GitHub Release 获取固定资产,先校验 SHA-256,再备份并替换文件;替换失败会回滚。正式配置写入前会创建有限备份,安全模式则可以在不运行 DIY 模块的情况下恢复和检查主页。

安装与参与

推荐通过 Obsidian 的 BRAT 插件添加 SuShuheng/MyPage,选择版本安装后启用 MyPage。也可以从 GitHub Releases 下载 main.js、manifest.json 和 styles.css,放入 Vault 的 .obsidian/plugins/mypage/ 目录。

项目使用 TypeScript 和 Preact 开发,核心代码位于 src/,共享 SDK 位于 packages/sdk/,用户指南、模块开发、权限和安全设计文档放在 docs/。如果想做自己的模块,可以从 diy-plugins/hello-widget/ 示例开始,阅读模块开发指南和权限模型说明。

MyPage 采用 Apache License 2.0。欢迎试用、反馈问题,也欢迎为模块和主题生态贡献想法。项目仍在持续迭代,欢迎到仓库查看最新代码与发布信息。