Skip to content

lvwxx/datum

Repository files navigation

Datum

一款简约现代的桌面数据库管理工具,支持 PostgreSQLRedis 等种数据库。基于 Tauri 2 + React + TypeScript 构建,体积小、启动快。

image image

Datum(/ˈdeɪtəm/,"data" 的单数)—— 专注于数据的工具。

功能

  • 连接管理:新建/编辑/删除连接,按环境(local / staging / prod)着色;凭据按环境路由——local 明文存本地、staging/prod 存 macOS 钥匙串
  • PostgreSQL:浏览表、SQL 编辑器(关键字自动大写、运行选中或光标所在语句)、结果表格(固定表头、列宽省略、双击看全文、行高亮、分页)、表详情(字段定义 + 索引)、暂存-确认事务编辑、查看建表语句、复制 INSERT
  • Redis:浏览 key、按类型(string/hash/list/set/zset)展示值、执行任意命令、查看 key 详情(类型/TTL/大小)
  • 界面:Ayu Light / Mirage 双主题(☀️/🌙 一键切换)、可拖动三栏布局、多标签页、统一提示

技术栈

  • 桌面框架:Tauri 2(Rust 后端 + 系统 WebView)
  • 前端:React 18 + TypeScript + Vite,SQL 编辑器用 CodeMirror 6,布局用 react-resizable-panels,状态用 Zustand
  • 后端驱动:PostgreSQL 用 tokio-postgres,Redis 用 redis-rs,凭据用 keyring

环境要求

  • Node.js ≥ 20(开发用 v24 验证)
  • Rust ≥ 1.80(开发用 1.95 验证),含 cargo
  • macOS(当前打包目标;Tauri 本身跨平台)
  • 跑后端集成测试时需要 Docker(或本地可连的 PostgreSQL / Redis)

首次没有 Rust 时安装:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

开发

# 1. 安装前端依赖
npm install

# 2. 启动开发模式(热重载,自动编译 Rust 后端并打开窗口)
npm run tauri dev

常用脚本:

npm run dev          # 只起前端 Vite(不含桌面外壳)
npm run build        # 前端 tsc 类型检查 + 构建到 dist/
npm test             # 前端单元测试(Vitest)

Rust 单元测试:

cd src-tauri && cargo test

集成测试(需要数据库)

集成测试默认标记 #[ignore],只在显式运行时执行,会自行建表/种数据并清理。

# PostgreSQL:默认连 127.0.0.1:5432(postgres/postgres),或起一个 docker 实例
src-tauri/scripts/test-pg.sh
cd src-tauri && cargo test -- --ignored --test-threads=1

# Redis:默认连 127.0.0.1:6379
src-tauri/scripts/test-redis.sh
cd src-tauri && cargo test rds:: -- --ignored

可用环境变量覆盖测试连接:DBSTUDIO_TEST_PG(libpq 连接串)、DBSTUDIO_TEST_REDIS(redis URL)。

打包

有两种打包方式,按用途选:

命令 产物 用途
npm run tauri build 未签名 DMG 本机自测、调试。别人下载会被 Gatekeeper 拦
npm run release:mac 已签名 + 公证的 DMG 正式对外发布,别人下载双击即开

两者产物都在 src-tauri/target/release/bundle/:

  • dmg/Datum_<版本>_aarch64.dmg —— 安装包(拖进 Applications 即装)
  • macos/Datum.app —— 应用本体

⚠️ 两种方式产物路径相同。要发布给别人,请认准跑完 release:mac、末尾打印 staple 校验通过 ✅ 的那个包,别把未签名包发出去。

当前在 Apple Silicon 上构建,产物为 aarch64,仅适用于 M 系列 Mac

正式发布(签名 + 公证)

npm run release:mac 会自动完成 构建 → 签名 → 公证 → 装订 → 校验。产物经 Apple 公证,用户下载后可直接打开,无需手动绕过 Gatekeeper。

前提是本机已配置签名环境。换一台新打包机时,先跑一次一次性配置(需向项目负责人索取签名身份文件 DeveloperID-datum.p12 及其密码、以及 Apple App 专用密码):

bash src-tauri/scripts/setup-signing.sh /path/to/DeveloperID-datum.p12

完整说明见 docs/signing.md

兼容 Intel Mac(通用包,可选)

rustup target add x86_64-apple-darwin
npm run tauri build -- --target universal-apple-darwin

安装与使用

已签名包(release:mac 产物)

双击 Datum_<版本>_aarch64.dmg,把 Datum 拖进 Applications,直接双击打开即可,无需任何额外步骤。

未签名包(tauri build 产物,仅自测)

首次打开会提示"已损坏"或"来自身份不明的开发者"——这是因为未做苹果签名,并非真的损坏。执行一次以下命令解除隔离标记后即可打开:

xattr -dr com.apple.quarantine /Applications/Datum.app

仅支持 Apple Silicon(M 系列)Mac;Intel Mac 需使用上面的通用包构建。

连接示例

  • PostgreSQL:新建连接,类型选 PostgreSQL,填主机/端口(默认 5432)/用户/数据库/密码
  • Redis:类型选 Redis,填主机/端口(默认 6379)/库索引(默认 0),密码可留空

凭据存储:local 环境的密码以明文存于配置文件,staging/prod 环境的密码存入 macOS 钥匙串。配置文件位于:

~/Library/Application Support/com.dbstudio.app/connections.json

项目结构

src/                      前端(React + TS)
  api/                    调用后端命令的封装(connections / pg / redis)
  components/             UI 组件(连接列表、SQL 编辑器、结果表格、表详情、Toast 等)
  lib/                    纯函数(SQL 生成、语句切分、剪贴板)
  state/                  Zustand 全局状态
  theme/                  Ayu 主题 token 与切换
src-tauri/                后端(Rust + Tauri)
  src/core/               连接模型、按环境的凭据存储、配置仓库、错误类型
  src/pg/                 PostgreSQL:连接池、浏览、编辑、命令
  src/rds/                Redis:连接、scan、取值、命令
  src/commands.rs         连接 CRUD 的 Tauri 命令
  src/lib.rs              应用入口与命令注册
docs/superpowers/         设计文档与实现计划

About

一款简约现代的桌面数据库管理工具,支持 PostgreSQL 与 Redis。基于 Tauri 2 + React + TypeScript 构建,体积小、启动快。

Resources

Stars

2 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors