做了什么
因为一直念着 TiddlyWiki 作为速记软件,所以花了两天时间做了一个在思源中使用 TiddlyWiki 的小插件。

TiddlyWiki 是什么?
TiddlyWiki 是一个开源的,用于捕捉、组织和共享复杂信息的独特非线性笔记本。
用它来记录你的待办事项清单 ,规划你的文章或小说 ,或者筹备你的婚礼。记录你脑海中闪过的每一个想法,或者搭建一个灵活响应的网站。
- 将其数据和代码存储在单个 HTML 文件中,无需安装,无需外部依赖,只需一个 Web 浏览器
- TiddlyWiki 可让您选择保存数据的位置,确保在未来几十年内您仍然可以使用今天所做的笔记
- TiddlyWiki 具有无限可定制性和可扩展性,并带有许多可添加新功能的插件
- TiddlyWiki 是开发人员集体的成果,也是广大用户社区的一部分
换句话说,TiddlyWiki 是一个有二十年历史的开源笔记软件,在某些方面可以算是 flomo、memos、blinko 等速记软件的轻量开源替代品,仅需一个 HTML 即可享受 TiddlyWiki 的全部功能。
我个人认为 TiddlyWiki 尽管有些丑,但在功能上比 Flomo 等软件更加强大和完善。顺带提一句,深入了解后能发现到 anytype 那套 type、object 的东西在 TiddlyWiki 上已经有雏形了(交互上不能替代,但功能上可以,且更加完善)
TiddlyWiki 有单文件和服务器两种版本。
- 单文件版本:知识库中的内容全部储存于单个
.html文件中 - 服务器版本:使用
node.js,每一篇笔记储存为一个.tiddler
该插件采用单文件版本,因此下面的介绍不会涉及服务器版本。
为什么会做思源的 TW 插件?
其实原因蛮简单的,我选择 TiddlyWiki 作为我的速记方案,我当前使用 Quine2、Tiddloid、Tidgi 等社区客户端,但是没有解决一个问题:
在安卓、iOS 和 windows 之间没法轻松同步与管理。我也不想走 onedrive 等网盘。
于是我想到了思源,仔细思考了下,思源简直是完美的选择。
- 我的主力是思源笔记。
- 思源的同步能走 S3 且端到端加密,也没有单文件的最大体积限制。
- 思源支持自定义属性,以后整 TiddlyWiki 和思源双向同步的时候,会为 TiddlyWiki 的条目储存带来极大的便利(这还是饼)。
- 完整的 Web API 加持,后续如果开发 TiddlyWiki 的插件(这也还是饼),可以轻松地将内容在 TiddlyWiki 和思源之间转换
目前实现了哪些功能?
目前实现了:思源作为 TiddlyWiki 客户端
- 导入 TiddlyWiki 为 TiddlyWiki 笔记或 TiddlyWiki 模板
- 在思源中创建、渲染、编辑 TiddlyWiki
- 对手机端的优化
还未实现的功能:TiddlyWiki 条目和思源块的同步
我个人会用 TiddlyWiki 记录一些小卡片,这些卡片不一定需要整理到我的思源知识库中,而且 TiddlyWiki 不支持块,思源的自定义属性名不支持中文,所以这些方面还需要考虑,一时半会儿应该不会去实现这个功能。
我不需要速记,要体验下 TiddlyWiki 吗?
emmmm 我其实蛮推荐各位玩一玩的,因为 TiddlyWiki 有一个现成的可视化的非线性笔记的交互方案,也非常适合作为实践卡片笔记的入门方案,了解一下 TiddlyWiki,然后在思源中抽象出来。
同时,对 TiddlyWiki 了解的加深可以让你在思源中大大降低对文档树结构的依赖:将文档树仅用作最基本的分类。
常见的组织方案之间的差异:
| 思源 | TiddlyWiki | |
|---|---|---|
| 第一步 | 确立文档树结构 | 创建卡片 |
| 第二步 | 创建笔记 | 整理卡片结构 |
PS:TiddlyWiki 支持直接创建子卡片(类似于 moc 吧)
另外,你可以通过 TiddlyWiki 来了解思源笔记的块的概念,大大提高使用思源笔记时的灵活性:
常见的思源笔记使用方案:
| 思源 | TiddlyWiki | |
|---|---|---|
| 单一主题的知识库 | 工作空间 + 文档树 | .html 单文件 |
| 卡片(原子化) | .sy 文档 | .tiddler |
| 数据库条目 | 由文档构建 | 通过 Field 动态查询 |
| 知识库结构 | 文档树 | 手动(moc、toc)或由 Field 动态构建 |
但是体验了 TiddlyWiki 后,和思源进行对照,我们可以发现原来可以这样做
| 思源 | TiddlyWiki | |
|---|---|---|
| 单一主题的知识库 | .sy | .html 单文件 |
| 卡片(原子化) | 将超级快、列表块、引述块等容器块和叶子块视为最小单位。 | .tiddler |
| 数据库 | 由最小单位构建 | 通过 Field 动态查询 |
| 知识库结构 | 将单个.sy 中的所有顶层块视为平级存放的卡片, 通过 toc、moc、数据库手动构建 |
手动(moc、toc)或由 Field 动态构建 |
PS:思源的块比较灵活,可以嵌套和转换,所以这里的最小单位由你自行决定。但为了方便理解,我就这么写了哈。
目前我个人认为在思源中实现 TiddlyWiki 这种自下而上方案最大的阻碍是:
-
概念稍微有一点抽象
-
思源的容器块和叶子块都有多个块 ID,且块结构变更时,属性和块引用不会自动变更到新块。
- 因此需要在概念上有意识地自行设定最小单位,比如我将一个超级块视为一张卡片,那么我的块引用、数据表格、属性都只存在于卡片对应的块上,卡片内部的块只负责起布局和渲染不同类型的块的职责。
还有什么想法吗
思源笔记会是一款能使用几十年的开源笔记软件吗?如果你认为是,在有精力或有能力的情况下,可以多多贡献一些内容,以帮助思源笔记正向发展。






欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于