这是一个用 Rust + GPUI 构建的原生开发者桌面工作台,一套应用直接覆盖三条高频工作流:
查数据库 ↔ 管 Git 工作区 ↔ 找回并粘贴上下文
它不是概念 Demo,也不是只搭好了界面的空壳。MySQL、PostgreSQL、Redis、MongoDB 的查询与迁移,Git 的 Diff、提交与分支操作,以及带本地加密的剪贴板历史都已经可以实际使用。
- GitHub:https://github.com/tools-rs/ramag
- Release:https://github.com/tools-rs/ramag/releases
- 架构说明:https://github.com/tools-rs/ramag/blob/main/docs/architecture.md
- 性能报告:https://github.com/tools-rs/ramag/blob/main/docs/performance.md
现在可以直接下载 macOS Apple Silicon、macOS Intel 和 Windows x64 安装包。
如果你每天都在数据库客户端、Git 工具、编辑器和剪贴板工具之间反复切换,Ramag 就是为这个问题做的。
它不是把三个按钮塞进同一个窗口,而是让三个工具共享统一的窗口、标签、快捷键、主题和本地数据边界:
数据库工作台 + Git 工作台 + 剪贴板工作台

Ramag 不依赖浏览器壳,不要求登录账号,也不会把数据库连接、Git 仓库或剪贴板内容上传到 Ramag 服务。密码和剪贴历史加密后保存在本地,主密钥进入系统凭据库。
一、它已经能做什么
1. 数据库工作台
当前支持四类数据库:
- MySQL
- PostgreSQL
- Redis
- MongoDB
连接管理、查询、结果浏览、数据编辑和导入导出都在同一个工作台中完成。

MySQL 与 PostgreSQL
SQL 工作流已经覆盖:
- Schema、表、视图、列、索引和 DDL 浏览
- SQL 高亮、补全和格式化
- 多语句执行和执行光标所在 SQL
- EXPLAIN 与查询取消
- 结果分页、排序和筛选
- 单元格编辑与查询历史
- 表级 JSONL 导入导出
- Schema 或数据库级 SQL 导入导出
大整数、高精度数值、JSON/JSONB、二进制、日期时间以及 PostgreSQL 原生类型都做了保真处理,避免在 UI 展示和导出过程中丢失精度。
大表读取使用分页和资源预算,不会一次性把整张表加载进内存。带主键的表在导出时优先使用 keyset 分页,避免深分页反复扫描前面的数据。

Redis
Redis 工作流覆盖:
- 使用
:自动折叠 Key 命名空间 - SCAN 游标遍历和大型 Keyspace 虚拟列表
- String、Hash、List、Set、ZSet、Stream
- TTL 查看和修改
- 大 String 有界加载和大集合分批加载
- Key 新增、编辑和删除
- 内置 Redis 命令控制台
- 整库 JSONL 导入导出
导入导出会保留 Redis 数据类型、TTL、List 顺序、ZSet 分数、Stream ID 和二进制内容。命令控制台会对危险、阻塞和生产环境写命令进行识别,减少误操作风险。
MongoDB
MongoDB 工作流覆盖:
- Database、Collection、索引和统计信息浏览
find、aggregate与通用命令- 多查询标签、查询历史和 JSON 格式化
- 文档表格化展示和编辑
- Collection 级 JSONL 导入导出
- Database 级导入导出
嵌套对象会按 dotted path 展开。ObjectId、Decimal128、DateTime、Int64 等 BSON 类型使用 Extended JSON 往返,避免转换成普通 JSON 后丢失类型信息。
2. Git 工作台
Git 工作台仍标记为试验性功能,但日常核心工作流已经打通:
打开仓库 → 查看工作区 → 检查 Diff → Stage → Commit → Push / Pull
当前支持:
- Changes、Project Files 和 Stash
- 提交历史、Commit 详情、Blame 和 Reflog
- Unified Diff 与 Split Diff
- Stage、Unstage 和 Amend
- Branch、Tag、Merge、Rebase 和 Cherry-pick
- 冲突处理
- 文件编辑与自动保存
Diff 和文件内容支持多种语言的语法高亮,大型 Diff 使用虚拟化展示。文件监听按变化路径增量刷新,普通文件保存不会触发整个仓库的完整扫描。

