开源地址:https://github.com/Brandon-LIs/cfmemos 在线体验:https://memos.oopss.top
为什么做这个
Memos 是我非常喜欢的一款自托管笔记工具——轻量、Markdown 原生、数据完全自持。于是我想:能不能用 Cloudflare 全家桶(Workers + D1 + KV + Assets) 把它 1:1 复刻一遍,让整个服务挂在 Cloudflare 的免费额度上,连服务器都不用买?
结果就是 cfmemos。
它长什么样
- 设计上直接移植了 Memos 官方前端的 OKLCH 设计令牌(暖白/石墨深色、可读性蓝主色、系统字体),左侧是固定的图标导航栏,中间是时间线,风格和 Memos 几乎一致。
- 支持浅色/深色主题一键切换。
功能一览
- 用户系统:注册 / 登录 / 退出,登录状态用 30 天 HttpOnly Cookie 保存;第一个注册的用户自动成为管理员。
- 说说(Memo):发布、编辑、删除、置顶;支持完整 Markdown(标题、加粗、列表、任务清单、代码块、引用、图片、链接、
#标签)。 - 可见性:发布时可选 公开 / 私密。公开的进入「广场」供所有人(包括未登录访客)浏览;私密的只有自己和 API 能看。
- 唯一永久链接 + 评论:每条说说都有独立链接
https://memos.oopss.top/m/<id>,点进去可以看到详情和评论区,发布者和其他登录用户都可以评论。 - 图片上传:复用 Brandon 的图床
admin.oopss.top/upload(无需登录,任意字段名),说说里的图片自动走 jsdelivr 镜像并带兜底。 - 头像上传、昵称修改、生成 Memos 兼容的 API Key。
- API 文档页:内置在
/api-docs专用 URL,接口表格 + 输出示例齐全。
技术栈(全部免费额度)
| 组件 | 用途 |
|---|---|
| Cloudflare Workers | 后端路由 + 静态资源托管 |
| Cloudflare D1(SQLite) | 用户、说说、标签、评论数据 |
| Cloudflare KV | 登录会话 |
| Cloudflare Assets | 前端 SPA(原生 HTML/CSS/JS,零构建) |
| @cloudflare Pages/Workers | 部署(wrangler deploy) |
与 Memos 的 API 兼容
除了自带的前端,我还实现了 Memos v1 兼容的 REST API(/api/v1):instance/profile、auth/me、signin、users、memos、comments 等,返回结构与官方一致。这意味着官方 Memos 客户端/文档站可以直接对接这个实例。
部署
git clone https://github.com/Brandon-LIs/cfmemos.git && cd cfmemos
wrangler login
wrangler d1 create memos-cf-db # 把 database_id 填进 wrangler.toml
wrangler kv namespace create SESSIONS # 把 id 填进 wrangler.toml
npm run db:migrate # 应用 D1 迁移
wrangler deploy # 一键上线
第一个注册的账号就是管理员。
测试
内置了离线后端测试(模拟 D1 + KV,不需要真实账号):
node test/backend.test.mjs # 目前 41 个用例全绿
为什么用 Cloudflare 而不是 VPS
- 零成本:全部跑在免费额度上。
- 免运维:没有服务器要升级、打补丁。
- 全球加速:Cloudflare 边缘节点就近响应。
- 数据可控:D1 是标准的 SQLite 语义,随时可以导出。
如果你也喜欢"小而美"的笔记工具,欢迎去 GitHub 看看、点个 Star、提 Issue,或者直接 fork 一份自定义成你自己的版本。