📈 GH Trending Explorer 🎲 Surprise me

← all repos

mkdir700 / wx-ime-sdk

git clone https://github.com/mkdir700/wx-ime-sdk.git v0.1.0 · 21d ago

微信输入法(WeType)跨设备剪贴板的独立 Rust 客户端

+0
stars, 24h · #38,837
+~5
stars, 7 days · #18,799
+88
stars, 30 days · #8,083
88
★ total · +5% this week
13
forks · 1 open issues

Star history (as recorded here)

2026-10-20 · 86 ★ 2026-10-23 · 88 ★
LanguageRust
LicenseApache-2.0
Created2026-10-02 (21d ago)
Last push21d ago
Watchers0
OwnerUser

GitHub topics

Links

README excerpt
# wx-ime-sdk
微信输入法(WeType)跨设备剪贴板的独立 Rust 客户端:以全新的设备身份与官方输入法配对,
然后收发文本、图片和文件。
| 路径 | 用途 |
|---|---|
| `crates/wx-ime-protocol` | 包编解码、控制通道加密、配对码、protobuf 线格式消息 |
| `crates/wx-ime-sdk` | 异步客户端:身份、配对、剪贴板、局域网文件传输 |
| `cli/` | 基于 SDK 的命令行工具 `wxc` |
SDK 不会读写宿主机剪贴板。
## 开源协议
本项目原创代码采用 Apache License 2.0,允许在遵守协议条款的前提下使用、修改、
分发和商业集成。第三方依赖及其版权声明仍受各自许可证约束;本许可不授予腾讯或其他第三方
的商标、服务访问权限或其专利权。
## 免责声明
- **非官方项目**:本项目是独立开发的微信输入法(WeType)协议兼容实现,不是腾讯或微信
 官方 SDK,未获其认可、赞助或背书。微信、WeChat、WeType 等名称和商标归其权利人所有,
 在此仅用于说明兼容对象。
- **兼容性与服务风险**:实现基于协议分析和有限测试,不保证与任何官方版本持续兼容,
 也不保证服务可用、数据完整或消息送达。官方协议、服务策略或风控变化可能导致功能失效、
 连接中断、账号限制或封禁;请在重要操作前备份数据并确认接收结果。
- **授权与合规**:请仅在本人拥有或已获明确授权的设备、账号和数据上使用,遵守适用法律、
 隐私要求及相关服务条款。不得用于未经授权的访问、截取他人数据或干扰服务。
 本项目的开源许可不是对第三方服务条款的豁免,也不代表第三方已授权此类访问。
- **敏感信息**:配对身份、私钥、令牌及剪贴板内容可能包含敏感数据。请妥善保护状态目录,
 不要将其提交到代码仓库或公开日志;使用本项目与官方服务交互时,数据处理也受相关服务
 的实际行为和隐私政策影响。
- **无担保与责任限制**:在适用法律允许的范围内,本软件按“现状”提供,不附带明示或默示
 担保;作者和贡献者的责任限制以 LICENSE 第 7、8 条为准。本声明不排除法律
 规定不可排除的责任,也不限制 Apache-2.0 已授予的软件许可权利。
## npm 安装 CLI
发布完成后可以使用(当前仓库配置不代表 npm 已发布):
 [code] 
需要 Node.js 22+,支持 macOS arm64/x64、Linux glibc 2.35+ arm64/x64、Windows x64。
预编译包内置 OpenSSL,不需要 Rust 工具链;保持 npm optional dependencies 启用。
这安装的是 CLI,不是 JavaScript SDK。构建验证与首次发布配置见 发布说明。
## 构建
需要 Rust 1.92+、`protoc`、带 secp128r1 曲线的 OpenSSL 开发文件和 C 工具链。启用
`vendored-openssl` 特性可改为从源码编译 OpenSSL。
 [code] 
## `wxc`
 [code] 
| 命令 | 行为 |
|---|---|
| `wxc pair 123456` | 加入官方输入法显示的六位配对码,并保存新身份 |
| `wxc devices` | 以 JSON 输出本机和已配对设备(Uin) |
| `wxc send 'hello'` | 发送文本 |
| `wxc send ./photo.png` | 发送图片(按内容识别 PNG/JPEG,最大 16 MiB) |
| `wxc send ./report.pdf` | 通过局域网发送其他普通文件(最大 1 GiB) |
| `wxc send -` | 读取标准输入作为文本发送(UTF-8,保留换行) |
| `wxc recv` | 拉取一次最新剪贴板内容。文本输出到 stdout,图片保存到 `-o`(默认 `.`);没有新内容时退出码为 0,并在 stderr 提示 |
| `wxc recv -f -o .` | 等待官方应用发来的文件邀请,接受后保存到 `-o`,完成后退出 |
`send` 的判定规则:
- 参数指向已存在的普通文件时,按文件内容判断发送图片还是文件,不看扩展名。超过 16 MiB 的
 图片、GIF、WebP 按普通文件发送。
- 否则按文本发送。若参数形如路径(`./x`、`../x`、`/x`、`~/x`)但文件不存在,则报错,避免
 把写错的路径当文本发出去。
- 在 Unix 上,若字面路径不存在,会再尝试去掉反斜杠转义(如终端拖入文件得到的 `a\ b.png`)。
- `--text` 强制按文本发送,即使存在同名文件。
- 发送文件需要确定目标:用 `--peer UIN` 指定;若恰好只有一个已配对设备支持文件传输,则自动
 选中。`--ip IP` 可覆盖自动探测的局域网地址。
`recv -f` 选项:`-n N` 收到 N 个文件后退出(默认 1);`--wait 秒数` 限制等待邀请的时间
(默认 300,`0` 表示一直等到 Ctrl-C);`--ip IP` 覆盖对外公布的局域网地址。文件先放在状态
目录内的私有暂存区,再移动到 `-o`,不会覆盖已有文件,重名时变成 `name (1).ext`。
输出:默认输出便于阅读的文本;加全局选项 `--json` 时,`pair`、`devices`、`send`、`recv`
(图片)和 `recv -f` 改为在 stdout 输出 JSON。`recv` 收到的文本始终原样输出。进度和诊断信息写
stderr;失败时退出码为 1。
### 局域网地址
文件传输需要告诉对端本机的局域网地址。未指定 `--ip` 时,`wxc` 枚举物理网卡的 IPv4 地址并全部
公布(对端会逐个尝试),自动排除代理/VPN 的虚拟网卡(`utun*`、`tun*`、`docker*` 等)以及
`198.18.0.0/15`(Clash/Surge 的 fake-IP)、`100.64.0.0/10`、链路本地地址。若仍选错,用
`--ip` 手动指定。
### 状态目录
身份(私钥、设备 Uin)保存在 `--state DIR`,默认依次取 `$WXC_STATE`、
`$XDG_CONFIG_HOME/wxc`、`~/.config/wxc`。同一目录同一时间只运行一个 `wxc`。
设备名(官方应用里显示的名字)在首次创建身份时用 `--name` 指定,例如
`wxc pair 123456 --name 'My Mac'`,不指定时随机生成 `WXC-XXXX`(4 位随机字符)。名字会记在状态目录的 `device-name` 文件里,之后
的命令不必再带 `--name`。身份创建后不能改名:用不同的 `--name` 运行会报错,要改名请用
`wxc pair CODE --reset --name 新名字` 重新创建身份。
### 重新