跨设备剪贴板历史管理,局域网实时同步,支持文字与图片。Windows、macOS、Linux 三端原生支持。
版本
自动记录所有复制内容,支持文字与图片,最多保存 10000 条历史记录。
通过共享 SQLite 数据库文件,多台设备实时共享剪贴板内容,零配置。
连接 MySQL 数据库,实现跨网络、跨地域的多设备剪贴板同步。
自定义热键(默认 Cmd/Win+V)一键唤出剪贴板面板,不打断工作流。
基于 FTS5 的全文搜索,海量历史中秒级定位目标内容。
窗口停靠屏幕任意边缘,鼠标靠近自动弹出,不占用桌面空间。
共享剪贴板从设计之初就排除了数据收集的可能性。无账号、无云服务器、无遥测。
所有剪贴板内容默认存储在你设备上的 SQLite 文件中。应用不持有任何服务器,数据物理上不离开你的电脑。
局域网模式通过共享文件系统直连,流量完全在内网中流转,不经过任何第三方服务器或互联网。
完整源代码托管于 GitHub,任何人可以审计网络请求行为。没有混淆代码,没有隐藏逻辑。
MySQL 云同步完全可选,且连接的是你自己的数据库服务器。我们的程序代码不经手任何同步数据。
两台设备共享同一局域网,即可实时同步剪贴板。
%APPDATA%\SharedClipboard\clipboard.db)ipconfig(Windows)或 ifconfig(macOS/Linux),记录局域网 IP,如 192.168.1.100\\192.168.1.100\SharedClipboard\clipboard.db
/Volumes/SharedClipboard/clipboard.db
/mnt/SharedClipboard/clipboard.db
在应用设置 → 数据库路径中填入对应路径,保存后重启应用即可同步。
购买云数据库服务,即可实现跨网络的多设备剪贴板同步。
| 服务商 | 费用 | 备注 |
|---|---|---|
| 阿里云 RDS Serverless | 按量付费,约 ¥5–15/月 | 个人推荐,弹性计费 |
| 腾讯云 MySQL 基础型 | 约 ¥60/月起 | 稳定可靠,国内延迟低 |
| 华为云 RDS for MySQL | 约 ¥50/月起 | 企业级稳定性 |
| 服务商 | 费用 | 备注 |
|---|---|---|
| PlanetScale 推荐 | 免费套餐 | 5 GB,无需信用卡 |
| Railway | $5/月起 | 简单易用,支持免费试用 |
| Aiven for MySQL | $19/月起 | 多区域,企业级 |
选择你的操作系统,免费下载。
只需两个文件即可创建插件,为剪贴板内容添加自定义处理能力。
一个插件由两个文件组成:manifest.json(声明元信息)和 plugin.py(实现逻辑)。放入 plugins/ 目录即可自动加载。
plugins/
└── my_plugin/
├── manifest.json
└── plugin.py
插件清单文件,声明 ID、名称、版本等元信息。所有字段均有默认值,最简只需 id、name、entry_point。
{
"id": "my_plugin",
"name": "My Plugin",
"version": "1.0.0",
"description": "A simple plugin",
"author": "Your Name",
"entry_point": "plugin.py",
"min_app_version": "1.0.0",
"timeout": 30,
"permissions": ["network"],
"config_schema": {
"api_key": {
"type": "string",
"label": "API Key",
"description": "Your API key",
"required": true,
"secret": true
}
}
}
继承 PluginBase,实现四个抽象方法即可。框架自动注入 logger 和 config。
from core.plugin_api import (
PluginBase, PluginAction, PluginResult,
PluginResultAction
)
from core.models import ClipboardItem, ContentType
class MyPlugin(PluginBase):
def get_id(self): return "my_plugin"
def get_name(self): return "My Plugin"
def get_actions(self):
return [PluginAction(
action_id="process",
label="Process Text",
icon="✨",
supported_types=[ContentType.TEXT],
)]
def execute(self, action_id, item,
progress_callback=None,
cancel_check=None):
# Access config: self.get_config()
# Access logger: self.logger.info(...)
result = item.text_content.upper()
return PluginResult(
success=True,
text_content=result,
action=PluginResultAction.COPY,
)
| 方法 | 类型 | 说明 |
|---|---|---|
get_id() → str | 必须 | 返回插件唯一标识,须与 manifest.json 一致 |
get_name() → str | 必须 | 返回插件显示名称 |
get_actions() → List[PluginAction] | 必须 | 返回插件提供的操作列表 |
execute(action_id, item, ...) → PluginResult | 必须 | 执行操作(在工作线程中调用) |
get_description() → str | 可选 | 返回简短描述 |
on_load() | 可选 | 插件加载时调用 |
on_unload() | 可选 | 插件卸载时调用 |
on_config_changed(config) | 可选 | 配置变更通知 |
self.logger | 注入 | 框架注入的专属 Logger |
self.get_config() → dict | 注入 | 获取插件配置字典 |
| 字段 | 类型 | 说明 |
|---|---|---|
action_id | str | 操作标识,如 "translate_en" |
label | str | 菜单显示名称 |
icon | str | emoji 图标,如 "🌐" |
supported_types | List[ContentType] | 支持的内容类型 (TEXT / IMAGE) |
| 字段 | 类型 | 说明 |
|---|---|---|
success | bool | 是否执行成功 |
text_content | Optional[str] | 文本结果 |
image_data | Optional[bytes] | 图片二进制数据 |
action | PluginResultAction | COPY(复制)/ SAVE(保存)/ REPLACE(替换) |
error_message | Optional[str] | 错误信息(success=False 时) |
在 manifest.json 中声明 config_schema,框架自动在设置页生成配置表单。支持 string、number、boolean、select 四种类型,secret 字段使用密码输入框。
"config_schema": {
"api_key": {
"type": "string",
"label": "API Key",
"required": true,
"secret": true
},
"model": {
"type": "select",
"label": "Model",
"options": ["gpt-4o", "gpt-4o-mini"],
"default": "gpt-4o-mini"
},
"max_tokens": {
"type": "number",
"label": "Max Tokens",
"default": 2000,
"min": 100,
"max": 8000
}
}
PLUGIN_SYSTEM_DESIGN.md。