TMarks 是一个现代化的智能书签管理系统,结合 AI 技术自动生成标签,让书签管理变得简单高效。
- 📚 智能书签管理 - AI自动标签、多维筛选、批量操作、拖拽排序
- 🗂️ 标签页组管理 - 一键收纳标签页、智能分组、快速恢复
- 🌐 公开分享 - 创建个性化书签展示页、KV缓存加速
- 🔌 浏览器扩展 - 快速保存、AI推荐、离线支持、自动同步
- 🔐 安全可靠 - JWT认证、API Key管理、数据加密
- 前端: React 18/19 + TypeScript + Vite + TailwindCSS 4
- 后端: Cloudflare Workers + Pages Functions
- 数据库: Cloudflare D1 (SQLite)
- 缓存: Cloudflare KV
- 快照存储: Cloudflare R2(可选,用于存储网页快照 HTML 与图片,支持全局 7GB 配额限制)
- AI集成: 支持 OpenAI、Anthropic、DeepSeek、智谱等 8+ 提供商
# 1. 克隆项目
git clone https://github.com/ai-tmarks/tmarks.git
cd tmarks
# 2. 安装依赖
cd tmarks
pnpm install
# 3. 创建数据库并迁移
wrangler d1 create tmarks-prod-db --local
pnpm db:migrate:local
# 4. 启动开发服务器
pnpm dev
# 访问 http://localhost:5173# 1. 安装依赖
cd tab
pnpm install
# 2. 启动开发模式
pnpm dev
# 3. 加载扩展
# Chrome: chrome://extensions/ → 开发者模式 → 加载已解压的扩展程序 → 选择 tab/dist
# Firefox: about:debugging → 临时载入附加组件 → 选择 tab/dist/manifest.json完整部署教程视频: 点击观看
跟随视频教程,3 分钟完成部署。
前置条件
- 有 Cloudflare 账号
- 有 GitHub 账号
- 在 GitHub 上 Fork 本仓库
- 打开 Cloudflare Dashboard → Workers & Pages → Pages → 创建项目
- 选择「连接到 Git」,选中你的 Fork
- 构建配置:
- 根目录:
tmarks - 构建命令:
pnpm install && pnpm build:deploy - 构建输出目录:
.deploy
- 根目录:
- 保存并触发一次部署(第一次失败没关系,后面会修好)
- D1 数据库(必需)
- Workers & Pages → D1 SQL Database → Create database
- 名称:
tmarks-prod-db
- KV 命名空间(推荐)
- Workers & Pages → KV → Create a namespace
- 名称:
TMARKS_KV - 不创建也能运行,但会失去 KV 缓存和限流保护
- R2 存储桶(可选,快照用)
- R2 对象存储 → 创建存储桶
- 名称:
tmarks-snapshots - 不创建则快照功能不可用,但其他功能正常
进入 Pages 项目 → 设置 → 函数:
- D1 绑定:
- 新建 D1 绑定,变量名:
DB→ 选择tmarks-prod-db
- 新建 D1 绑定,变量名:
- KV 绑定(如果创建了 KV):
- 新建 KV 绑定,变量名:
TMARKS_KV→ 选择TMARKS_KV
- 新建 KV 绑定,变量名:
- R2 绑定(如果创建了 R2):
- 新建 R2 绑定,变量名:
SNAPSHOTS_BUCKET→ 选择tmarks-snapshots
- 新建 R2 绑定,变量名:
没有 KV / R2 时,可以跳过对应绑定,应用仍然可以启动。
进入 Pages 项目 → 设置 → 环境变量(生产环境),建议配置:
- 业务相关:
ALLOW_REGISTRATION:是否允许新用户注册,推荐 "true" (设为非 "true"——包括 "false" 或留空——都会关闭注册;推荐的关闭方式是 直接删除该变量)ENVIRONMENT:运行环境,生产环境设为productionJWT_ACCESS_TOKEN_EXPIRES_IN:访问 Token 有效期,推荐365dJWT_REFRESH_TOKEN_EXPIRES_IN:刷新 Token 有效期,推荐365d
- R2 相关(如果启用快照 / 封面图走 R2):
R2_PUBLIC_URL:可选,封面图使用 R2 存储时的对外访问域名(例如https://pub-xxxxx.r2.dev);快照本身通过 API 访问,不依赖该值R2_MAX_TOTAL_BYTES:R2 总存储上限(字节),可选;不配置或设为0/ 负数 表示不限制(如需限制可手动设置,例如约 7GiB)
- 敏感变量(只在 Dashboard 里配置,千万不要写入仓库):
JWT_SECRET:JWT 签名密钥(建议 ≥ 48 位随机字符串)ENCRYPTION_KEY:数据加密密钥(建议 ≥ 48 位随机字符串)
本地 / 自托管部署时,可参考
tmarks/wrangler.toml.example中的[vars]示例,业务配置可直接照抄,敏感密钥仅在 Dashboard 中填写真实值。
- 打开 Workers & Pages → D1 SQL Database
- 进入
tmarks-prod-db→ Console - 打开仓库中的
tmarks/migrations/d1_console_pure.sql - 复制全部 SQL,粘贴到控制台,点击 Execute 执行
- 回到 Pages 项目 → 部署
- 对之前失败的部署点击「重试」,或推送任意提交重新触发
- 构建成功后,就可以访问你的 TMarks 站点了 🎉
之后更新:只要往 GitHub 推代码,Cloudflare 会自动重新构建和部署,之前配置的数据库 / KV / R2 / 环境变量都不会丢。
本项目采用 MIT License 开源协议。