Trilium:个人知识库指南

June 24, 2026 · View on GitHub

Trilium(现为 TriliumNext)综合教程,这是一个用于构建个人知识库的分层笔记应用。用强大的功能组织你的想法、研究和知识。

目录


什么是 Trilium

概述

Trilium 是一个分层笔记应用,专注于构建大型个人知识库。它使用树形结构组织笔记,支持脚本、属性和关系等丰富功能。

核心特性

特性描述
分层笔记无限嵌套深度
富文本编辑器所见即所得编辑
代码笔记代码语法高亮
属性笔记的元数据和属性
关系笔记间的链接
脚本JavaScript 自动化
全文搜索快速搜索所有笔记
同步多设备同步
分享将笔记发布为网页
版本控制笔记历史和修订
加密密码保护笔记
APIREST API 集成

与其他工具对比

特性TriliumObsidianNotionJoplinLogseq
自托管
开源
分层有限扁平大纲
脚本插件有限
Web 访问
离线优先
关系链接链接链接链接
API

安装

安装方式

方式最适合难度
Docker自托管、服务器简单
桌面应用个人使用简单
SnapUbuntu/Linux简单
手动自定义设置中等

Docker 安装

# 创建数据目录
mkdir -p ~/trilium-data

# 运行 Trilium
docker run -d \
  --name trilium \
  --restart=always \
  -p 8080:8080 \
  -v ~/trilium-data:/home/node/trilium-data \
  triliumnext/notes:latest

Docker Compose

version: "3.8"

services:
  trilium:
    image: triliumnext/notes:latest
    container_name: trilium
    ports:
      - "8080:8080"
    volumes:
      - trilium-data:/home/node/trilium-data
    environment:
      - TRILIUM_DATA_DIR=/home/node/trilium-data
    restart: unless-stopped

volumes:
  trilium-data:

桌面应用

平台下载来源
WindowsGitHub releases (.exe)
macOSGitHub releases (.dmg)
LinuxGitHub releases (.AppImage)
Flatpakflatpak install com.github.TriliumNext.Notes
Snapsudo snap install trilium

系统要求

要求最低推荐
RAM512 MB2 GB
存储100 MB + 数据1 GB + 数据
CPU1 核2 核
浏览器现代浏览器Chrome、Firefox、Edge

笔记类型

可用笔记类型

类型描述用例
文本带格式的富文本通用笔记、文档
代码语法高亮代码编程、脚本
画布无限绘图画布图表、草图
Mermaid文本生成图表流程图、时序图
关系图可视化关系图知识可视化
书籍子笔记容器组织章节
搜索保存的搜索结果动态集合
渲染笔记渲染的 HTML自定义视图
文件上传的文件附件文档、图片
图片图片笔记截图、照片

创建笔记

操作方法
创建子笔记右键笔记 > 添加子笔记
创建同级笔记右键笔记 > 添加同级笔记
在根目录创建点击笔记树中的"+"
快速创建Ctrl+O > 输入新名称

笔记属性

属性描述
标题笔记名称
类型笔记内容类型
MIME内容 MIME 类型
创建时间创建日期
修改时间最后修改日期
笔记 ID唯一标识符
受保护加密状态

富文本编辑器功能

功能快捷键描述
粗体Ctrl+B粗体文本
斜体Ctrl+I斜体文本
下划线Ctrl+U下划线文本
删除线Ctrl+Shift+S删除线
标题Ctrl+1-6标题级别
无序列表Ctrl+Shift+8项目符号
有序列表Ctrl+Shift+9有序列表
复选框Ctrl+Shift+C任务复选框
行内代码Ctrl+`行内代码
代码块Ctrl+Shift+`代码块
链接Ctrl+L插入链接
表格-插入表格
图片-插入图片
数学公式-LaTeX 数学公式

属性

什么是属性

属性是附加到笔记的元数据。它们提供属性、标签和关系,丰富你的笔记并启用高级功能。

属性类型

类型前缀示例描述
标签##favorite简单标签或标志
带值标签##priority=high键值元数据
关系~~relatedNote链接到另一笔记
带值关系~~author=NoteID带值链接

内置属性

