MCPcopy Index your code
hub / github.com/EcoPasteHub/EcoPaste

github.com/EcoPasteHub/EcoPaste @v1.0.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.0.0 ↗ · + Follow
2,060 symbols 4,938 edges 227 files 481 documented · 23% updated 1d agov1.0.0 · 2026-07-03★ 7,15162 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

EcoPaste

# EcoPaste

适用于 macOS 与 Windows 的本地优先剪贴板管理器。

English | 简体中文

Tauri v2 Rust first React 19 macOS Windows

关于

EcoPaste 是一个开源桌面剪贴板管理器。本仓库是 EcoPaste 的 Rust-First 重构版本:持久化和系统侧能力优先由 Rust 承担,React 前端专注于界面展示与交互。

这次重构的目标是让应用更快、更轻、更易维护,并提供本地存储、SQLite 搜索、原生快捷键、托盘、备份,以及聚焦 macOS 与 Windows 的跨平台体验。

项目状态

当前仓库仍处于 beta 重构阶段(0.6.0-beta.3),还不是稳定发布通道。

尝试这个版本前,请先备份旧版 EcoPaste 的重要数据。重构版调整了运行架构、设置模型、存储布局和数据库结构;在 beta 阶段,不保证与旧版数据兼容。

平台范围

Rust-First 重构版仅支持 macOS 与 Windows。

旧版 EcoPaste 曾支持 Linux,但重构版已经放弃 Linux 支持,并且暂不计划重新支持 Linux。如果你需要 Linux 支持,请继续使用旧版发布线。

功能

  • 采集纯文本、HTML、RTF、图片、文件和文件夹等剪贴板内容。
  • 使用 SQLite FTS5 搜索剪贴板正文与备注。
  • 按来源应用和内容类型过滤历史记录。
  • 识别并跳过高置信敏感内容,例如私钥、服务 Token、AWS Key 和 JWT。
  • 在独立预览窗口中查看文本、图片和文件记录。
  • 支持粘贴、复制、复制为纯文本、定位文件、打开链接、添加备注、置顶、收藏、删除,以及将记录拖出到其它应用。
  • 通过收藏、置顶、备注、自定义分组和可配置快捷动作组织历史记录。
  • 可调整采集顺序、大小限制、保留策略、展示密度、列表排序和窗口行为。
  • 支持导出和导入 .ecopastebak 备份,包括加密备份包。
  • 剪贴板数据、资源缓存和设置均保存在本机。

架构

EcoPaste 采用 Rust-First 的 Tauri 架构:

  • src-tauri/src/clipboard/ 负责剪贴板采集、内容识别、写回、来源应用、资源落盘和监听回环抑制。
  • src-tauri/src/db/ 负责 SQLite 仓储、模型、迁移和 FTS 搜索。
  • src-tauri/src/settings/window/shortcut/tray/menu/autostart/backup/ 负责原生能力与持久化应用状态。
  • src/ 包含 React UI、Ant Design 组件、UnoCSS 样式、Valtio UI/设置镜像、i18n 资源,以及类型化 Tauri command 封装。

前端通过 Tauri command 调用 Rust,并通过 clipboard://updatedsettings://updatedwindow://visibility 等命名空间事件接收刷新信号。

技术栈

维度 选型
桌面外壳 Tauri v2
前端 React 19、Ant Design 6、UnoCSS presetWind4
状态 Valtio,仅用于 UI 状态与设置镜像
后端 Rust、sqlx、SQLite
构建 Vite、pnpm
质量 Biome、TypeScript、rustfmt、clippy、cargo test

开始开发

环境要求

  • macOS 或 Windows。
  • Node.js 20 或更高版本。
  • pnpm 10 或更高版本。
  • rust-toolchain.toml 指定的 Rust 工具链(1.96.0,包含 rustfmtclippy)。
  • Tauri v2 所需的系统原生依赖。请参考 Tauri prerequisites 中对应系统的说明。

