flatnotes 介绍与选型指南

flatnotes 自托管无数据库笔记应用介绍与选型:纯 Markdown 文件存储、Whoosh 全文搜索、四种认证模式与 REST API,附同类组件量化对比表。

flatnotesflatnotes笔记知识库2026/10/30

flatnotes 介绍与选型指南

目标:讲清 flatnotes 是什么、为谁设计、核心能力与边界,并与 memos、SilverBullet、Standard Notes、Note Mark、Trilium 等同类自托管笔记组件做量化对比,帮助读者在 5 分钟内完成「是否选它」的判断。本文为认知篇,全部信息来自官方仓库与官方文档的联网溯源(查询日期 2026-10-30),未混入本地实验结论。

一、环境信息

本文为认知篇,不依赖本地部署,信息来源与查询日期如下:

项目内容
软件名称flatnotes
官方仓库https://github.com/dullage/flatnotes(查询日期 2026-10-30)
当前稳定版v5.5.5(GitHub Releases 发布于 2026-08-29)
开源许可MIT License(仓库 LICENSE 文件)
社区热度GitHub Stars 3265(2026-10-30 实查)
官方文档GitHub Wiki:https://github.com/dullage/flatnotes/wiki
在线演示https://demo.flatnotes.io(官方说明:每 15 分钟重置)

💡 说明:flatnotes 早期社区资料中常见 b4bz/flatnotes 镜像与 jim8023 账号指向,2026-10-30 实查官方 README 已统一指向 dullage/flatnotes 仓库与 dullage/flatnotes 镜像,旧引用为历史沿革,选型与部署时应以 dullage 命名空间为准。

二、软件概述

flatnotes 是一个自托管(self-hosted)、无数据库的笔记应用:整个笔记库就是服务器上的一个普通文件夹,每条笔记是一个纯 Markdown 文本文件,没有数据库、没有私有格式、没有复杂目录层级。作者在 README 中给出的设计原则有三条:

  1. 内容优先:界面干净、无干扰,笔记正文永远排在第一位;
  2. 不搞组织结构:没有文件夹、笔记本之类的层级概念,全部笔记平铺在一个目录里,靠强大的搜索与标签能力组织;
  3. 不绑架数据:笔记就是普通 .md 文件,随时可以把整个目录拿走换用其他工具,flatnotes 运行期间也允许在应用外直接增删改这些文件(搜索索引会在每次搜索时增量同步)。

💡 技术拓展:自托管笔记应用按「数据存放形态」可分为三类,选型时先想清楚你要哪一类——

形态代表组件特点适用场景
纯文件存储(无数据库)flatnotes、SilverBullet笔记即 .md 文件,可用任意编辑器/同步盘/脚本直接处理,迁移成本≈零重数据所有权、要跟 Git/网盘联动的个人知识库
数据库存储memos、Note Mark写入性能好、易做多用户与关联查询,但数据被锁在库内,迁移要靠导出多人轻量分享、碎片化记录
端到端加密存储Standard Notes数据加密后落库,隐私最强,但服务端不可读,搜索/处理受限隐私敏感场景

flatnotes 属于第一类,且是其中「结构最简」的一个(连文件夹层级都砍掉了)。

三、核心架构

flatnotes 的架构在同类组件里属于「轻到极致」的一类,2026-10-30 实查官方仓库代码结构与 README 后归纳如下:

层技术说明
后端Python 3.13 + FastAPI + Uvicornv5.5.5 起从 Python 3.11 升级到 3.13,包管理从 pipenv 切换到 uv(Release Notes 实查)
前端原生 SPA + TOAST UI Editor构建产物为单页应用;编辑器支持 Raw(纯 Markdown 源码)与 WYSIWYG(所见即所得)双模式(README 实查)
存储文件系统扁平目录全部笔记为 /data 目录下的 .md 文件,附件存于 /data/attachments/
搜索Whoosh(纯 Python 全文检索库)搜索索引存于 /data/.flatnotes/,应用启动时建立、每次搜索时增量同步(README 实查)
认证JWT(HS256 签名)支持无认证、只读、密码、TOTP 两步验证四种模式(源码与 Wiki 实查)
接口RESTful API官方 README 明确列出的特性之一,并自带 OpenAPI 文档端点

这个架构决定了 flatnotes 的几个关键行为特征:

  • 进程极轻:后端是单进程 Python 服务,没有数据库子进程,资源占用在同类中处于最低档;
  • 文件即真相:磁盘上的 .md 文件就是唯一数据源,索引只是缓存,删掉索引目录重启即可重建;
  • 部署只有一种官方形态:官方 README 明确「自托管推荐使用 Docker」,镜像为 dullage/flatnotes,数据目录统一挂载到 /data。

四、功能特性

以下特性清单来自官方 README(2026-10-30 实查),flatnotes 功能刻意保持克制,Roadmap 中作者明确「为保持简单会限制新特性」:

  • 移动端响应式 Web 界面:手机浏览器直接使用,无独立 App;
  • Raw/WYSIWYG 双模式 Markdown 编辑器:源码模式与所见即所得模式一键切换(TOAST UI Editor);
  • 高级全文搜索:基于 Whoosh,支持相关度排序、标题/内容高亮、按标题/修改时间排序;
  • 标签功能:在笔记正文里写 #tag 即完成打标,应用内按标签聚合检索;
  • 可定制首页:首页快捷访问区块(Quick Access)可改标题、检索词、排序与条数;
  • Wikilink 笔记互链:正文中写 [[另一篇笔记标题]] 即可在笔记间跳转;
  • 明/暗两套主题;
  • 多种认证模式:无认证(none)、只读(read_only)、用户名/密码(password)、TOTP 两步验证(totp);
  • RESTful API:笔记 CRUD、搜索、标签、附件均有 HTTP 接口,自带 /docs 在线接口文档。

