默认监听 8080 端口,需按需映射;用密码认证时必须自行设置 FLATNOTES_SECRET_KEY;笔记目录挂载到容器 /data,搜索索引默认也放在该目录下。
flatnotes
dullageMIT活跃维护自托管的 Markdown 笔记 Web 应用,直接用扁平文件夹里的 md 文件当存储,不需要数据库,适合想轻量管理个人笔记和 wiki 的人。
A self-hosted, database-less note taking web app that utilises a flat folder of markdown files for storage.
docker run -d -e "PUID=1000" -e "PGID=1000" -e "FLATNOTES_AUTH_TYPE=password" -e "FLATNOTES_USERNAME=user" -e 'FLATNOTES_PASSWORD=changeMe!' -e "FLATNOTES_SECRET_KEY=aLongRandomSeriesOfCharacters" -v "$(pwd)/data:/data" -p "8080:8080" dullage/flatnotes:latestREADME 未说明硬件要求,推荐用 Docker 自托管运行
自托管无数据库笔记应用,直接用扁平 Markdown 文件夹存笔记,不绑架你的数据
自托管的 Markdown 笔记 Web 应用,直接用扁平文件夹里的 md 文件当存储,不需要数据库,适合想轻量管理个人笔记和 wiki 的人。
核心能力
- 笔记以纯 Markdown 文件存储,无数据库和私有格式
- 仅缓存搜索索引,每次搜索时增量同步外部改动
- 支持原文与所见即所得两种 Markdown 编辑模式
- 支持标签、全文搜索和 [[wikilink]] 笔记互链
- 提供无、只读、用户名密码、2FA 多种认证方式
容易踩的坑
- v5.5.5最新正式版2026-08-29 · 2026-08-29 07:09 UTC
🗒️ Notable Changes:
- Switched to uv (from pipenv) for Python dependency management.
- Updated Python (3.11 -> 3.13)
- Updated Python dependencies.
- Updated JS dependencies.
- Updated Docker base images.
- v5.5.42025-10-20 · 2025-10-20 20:04 UTC
查看更新说明
🗒️ Notable Changes:
- Bumped Python dependencies.
- Bumped JS dependencies.
- Previously, an unauthenticated call to the API was required before the app knew a login was required. When the first page loaded didn't make any API calls (e.g. the new note page), you would incorrectly appear logged in until a subsequent API call were made. Now an auth check call is made to the API on app load regardless of the page loaded. Thanks for your help on this @kontaxis.
🪲 Bug Fixes:
- Local drafts are now cleared on logout. #334
- Local drafts are now forgotten on browser closure if you haven't checked "Remember Me". #335
- v5.5.32025-06-20 · 2025-06-20 08:02 UTC
查看更新说明
🪲 Bug Fixes:
- Fixed an issue preventing images from loading when navigating straight to a note. #270.
- v5.5.22025-06-13 · 2025-06-13 11:27 UTC
查看更新说明
🪲 Bug Fixes:
- Fixed an issue where an empty wikilink (e.g.
[[ ]]) would prevent notes from rendering. #310
- Fixed an issue where an empty wikilink (e.g.
- v5.5.12025-04-04 · 2025-04-04 11:41 UTC
查看更新说明
🪲 Bug Fixes:
- Search results from tag auto links are now sorted by title.
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
A self-hosted, database-less note-taking web app that utilises a flat folder of markdown files for storage.
Log into the demo site and take a look around. Note: This site resets every 15 minutes.
Contents
Design Principle
flatnotes is designed to be a distraction-free note-taking app that puts your note content first. This means:
- A clean and simple user interface.
- No folders, notebooks or anything like that. Just all of your notes, backed by powerful search and tagging functionality.
- Quick access to a full-text search from anywhere in the app (keyboard shortcut "/").
Another key design principle is not to take your notes hostage. Your notes are just markdown files. There's no database, proprietary formatting, complicated folder structures or anything like that. You're free at any point to just move the files elsewhere and use another app.
Equally, the only thing flatnotes caches is the search index and that's incrementally synced on every search (and when flatnotes first starts). This means that you're free to add, edit & delete the markdown files outside of flatnotes even whilst flatnotes is running.
Features
- Mobile responsive web interface.
- Raw/WYSIWYG markdown editor modes.
- Advanced search functionality.
- Note "tagging" functionality.
- Customisable home page.
- Wikilink support to easily link to other notes (
[[My Other Note]]). - Light/dark themes.
- Multiple authentication options (none, read-only, username/password, 2FA).
- Restful API.
See the wiki for more details.
Getting Started
Hosted
A quick and easy way to get started with flatnotes is to host it on PikaPods. Just click the button below and follow the instructions.
Self Hosted
If you'd prefer to host flatnotes yourself then the recommendation is to use Docker.
Example Docker Run Command
docker run -d \
-e "PUID=1000" \
-e "PGID=1000" \
-e "FLATNOTES_AUTH_TYPE=password" \
-e "FLATNOTES_USERNAME=user" \
-e 'FLATNOTES_PASSWORD=changeMe!' \
-e "FLATNOTES_SECRET_KEY=aLongRandomSeriesOfCharacters" \
-v "$(pwd)/data:/data" \
-p "8080:8080" \
dullage/flatnotes:latest
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
See the Environment Variables article in the wiki for a full list of configuration options.
Roadmap
I want to keep flatnotes as simple and distraction-free as possible which means limiting new features. This said, I welcome feedback and suggestions.
Contributing
If you're interested in contributing to flatnotes, then please read the CONTRIBUTING.md file.
Sponsorship
If you find this project useful, please consider buying me a beer. It would genuinely make my day.
Thanks
A special thanks to 2 fantastic open-source projects that make flatnotes possible.
- Whoosh - A fast, pure Python search engine library.
- TOAST UI Editor - A GFM Markdown and WYSIWYG editor for the browser.