内容
# EdgeEver
[简体中文](README.zh-CN.md)
> **EdgeEver: 一个自我托管、兼容Cloudflare的Evernote替代品。**
EdgeEver是一个开源、自我托管、兼容Cloudflare的笔记工作空间。它保留了经典的Evernote风格的三面板体验,同时提供清晰的数据模型、REST API、OpenAPI模式和远程MCP端点。
借助Cloudflare的免费配额,个人部署可以以近乎零的长期成本运行。
## 为什么选择EdgeEver
许多长期的Evernote用户只需要一个可靠、开放、响应迅速的个人知识库。但是现代商业笔记应用往往比必要的功能更重,迁移更加困难,并且越来越多地受到订阅和附加功能的影响。
EdgeEver填补了这一空白:熟悉的笔记交互、开放的数据、API访问、MCP支持和适用于个人的自我托管部署。
## 在线演示
- 演示:[https://demo.edgeever.org](https://demo.edgeever.org)
公共演示每天重置并恢复示例笔记。请勿在那里存储私人内容。
## 部署
### 使用AI代理部署
将以下提示复制到您的AI编码助手,例如Claude Code、Codex、Antigravity、Cursor或Trae:
```text
请先fork EdgeEver仓库:https://github.com/tianma-if/edgeever
准备好fork后,使用fork的仓库安装和部署EdgeEver到Cloudflare,并配置fork的自动上游同步,以便未来可以拉取产品更新。
```
代理应遵循[AI代理Cloudflare部署](docs/agent-deploy-cloudflare.md)。
> 常见陷阱:即使您在免费配额内,Cloudflare R2、D1和Workers可能仍需要Visa卡进行激活或使用。
### 手动部署
1. fork官方仓库:
```text
https://github.com/tianma-if/edgeever
```
2. 克隆您的fork:
```sh
git clone <your fork repository URL>
cd edgeever
```
3. 使用辅助命令部署:
```sh
cp .env.local.example .env.local
bun install
EDGE_EVER_PASSWORD='<your password>' bun run deploy:setup
bun run deploy:doctor
bun run deploy
```
如果您更喜欢手动创建Cloudflare资源:
```sh
cp .env.local.example .env.local
bun install
bunx wrangler d1 create edgeever
bunx wrangler r2 bucket create edgeever-resources
bun run auth:hash -- <your password>
bun run deploy
```
将返回的D1 `database_id`和密码哈希放入您的本地`.env.local`。
## 更新
如果您从fork部署:
1. 在GitHub上打开您的EdgeEver fork。
2. 点击 **同步fork** 以拉取最新的官方代码。
3. 在本地重新部署:
```sh
git pull
bun install
bun run deploy:doctor
bun run deploy
```
同步fork只会更新您的GitHub仓库。您仍然需要重新部署才能更改Cloudflare实例。
## 功能
- 在Cloudflare D1 + R2免费配额上几乎为零成本的个人托管。
- 开放数据:笔记存储在Cloudflare D1中,基于标准的SQLite,可以通过REST API、MCP和CLI读取。
- AI代理友好:内置的MCP支持允许Codex、Claude Code和Antigravity等工具在授权的情况下读取和组织笔记。
- 桌面和移动支持,包括浏览器访问和PWA安装。
- 三面板布局:笔记本树、笔记列表和主编辑器。
- 无限嵌套笔记本。
- 富文本编辑。
- 笔记版本历史,用于查看以前的内容更改。
- 本地浏览器端图像上传前压缩,通常可以减少约50%-90%的截图和大照片大小。
- 批量笔记合并。
- 批量笔记移动、笔记本拖拴排序和层次结构编辑。
- 离线草稿和现有笔记的本地同步队列。
- 单用户登录,带有PBKDF2-SHA256密码哈希。
## PWA安装
EdgeEver可以作为PWA安装在桌面或移动设备的主屏幕上。在桌面上,在Chrome或Edge中打开网站,并在地址栏中使用安装图标。在Android上,在Chrome中打开它,使用三点菜单,然后选择 **添加到主屏幕** 或 **安装**。避免从微信等嵌入式浏览器安装。
## 技术栈
- Bun工作区monorepo,包含Web、API、官方网站和共享类型包。
- 官方网站:`apps/site`中的Astro静态网站,可部署到Cloudflare Pages。
- 前端:Vite、React、React Router、TanStack Query、Tailwind CSS、shadcn/ui和Radix UI。
- 编辑器:TipTap / ProseMirror,支持Markdown;PWA使用vite-plugin-pwa、Workbox和Dexie。
- 后端:Cloudflare Workers、Hono、Zod、D1和R2,带有REST API、OpenAPI和远程MCP。
## 快速开始
安装依赖项:
```sh
bun install
```
应用本地D1迁移:
```sh
bun run db:migrate:local
```
启动本地开发:
```sh
bun run dev
```
检查:
```sh
bun run typecheck
bun run build
```
## 项目结构
```text
apps/web Vite + React前端,PWA,离线草稿和同步队列
apps/api Cloudflare Worker + Hono API,OpenAPI,MCP端点
apps/site Astro官方网站,可独立部署
packages/shared 共享类型,Zod模式,TipTap / Markdown转换
scripts Wrangler包装器,密码哈希,CLI,MCP stdio桥接器,Evernote ENEX导入
migrations D1数据库迁移
docs OpenAPI模式,迁移指南和部署文档
wrangler.toml Cloudflare Workers、Assets、D1、R2配置
```
## 内容格式
EdgeEver以三种形式存储笔记内容:
```text
content_json TipTap/ProseMirror文档,编辑器的真实来源
content_markdown API、Agent、导入和导出格式
content_text 搜索、摘要和索引文本
```
## API
OpenAPI模式:
```text
https://your-domain/api/openapi.json
```
仓库文件:[docs/openapi.json](docs/openapi.json)。
## MCP
在 **个人资料** -> **MCP设置** 中创建一个API令牌,然后将令牌或完整的MCP配置复制到您的AI代理中,以便它可以安装MCP服务器并具有权限读取或组织笔记。
## 图片压缩
图片压缩在Web客户端上传前进行,由 **压缩笔记图片** 设置控制。启用后,PNG、JPEG、WebP和AVIF文件会在有益时转换为WebP,最长边缘限制为`2560px`。如果压缩不减少大小,则保留原始文件。
EdgeEver避免在Worker端进行图片处理,以减少计算和图片处理配额的使用。REST API和MCP上传路径存储客户端提供的檔案内容,不进行额外的服务器端压缩。
## 社区和反馈
- 错误、功能请求和部署问题:[GitHub Issues](https://github.com/tianma-if/edgeever/issues)
- 微信:`m1245207870`(请提及EdgeEver)