属性类型描述
#readOnly标签设为只读
#autoReadOnlyDisabled标签禁用自动只读
#hiddenLinks标签隐藏出站链接
#hidePromoted标签隐藏提升的属性
#cssClass标签自定义 CSS 类
#iconClass标签自定义图标
#color标签树中的笔记颜色
#run标签自动运行脚本
#sorted标签按字母排序子项
#top标签置顶
#excludeFromExport标签导出时跳过
#template标签标记为模板
#disableVersioning标签禁用笔记历史
#shareHiddenFromTree标签从共享树中隐藏
#shareAlias标签自定义分享 URL

提升的属性

提升的属性显示在笔记的属性面板中,方便编辑。

// 要提升属性,将其添加到笔记:
#priority(promoted, number)
#status(promoted, label=pending/in-progress/done)
#dueDate(promoted, date)
~assignedTo(promoted, relation)

属性继承

属性由子笔记继承:

行为描述
向下子项继承父项属性
覆盖子项可以覆盖继承的值
累积可以存在多个值
深度优先更近的父项优先

使用属性进行组织

系统属性描述
GTD#status=next/waiting/somedayGetting Things Done
PARA#type=project/area/resource/archivePARA 方法
Zettelkasten#type=fleeting/literature/permanentZettelkasten 方法
Cornell Notes#type=note/cue/summaryCornell 方法

关系

什么是关系

关系是笔记间的链接。与简单的超链接不同,关系是结构化的,可用于导航、脚本和可视化。

关系类型

类型语法描述
出站~targetNote从本笔记出发
入站显示在目标上指向本笔记
双向双向相互关系

创建关系

方法操作
自动完成输入 ~ 并开始输入笔记名称
属性面板在属性中添加关系
拖放将笔记拖到关系图
脚本使用 API 编程创建

内置关系

关系描述
~template笔记使用此模板
~run要运行的脚本
~iconClass自定义图标类

关系图

关系图提供笔记关系的可视化图:

功能描述
可视化图一览所有关系
拖动节点重新排列布局
添加关系在节点间画线
缩放和平移导航大型图表
导出保存为图片

脚本

脚本类型

类型作用域触发器
后端脚本服务器端手动、定时
前端脚本客户端UI 事件
关系图脚本可视化手动
小部件自定义 UI自动加载
自定义请求处理HTTP 端点HTTP 请求

后端脚本

// 示例:列出具有特定标签的所有笔记
const notes = await api.searchForNotes('#status/todo');
for (const note of notes) {
    api.log(`Note: ${note.title}`);
}

// 示例:创建新笔记
const note = await api.createNote({
    parentNoteId: 'root',
    title: 'New Note',
    content: 'Hello, World!',
    type: 'text'
});

// 示例:更新笔记内容
const note = await api.getNote('noteId');
await note.setContent('Updated content');

// 示例:搜索笔记
const results = await api.searchForNotes({
    query: 'search term',
    ancestorNoteId: 'parentNoteId'
});

前端脚本

// 示例:显示通知
api.showMessage('Hello from script!');

// 示例:获取当前笔记
const currentNote = api.getActiveTabNote();

// 示例:在新标签页打开笔记
api.openNoteInNewTab('noteId');

// 示例:监听事件
api.addEventListener('noteSwitched', ({noteId}) => {
    api.log(`Switched to note: ${noteId}`);
});

定时脚本

// 设置定时脚本
// 使用 #run=backend 和 #schedule 属性

// 脚本笔记上的属性:
// #run=backend
// #schedule=daily 09:00

const notes = await api.searchForNotes('#reminder');
for (const note of notes) {
    // 处理提醒
    api.log(`Reminder: ${note.title}`);
}

API 方法

方法描述
api.getNote(noteId)按 ID 获取笔记
api.createNote(opts)创建新笔记
api.updateNote(noteId, opts)更新笔记
api.deleteNote(noteId)删除笔记
api.searchForNotes(query)搜索笔记
api.getNotePath(noteId)获取笔记路径
api.log(message)记录消息
api.showMessage(message)显示 UI 消息
api.getActiveTabNote()获取当前笔记
api.openNoteInNewTab(noteId)打开笔记

同步

同步选项

方式描述最适合
内置同步Trilium 自己的同步协议多设备
自托管同步运行同步服务器完全控制
文件同步使用 Syncthing/rsync简单设置
Web 访问通过浏览器访问任何设备