其中「标签」与「Wikilink」值得单独说明,两者都是 flatnotes 用极低成本实现的组织能力:

  • 标签是从正文正文中原地识别的:任何笔记内容里出现 #运维 这类片段,搜索索引就把它收进标签表,不需要预先建标签体系;
  • Wikilink 是按标题字符串链接:不存笔记 ID,重命名标题后旧链接需要手动跟进,这是纯文件存储形态的天然取舍。

五、快速开始

flatnotes 官方推荐的唯一部署形态是 Docker,README 给出的最小 Docker Compose 示例如下(照录官方 README「Example Docker Compose」一节):

version: "3"

services:
  flatnotes:
    container_name: flatnotes
    image: dullage/flatnotes:latest
    environment:
      PUID: 1000
      PGID: 1000
      FLATNOTES_AUTH_TYPE: "password"
      FLATNOTES_USERNAME: "user"
      FLATNOTES_PASSWORD: "changeMe!"
      FLATNOTES_SECRET_KEY: "aLongRandomSeriesOfCharacters"
    volumes:
      - "./data:/data"
      # Optional. Allows you to save the search index in a different location:
      # - "./index:/data/.flatnotes"
    ports:
      - "8080:8080"
    restart: unless-stopped

只需四个环境变量即可跑起密码登录形态:FLATNOTES_AUTH_TYPE、FLATNOTES_USERNAME、FLATNOTES_PASSWORD、FLATNOTES_SECRET_KEY(用于给登录会话 Token 签名,务必用长随机串)。把上面文件保存为 docker-compose.yml 后 docker compose up -d,浏览器访问 http://<服务器IP>:8080 即进入登录页。

完整的编排参数、国内镜像源拉取实测、端口规划、数据持久化与升级备份等操作细节,见《flatnotes v5.5.5 Docker Compose 部署指南》;全部环境变量的默认值与生效机制,见《flatnotes v5.5.5 配置参数详解》;登录 Token 获取与笔记 CRUD/搜索/附件接口的逐条实测,见《flatnotes v5.5.5 常用工具与 API 详解》。

六、适用场景与限制

适合的场景:

  • 个人知识库:重内容、重搜索、不想要文件夹层级的单用户/单人使用场景;
  • 数据所有权敏感的团队:笔记必须落在自有磁盘、必须能被脚本和 Git 管理、必须能随时迁走的场景;
  • 内网资料速查站:配合 TOTP 或只读模式,把运维手册、配置片段、SOP 沉淀成一个内网可检索的轻量站点;
  • 低配设备/NAS:单进程 Python 服务、无数据库依赖,资源占用极低。

明确的限制(选型前必须接受):

  • 单用户设计:全局只有一套用户名/密码,没有多用户、没有权限分组、没有协作编辑;
  • 无文件夹层级:只有扁平一篇篇笔记 + 标签 + 全文搜索,重度目录癖用户会不适应;
  • 标签仅支持 ASCII 字符:标签识别正则为 [a-zA-Z0-9_-]+(源码实查),中文片段即使写成 #运维 也不会被识别为标签,只能靠全文搜索命中;
  • Wikilink 按标题链接:重命名笔记标题后,指向它的 [[...]] 链接不会自动更新;
  • 无官方移动 App:官方形态只有响应式 Web 界面;
  • 官方仅提供 Docker 部署形态:无 systemd/包管理器安装路径,不用 Docker 的环境需要自行处理 Python 运行时。

七、同类选型对比

下表为 2026-10-30 通过 GitHub API 实查的同类自托管笔记/知识库组件量化对比(Stars 与最近推送日期为当日实查值):

组件Stars许可主要语言数据形态认证最近推送一句话定位
flatnotes3265MITPython扁平 .md 文件(无数据库)none/read_only/password/TOTP2026-08-29极简单用户纯文件笔记
memos64173MITGo数据库(SQLite/MySQL/Postgres)多用户/开放注册可关2026-10-29轻量「碎片记录」流,多用户
SilverBullet6412MITTypeScript纯 .md 文件多用户 + Token2026-10-29面向「极客」的可编程 Markdown 知识库
Standard Notes6688AGPL-3.0TypeScript加密后落库账号 + E2E 加密2026-10-29端到端加密优先的笔记
Trilium(社区接力版 TriliumNext/Notes)2921AGPL-3.0TypeScript数据库 + 文件树单用户为主2025-06-24层级树状重型个人知识库
Note Mark774AGPL-3.0TypeScript数据库多用户2026-10-02Markdown 文档分享/站点化

关键差异与如何选:

  • 把「数据必须是裸 Markdown 文件」当硬要求 → flatnotes 与 SilverBullet 二选一:SilverBullet 功能更重(可编程、面向 power user),flatnotes 把「简单无干扰」做到底,学习成本几乎为零;
  • 要多用户/多人使用 → flatnotes 直接出局(单用户),看 memos 或 Note Mark;
  • 要层级目录/复杂知识树 → flatnotes 与 memos 都不合适,看 Trilium;
  • 要端到端加密 → Standard Notes;
  • 要最低资源占用 + 最低维护成本 → flatnotes:无数据库、单进程、索引可随时重建,是这组里运维面最小的。

八、参考链接

本系列其他篇章: