我把自己的知识库做成了一个网页应用

我家中的Mac Mini M4 上的 Obsidian 库里存着几千个markdown文件。手机和 iPad 上都装过 Obsidian 客户端,同步总是失败。iCloud 试过,第三方工具也试过,大库在移动端就是稳不住。装客户端,其实是把整个库复制一份带走。两份库,各改各的,日子久了,自己也说不清哪份是新的。

后来想通了:不装了。电脑上那份库不动,写个网页应用,手机和 iPad 用浏览器连回来看它。没有第二份副本,也就没有同步这回事。

这个应用叫 VaultDesk,用了一个星期,顺手,就把它放上了 GitHub。

它是什么

一个跑在自己电脑上的网页。打开,知识库就在里面:翻笔记、记日记、记待办、看资讯、提问,都在这一个页面。

它读写的就是普通的 Markdown 文件。用 Obsidian 的,库照常在 Obsidian 里用,两边的改动落的是同一个文件;不用 Obsidian 的,随便哪个装着 md 文件的文件夹,给它路径就能跑。

服务默认只开在本机(127.0.0.1)。想在外部用,部署 tailscale,将服务开在机器 tailscale 地址,出门也可访问。

几个天天在用的功能

日记。 按模板生成当天的笔记,路径自己定。在网页上写完保存,Obsidian 那边打开就能看到。

待办。 就是库里一个 Markdown 文件,一行一条。应用会看你实际用过哪些标签,自动生成快捷按钮。我用 #work、#reading,它就显示这两个。你用什么,它跟什么。

事项清单:今日待办、逾期待办、快捷标签

稍后读。 看资讯时点一下,文章标题和链接就写进库里的 read-later.md,成了一条待办。读完打勾。刷到的和存下的,中间不再有复制粘贴。

资讯聚合:RSS 订阅与稍后读

问答。 对着自己的库提问,答案带上出处,点开就是原文。不装模型也能用,内置的关键词检索,装完就有的。装了 Ollama 或 LM Studio 的,选一个嵌入模型,给指定目录建一遍索引,问答就多了一路语义检索,两路结果合在一起。索引两万多个文件、五十多万块,跑到一半停了,再开接着跑。个别文件嵌不上,跳过去,不影响整体。

导入。 一个装着 doc、pdf、xlsx 这些旧文件的文件夹,指定给它,转成 Markdown 进库。新增的、改过的,会自己跟上。

打开之后,左边一列:每日日记、事项清单、资讯聚合、全部笔记、知识问答、最近更新、临时草稿、系统设置。手机浏览器里”添加到主屏幕”,全屏打开,像个应用。界面有中文,也有英文。

上手

1
git clone https://github.com/fanzhh/vaultdesk
1
cd vaultdesk && npm start

浏览器打开 localhost:4177,设置页里填上库的路径,重启,就能用了。配置不填也能跑,默认值都是通用的。

一点技术上的事

整个服务端就一个文件,Node 内置的模块,不带依赖,clone 下来不用 npm install。前端也是原生的。全部一万行上下。

发布之前做了一遍清理。库里原来写死不少我个人的东西:我的目录、我的模型名、我的标签。清掉了,改成运行时去发现。清的过程里反而抓出前面说的那个索引毛病。核心的检索逻辑原先用 Python 写过一版,后来为了”clone 下来就能跑”,搬到了 Node 上。

用了一周的体验

处理 todo list 太方便。随时随地想起什么事儿,通过浏览器记入,再也不会忘了。

同步的烦恼没有了。手机和 iPad 上什么客户端都不装,浏览器里那份,就是唯一的一份。五六千篇文章同步失败这四个字,从日子里去掉了。

库也活了一些。从前写完存档就放着,现在稍后读、草稿、每天的问答,进出都走它。

它不是要取代 Obsidian。Obsidian 该怎么用还怎么用。它只是在库的外面,加了一扇门,门开在浏览器上。

仓库在这里:https://github.com/fanzhh/vaultdesk 。有兴趣的可以试试,有问题可以在后台说,也可以去仓库提 issue。