Git 实现上没有完全重新实现一套凭据和网络认证体系。Ramag 使用 gix 发现仓库,同时让写操作和网络操作复用系统 Git、SSH Agent、Git 配置及已有凭据链。
这保证了 Ramag 与用户现有 Git 环境一致,不会在应用里再造一套和命令行行为不同的认证系统。
3. 剪贴板工作台
剪贴板模块支持:
- 纯文本、富文本、链接、颜色、图片和文件路径
- 来源应用记录
- 类型筛选与关键词搜索
- 纯文本复制
- 自动切回来源应用并粘贴
- 按数量和保存时间自动清理
全局快捷键:
macOS:⌘⇧V
Windows:Ctrl+Shift+V
打开抽屉后,可以搜索历史记录,通过键盘选择并粘贴回原来的应用。剪贴板采集默认关闭,需要用户在设置中主动启用。
macOS 下会识别 Concealed 和 Transient 等剪贴板隐私标记。还可以配置来源应用黑名单,避免采集密码管理器等敏感应用的内容。
Windows 关闭主窗口后,Ramag 可以驻留系统托盘,剪贴板采集和全局快捷键仍可继续工作。

二、为什么坚持 Rust + GPUI 原生实现
Ramag 从第一天就确定做原生桌面应用,不使用 WebView 或 Electron。
主要技术栈包括:
- Rust 2024
- GPUI 与 gpui-component
- sqlx
- redis-rs
- MongoDB 官方 Rust Driver
- gix
- redb
- aes-gcm
- tokio 与 smol
选择 Rust 不是为了技术标签,而是因为这个产品天然需要 Rust 擅长的能力。
数据库结果、Git Diff、剪贴板图片都很容易碰到大数据量,内存边界、并发模型和资源生命周期必须明确。
应用还要同时接入数据库、Git、系统剪贴板、系统凭据库、文件监听和原生桌面窗口,这正是 Rust 适合的系统集成场景。
更重要的是,耗时操作和 UI 线程的边界从架构阶段就必须清楚,而不是界面卡顿后再到处补异步任务。
GPUI 的优势是原生渲染和 Rust 内部一致的状态管理模型。不过它目前仍在快速演进,依赖通常需要直接跟随 Git 版本,编译时间和 API 稳定性也是实际开发中必须面对的问题。
三、不是“能跑就行”:18 个 crate 的清晰边界
Ramag 是一个由 18 个 crate 组成的 Cargo workspace,采用务实版本的 Clean Architecture。
整体依赖关系如下:
ramag-bin
├── ramag-tool-* 功能界面
├── ramag-ui GPUI 主壳与共享组件
├── ramag-infra-* 数据库、Git、剪贴板、隧道和存储适配器
├── ramag-app 用例编排
└── ramag-domain 实体与抽象接口
依赖方向只能向内。
ramag-domain
领域层只定义实体和抽象接口,不依赖 GPUI、sqlx、Redis、MongoDB 或 redb。
不同数据模型使用不同接口:
- SQL 使用
Driver - Redis 使用
KvDriver - MongoDB 使用
DocDriver - Git 使用
GitDriver - 本地持久化使用
Storage
没有为了“统一”而把所有后端都塞进同一个通用 Driver。SQL、KV、文档数据库和 Git 的方法集合差别很大,强行统一通常会产生大量没有实际语义的 NotImplemented,最终反而让接口更难理解。
ramag-app
应用层负责连接管理、数据库操作、导入导出、剪贴板采集和工具注册等业务用例编排。它只依赖领域接口,不知道具体数据库驱动和 GUI 实现。
ramag-infra-*
基础设施层提供 MySQL、PostgreSQL、Redis、MongoDB、Git、剪贴板、SSH 隧道和 redb 本地存储的具体实现。
MySQL 和 PostgreSQL 之间还有一个 ramag-infra-sql-shared,集中处理 tokio runtime、连接池缓存、SQL 多语句切分、LIMIT 注入、错误映射和 Driver 模板实现,减少两个 SQL Driver 之间的重复代码。
ramag-tool-* 与 ramag-bin
Tool 层承载数据库、Redis、MongoDB、Git 和剪贴板界面。最终由 ramag-bin 完成依赖注入、工具注册、快捷键绑定和平台生命周期管理。
四、GPUI、tokio 和 smol 如何协作
GPUI 内部使用 smol,而 sqlx、redis-rs 和 MongoDB Driver 依赖 tokio runtime,这是应用必须正面解决的运行时边界。
直接在 GPUI 执行环境中调用这些驱动会因为缺少 tokio reactor 出现运行时问题。Ramag 为不同负载维护独立 runtime:
| Runtime | 用途 |
|---|---|
| smol | GPUI 事件循环 |
| tokio SQL runtime | MySQL 与 PostgreSQL |
| tokio Redis runtime | Redis |
| tokio MongoDB runtime | MongoDB |
| 有界线程池 | redb 与系统 Git 等同步操作 |
没有把所有数据库操作全部塞进同一个 tokio runtime。主要原因是 Redis 订阅、数据库长查询等任务的生命周期和负载差别较大,独立 runtime 可以减少某一类慢任务挤占其它数据库任务线程的情况。
同步 API 则通过固定上限的 worker pool 桥接到异步接口,避免高频操作不断创建新线程。
五、本地存储和数据安全
Ramag 使用 redb 保存数据库连接、查询历史、Git 仓库列表、用户偏好和剪贴板历史。
当前设计包括:
- 使用 AES-256-GCM 加密连接密码和敏感配置
- 主密钥存入 macOS Keychain 或 Windows Credential Manager
- 剪贴板正文、来源信息、原图和缩略图加密保存
- 导出文件通过临时文件完整写入后再原子替换
- 外部路径、连接标识和导入内容进入执行层前进行校验
- 日志文件设置大小上限并进行滚动
应用数据保存在操作系统标准用户数据目录中,核心数据库文件为 ramag.redb。卸载 Ramag 不会自动删除用户数据库、凭据、剪贴板媒体和日志,避免卸载或覆盖升级时误删用户数据。
六、性能方面做了什么
这个项目没有把“Rust 写的”直接等同于“自然就快”。
Ramag 使用这些策略控制资源消耗:
- 增量刷新代替全量刷新
- 分页读取代替一次性载入
- keyset 分页代替深 OFFSET
- 虚拟列表代替一次构造所有行
- 大 String 和大集合分批加载
- 查询结果设置行数与字节预算
- 图片生成缩略图并限制并发加载数量
- CPU 和 IO 操作移出 UI 线程
- 剪贴板最近记录使用有界缓存
- Git 文件变化尽量按路径刷新
在 Apple M1 Max、Release 构建和本地 Docker 数据库环境中,部分测试结果如下:
| 场景 | 结果 |
|---|---|
| 当前仓库完整 VCS 刷新 | 16.217 ms 中位数 |
| 当前仓库单路径状态 | 11.779 ms 中位数 |
| 100,000 条 VCS 状态补丁合并 | 91.917 μs |
| 100,000 次提交图布局 | 2.553 ms |
| MySQL 100,005 行导出 | 871 ms |
| PostgreSQL 100,004 行导出 | 884 ms |
| MongoDB 125,102 文档导出 / 导入 | 1.761 s / 2.371 s |
| Redis 45,014 Key 导出 / 导入复核 | 1.569 s / 13.794 s |
| 读取 100 万条剪贴历史中的最近 500 条 | 5.513 ms 中位数 |
| 100 万条剪贴历史完全无命中搜索 | 219.915 ms 中位数 |
| 4K 图片生成缩略图 | 58.603 ms,后台执行 |
这些数据不是跨设备的通用性能承诺,主要用于记录测试环境、发现退化,以及验证资源边界是否真的有效。完整测试方法、P95、数据库种子规模和优化对照可以查看项目中的性能报告。
七、如何运行
直接下载安装
可以从 GitHub Releases 下载:
https://github.com/tools-rs/ramag/releases
当前提供:
Ramag-<version>-windows-x64-setup.exe
Ramag-<version>-macos-arm64.dmg
Ramag-<version>-macos-x86_64.dmg
SHA256SUMS.txt
支持范围:
- macOS 12+ Apple Silicon
- macOS 12+ Intel
- Windows 10/11 x64
当前暂不支持 Linux。Git 功能需要系统 Git,SSH 隧道需要系统 OpenSSH。
从源码运行
项目通过 rust-toolchain.toml 固定了 Rust nightly。macOS 需要先安装 Xcode Command Line Tools:
xcode-select --install
然后运行:
git clone https://github.com/tools-rs/ramag.git
cd ramag
make develop
Windows 需要 Visual Studio C++ Build Tools 和 Windows 10/11 SDK,然后可以运行:
cargo run -p ramag-bin
常用质量检查命令:
make fmt-check
make check
make clippy
make test
如果本机有 Docker,还可以启动 MySQL、PostgreSQL、Redis 和 MongoDB 的完整集成测试环境:
make db-test
八、现在就能用,但边界必须说清
v0.0.1 是第一个公开版本,核心工作流已经可用,但下面这些边界必须明确:
- Git 工作台仍属于试验性功能
- Windows 安装包尚未做 Authenticode 签名
- macOS 应用尚未做 Developer ID 签名和 Apple 公证
- Windows 可能显示未知发布者或 SmartScreen 提示
- macOS 下载后可能被 Gatekeeper 阻止
- Windows on ARM 尚未完成正式人工验收
- 当前不支持 Linux
- GPUI 仍在快速演进,升级可能带来接口兼容问题
- 首次源码编译需要下载并编译较多依赖,耗时较长
这不会影响你下载、连接本地测试库和体验完整工作流。涉及生产数据库或关键 Git 写操作时,请像使用任何早期开发工具一样确认目标环境并保留恢复点。
九、下载、Star,也欢迎直接挑战它
Ramag 已经把第一版完整交出来了。现在最需要的不是客气的鼓励,而是真实使用和具体问题:
- Rust 原生桌面应用的交互和性能体验
- GPUI 在独立桌面工具中的实际使用体验
- Cargo workspace 和分层方式是否合理
- 多种异步 runtime 的隔离方式是否还有更合适的方案
- 数据库结果表格和大型列表的渲染体验
- Git 工作台还缺少哪些关键工作流
- Windows 和 macOS 上的兼容性问题
- 安装、首次启动和编译过程中遇到的问题
如果它解决了你的问题,请给项目一个 Star;如果它哪里做得不够好,请直接提 Issue。附上操作系统、Ramag 版本、复现步骤和必要日志,我会按可复现问题继续推进。提交日志前请删除数据库连接、用户名、密码和业务数据。
十、项目链接
- GitHub:https://github.com/tools-rs/ramag
- Releases:https://github.com/tools-rs/ramag/releases
- Issues:https://github.com/tools-rs/ramag/issues
- 架构说明:https://github.com/tools-rs/ramag/blob/main/docs/architecture.md
- 性能报告:https://github.com/tools-rs/ramag/blob/main/docs/performance.md
- 构建与发布:https://github.com/tools-rs/ramag/blob/main/docs/desktop-release.md
- License:Apache-2.0
数据库、Git、剪贴板,不需要再开三个工具。
现在就可以下载 Ramag v0.0.1:
https://github.com/tools-rs/ramag/releases
如果你关心 Rust 原生桌面应用、GPUI、数据库工具或 Git 可视化,欢迎 Star、试用、提 Issue,也欢迎直接参与开发。
Ext Link: https://github.com/tools-rs/ramag
评论区
写评论还没有评论