设置同步

同步服务器设置

# 运行同步服务器
docker run -d \
  --name trilium-sync \
  --restart=always \
  -p 8081:8080 \
  -v trilium-sync-data:/home/node/trilium-data \
  triliumnext/notes:latest \
  --no-cert-check

客户端配置

步骤操作
1打开 Trilium 桌面应用
2转到选项 > 同步
3输入同步服务器 URL
4输入同步密码
5等待初始同步

同步冲突解决

场景解决方案
同一笔记被编辑最后写入获胜
一侧删除笔记删除传播
结构更改结构合并
附件更改最新版本获胜

基于文件的同步

# 使用 Syncthing
# 在所有设备上安装 Syncthing
# 将 Trilium 数据文件夹添加到 Syncthing
# 在所有设备上设为"发送和接收"

# 使用 rsync
rsync -avz ~/trilium-data/ user@remote:~/trilium-data/

分享

分享选项

类型描述访问
单个笔记分享一个笔记直接 URL
子树分享笔记和子项树视图
自定义布局自定义 HTML嵌入

发布笔记

步骤操作
1右键笔记 > 分享
2选择分享类型
3配置选项
4获取分享 URL

分享配置

设置描述
包含子项分享子树
自定义 CSS设置分享页面样式
自定义头部添加头部内容
自定义底部添加底部内容
密码保护需要密码
过期日期自动过期分享

自定义分享主题

/* 分享笔记的自定义 CSS */
body {
    font-family: 'Inter', sans-serif;
    max-width: 800px;
    margin: 0 auto;
    padding: 20px;
}

.note-content {
    line-height: 1.6;
}

h1 {
    color: #2563eb;
}

搜索

搜索方式

方式描述示例
全文搜索笔记内容search term
仅标题搜索笔记标题note.title=search
属性按属性搜索#tag#key=value
关系按关系搜索~relation
路径按路径搜索path=/root/folder
正则正则表达式regex=/pattern/
快速搜索快速查找Ctrl+O

搜索语法

语法描述示例
text全文搜索machine learning
#label有标签#important
#key=value带值标签#status=active
~relation有关系~author
note.title=X标题匹配note.title=API
note.type=X笔记类型note.type=code
note.dateCreated>X创建于之后note.dateCreated>2024-01-01
note.dateModified>X修改于之后note.dateModified>LAST_WEEK
note.content=X内容匹配note.content=TODO
AND逻辑与#tag1 AND #tag2
OR逻辑或#tag1 OR #tag2
NOT逻辑非#tag NOT #exclude
*通配符program*

搜索快捷键

快捷键操作
Ctrl+O快速搜索(笔记切换器)
Ctrl+S在当前笔记中搜索
Ctrl+Shift+F全局搜索

保存的搜索

// 创建保存的搜索笔记
// 类型:search
// 内容:#status/todo AND #priority=high

// 这将创建匹配笔记的动态列表
// 随笔记变化自动更新

模板

什么是模板

模板是为新笔记定义默认属性、内容和行为的笔记。

创建模板

步骤操作
1创建具有所需内容的笔记
2添加 #template 标签
3设置所需属性
4在目标笔记上使用 ~template 关系

模板结构

## 模板:每日日志

#template
#iconClass="bx bx-calendar"

---

### 日期:${date}

### 任务
- [ ] 

### 笔记


### 反思


### 链接
- 上一篇:~previousDay

模板属性

属性描述
#template标记笔记为模板
#autoCreate自动创建子笔记
#inherit继承到子项
#clone克隆而非引用

使用模板

方式描述
手动将模板应用到笔记
自动#autoCreate 的模板
继承子项继承模板
克隆复制模板内容

API

REST API

Trilium 提供 REST API 用于外部集成。

API 端点

方法端点描述
GET/api/notes/{noteId}获取笔记
POST/api/create-note创建笔记
PUT/api/notes/{noteId}更新笔记
DELETE/api/notes/{noteId}删除笔记
GET/api/search搜索笔记
GET/api/notes/{noteId}/content获取笔记内容
PUT/api/notes/{noteId}/content设置笔记内容
GET/api/notes/{noteId}/attributes获取属性
POST/api/notes/{noteId}/attributes创建属性
GET/api/notes/{noteId}/relations获取关系
POST/api/notes/{noteId}/relations创建关系