安装依赖

pnpm install

开发运行

pnpm tauri dev

构建

pnpm tauri build

质量检查

前端:

pnpm lint
pnpm tsc

Rust:

cd src-tauri
cargo fmt
cargo clippy -- -D warnings
cargo test

格式化前端文件:

pnpm format

仓库结构

src-tauri/
  src/
    commands/    # Tauri command 入口
    clipboard/   # 剪贴板读写、采集、识别、存储
    db/          # SQLite 仓储、模型、迁移
    settings/    # 设置模型与持久化
    window/      # 窗口状态、定位、生命周期
    shortcut/    # 全局快捷键
    tray/        # 托盘菜单
    menu/        # 列表项右键菜单
    backup/      # 备份导入导出
    i18n/        # Rust 侧用户可见文案
  migrations/
src/
  commands/      # 类型化 Tauri invoke 封装
  components/    # 共享 React 组件
  constants/     # 跨层复用常量镜像
  hooks/         # 共享 hooks
  locales/       # zh-CN 和 en-US 翻译
  pages/         # Clipboard、Preference、Preview、ContextMenu
  stores/        # Valtio UI 状态与设置镜像
  types/         # TypeScript 契约镜像

参与贡献

修改代码前请先阅读 AGENTS.md。它是本重构版架构边界、平台范围、编码规范和质量要求的单一真相源。

涉及下个版本的用户可见能力变更时,请同步更新 RELEASE-NEXT.md。文档内容也应与当前 beta 状态和受支持平台保持一致。

开源协议

EcoPaste 基于 Apache License 2.0 开源。

Extension points exported contracts — how you extend this code

LifecyclePayload (Interface)
* Rust `window://lifecycle` 事件 payload。
src/stores/windowLifecycle.ts
AppError (Interface)
* Rust 端 `AppError` 序列化后的形状:`kind` 用于按变体分流,`message` 给用户看。
src/commands/index.ts
ClipboardItem (Interface)
(no doc)
src/types/clipboard.ts
ClipboardGroupFormValues (Interface)
(no doc)
src/components/ClipboardGroupModal/index.tsx
ShortcutKey (Interface)
(no doc)
src/utils/shortcut.ts
SearchInputProps (Interface)
(no doc)
src/pages/Clipboard/components/SearchInput.tsx
PresetAntdColorsOptions (Interface)
(no doc)
src/unocss/presetAntdColors.ts
ItemActionMeta (Interface)
(no doc)
src/constants/itemActions.ts

Core symbols most depended-on inside this repo

cn
called by 70
src/utils/cn.ts
call
called by 47
src/commands/index.ts
closePreview
called by 42
src/pages/Clipboard/hooks/useClipboardPreviewController.ts
sample_item
called by 40
src-tauri/src/db/items.rs
now
called by 39
src-tauri/src/clipboard/cleanup.rs
memory_pool
called by 33
src-tauri/src/db/mod.rs
pool
called by 31
src-tauri/src/clipboard/apps_registry.rs
insert_item
called by 31
src-tauri/src/db/items.rs

Shape

Function 1,558
Interface 186
Class 136
Method 136
Enum 44

Languages

Rust56%
TypeScript44%

Modules by API surface

src/commands/index.ts111 symbols
src-tauri/src/commands/clipboard.rs86 symbols
src-tauri/src/backup/mod.rs86 symbols
src-tauri/src/db/items.rs59 symbols
src/pages/Clipboard/components/List.tsx56 symbols
src-tauri/src/window/preview.rs54 symbols
src/pages/Clipboard/components/Group.tsx50 symbols
src-tauri/src/commands/storage.rs45 symbols
src-tauri/src/clipboard/ingest.rs45 symbols
src-tauri/src/settings/model.rs43 symbols
src-tauri/src/commands/onboarding.rs43 symbols
src-tauri/src/window/lifecycle/mod.rs40 symbols

For agents

$ claude mcp add EcoPaste \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page