API 认证

# 在 Options > API 生成 API token
# 使用 ETAPI token 进行认证

curl -H "Authorization: YOUR_ETAPI_TOKEN" \
  http://localhost:8080/api/notes/root

ETAPI(外部 API)

import requests

BASE_URL = "http://localhost:8080"
TOKEN = "your_etapi_token"

headers = {
    "Authorization": TOKEN
}

# 获取笔记
response = requests.get(
    f"{BASE_URL}/api/notes/noteId",
    headers=headers
)

# 创建笔记
data = {
    "parentNoteId": "root",
    "title": "New Note",
    "type": "text",
    "content": "Hello from API!"
}
response = requests.post(
    f"{BASE_URL}/api/create-note",
    headers=headers,
    json=data
)

WebSocket API

事件描述
noteCreated创建新笔记
noteUpdated笔记已修改
noteDeleted笔记已删除
attributeChanged属性已修改
syncStarted同步已开始
syncCompleted同步已完成

备份

备份方式

方式描述自动化
内置导出导出为 ZIP手动
数据库复制复制 SQLite 文件脚本化
Docker 卷备份卷Docker 工具
rsync增量复制Cron 任务

内置导出

导出类型描述格式
HTML导出为网页.html 文件
Markdown导出为 markdown.md 文件
OPML导出大纲.opml
ZIP完整导出.zip 归档

自动备份脚本

#!/bin/bash
# backup-trilium.sh

BACKUP_DIR="/backups/trilium"
DATE=$(date +%Y%m%d_%H%M%S)
TRILIUM_DATA="/home/node/trilium-data"

# 创建备份目录
mkdir -p $BACKUP_DIR

# 复制数据库
cp $TRILIUM_DATA/document.db $BACKUP_DIR/document_$DATE.db

# 复制日志
cp $TRILIUM_DATA/log.db $BACKUP_DIR/log_$DATE.db

# 仅保留最近 30 个备份
ls -t $BACKUP_DIR/document_*.db | tail -n +31 | xargs -r rm

echo "备份完成:$DATE"

备份频率

频率保留存储
每天7 天本地
每周4 周本地 + 远程
每月12 个月远程
重大更改前-本地

移动端访问

移动端访问选项

方式描述最适合
Web 浏览器通过浏览器访问任何移动设备
TriliumNext Mobile原生应用Android
PWA渐进式 Web 应用iOS、Android

Web 访问设置

步骤操作
1在服务器上安装 Trilium
2配置反向代理(Nginx/Caddy)
3设置 SSL 证书
4通过移动浏览器访问
5添加到主屏幕

Nginx 反向代理

server {
    listen 443 ssl;
    server_name notes.example.com;

    ssl_certificate /etc/letsencrypt/live/notes.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/notes.example.com/privkey.pem;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        # WebSocket 支持
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

移动端友好技巧

技巧描述
使用 PWA添加到主屏幕获得应用体验
启用离线配置离线访问
使用书签收藏常用笔记
简化 UI使用移动端优化主题
快速捕获设置快速笔记创建

最佳实践

组织结构

结构描述最适合
按主题主题作为分支研究
按项目每个项目一个分支工作
按时间每日/每周/每月笔记日记
按类型笔记、任务等分开混合使用

命名约定

约定示例用例
日期前缀2024-01-15 会议笔记按时间排序
类型前缀[PROJECT] 网站改版分类
使用一致格式API - 认证指南参考
CamelCasemyNoteTitle通用

属性系统

用途属性描述
状态#status=todo/doing/done任务跟踪
优先级#priority=low/medium/high优先级排序
类型#type=note/reference/task分类
日期#dueDate=2024-01-15截止日期
人员~author~assignedTo人员

总结

Trilium 是构建个人知识库的强大工具。其分层结构结合属性和关系,提供了灵活的系统来组织任何类型的信息。

关键要点:

  • 使用 Docker 或桌面应用轻松安装
  • 使用笔记类型处理不同内容
  • 利用属性进行元数据和组织
  • 在笔记间创建关系形成知识图谱
  • 使用脚本实现自动化
  • 设置同步实现多设备访问
  • 定期备份

从简单开始,随着知识库的增长逐步采用更高级的功能。