编程 DBX深度解析:Rust+Tauri 2打造的20MB全能数据库客户端——60+数据库一键管理、内置AI助手与MCP协议的开源实战指南

2026-07-06 03:44:28 +0800 CST views 6

DBX深度解析:Rust+Tauri 2打造的20MB全能数据库客户端——60+数据库一键管理、内置AI助手与MCP协议的开源实战指南

前言:数据库管理工具的「不可能三角」

作为后端开发者,我们每天都要和数据库打交道。MySQL查用户表、Redis看缓存、PostgreSQL跑分析、MongoDB管文档、ClickHouse做OLAP……一个项目下来,电脑上装了四五个数据库客户端是常态。DBeaver太重(吃1GB内存)、Navicat太贵、TablePlus只支持macOS、RedisInsight只管Redis——这就是数据库管理工具的「不可能三角」:轻量、全能、跨平台,三者最多占两个。

2026年,一个叫DBX的开源项目打破了这个僵局。20MB安装包,支持60+种数据库,原生支持macOS/Windows/Linux,内置AI SQL助手,还支持MCP协议让AI Agent直接查询你的数据库。它用Rust做后端、Tauri 2做桌面壳、Vue 3做前端——把前端框架的开发体验和Rust的性能优势结合到了极致。

本文将从架构设计、核心特性、代码实战、MCP集成、AI助手、自部署方案六个维度,深度拆解DBX的技术实现,带你看看一个「20MB的数据库客户端」是怎么做到的。

一、为什么需要一个新的数据库客户端?

1.1 现有工具的痛点矩阵

工具轻量全能跨平台AI集成开源价格
DBeaver❌ (1GB+ JRE)✅ (Community)免费/付费
Navicat❌ (无Linux)$$$$
TablePlus❌ (仅macOS)$89
DataGrip❌ (JVM)部分$89/年
Beekeeper Studio❌ (有限)免费/付费
DBX✅ (20MB)✅ (60+)免费

DBX的定位很清晰:做一个开源的、轻量的、AI原生的全能数据库客户端

1.2 技术选型的必然性

为什么是Rust + Tauri 2 + Vue 3?这不是随意组合,而是经过深思熟虑的技术选型:

Rust做后端核心:数据库驱动需要高性能和内存安全。Rust的零成本抽象让DBX在处理大量数据行时不卡顿,同时没有GC停顿。对比DBeaver的Java后端,Rust的内存占用可以低一个数量级。

Tauri 2做桌面壳:Electron打包一个Chromium就200MB起步,而Tauri 2使用系统原生WebView(macOS用WKWebView、Windows用WebView2、Linux用WebKitGTK),安装包直接缩小到20MB。Tauri 2在2025年底正式发布,带来了移动端支持、多窗口改进和更安全的IPC通信。

Vue 3做前端UI:数据库客户端的UI本质上是一个复杂的表格编辑器+树形导航+代码编辑器。Vue 3的Composition API和响应式系统非常适合这种数据密集型的前端场景。

二、架构深度拆解

2.1 整体架构

DBX采用经典的前后端分离架构,但运行在同一个进程内:

┌─────────────────────────────────────────────────┐
│                   Tauri 2 壳                     │
│  ┌─────────────────────────────────────────────┐ │
│  │              Vue 3 前端                      │ │
│  │  ┌──────────┐ ┌──────────┐ ┌──────────┐    │ │
│  │  │ 连接管理  │ │ SQL编辑器 │ │ 数据表格  │    │ │
│  │  └──────────┘ └──────────┘ └──────────┘    │ │
│  │  ┌──────────┐ ┌──────────┐ ┌──────────┐    │ │
│  │  │ AI助手   │ │ ER图     │ │ 导入导出  │    │ │
│  │  └──────────┘ └──────────┘ └──────────┘    │ │
│  └─────────────────────────────────────────────┘ │
│                    Tauri IPC                      │
│  ┌─────────────────────────────────────────────┐ │
│  │              Rust 后端核心                    │ │
│  │  ┌──────────┐ ┌──────────┐ ┌──────────┐    │ │
│  │  │ 连接池   │ │ 查询引擎  │ │ AI引擎   │    │ │
│  │  └──────────┘ └──────────┘ └──────────┘    │ │
│  │  ┌──────────┐ ┌──────────┐ ┌──────────┐    │ │
│  │  │ MCP服务  │ │ 数据导出  │ │ 插件系统  │    │ │
│  │  └──────────┘ └──────────┘ └──────────┘    │ │
│  └─────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────┘

2.2 Rust后端核心模块

DBX的Rust后端是整个系统的灵魂。它负责:

数据库驱动抽象层:DBX并没有为每个数据库写一个完整的驱动,而是利用Rust生态中成熟的数据库crate,通过trait抽象统一接口:

// DBX的核心数据库trait(简化示意)
pub trait DatabaseDriver: Send + Sync {
    async fn connect(&self, config: &ConnectionConfig) -> Result<Box<dyn Connection>>;
    async fn execute(&self, conn: &dyn Connection, sql: &str) -> Result<QueryResult>;
    async fn get_schemas(&self, conn: &dyn Connection) -> Result<Vec<Schema>>;
    async fn get_tables(&self, conn: &dyn Connection, schema: &str) -> Result<Vec<Table>>;
    async fn get_columns(&self, conn: &dyn Connection, table: &str) -> Result<Vec<Column>>;
    fn driver_name(&self) -> &str;
    fn default_port(&self) -> u16;
}

每个数据库实现这个trait,底层调用对应的crate:

  • MySQL → sqlx::MySqlPool
  • PostgreSQL → sqlx::PgPool
  • SQLite → rusqlite
  • Redis → redis-rs
  • MongoDB → mongodb
  • ClickHouse → clickhouse-rs

连接池管理:DBX使用Rust的异步运行时(tokio)管理连接池,每个数据库连接配置独立的池大小、超时时间和空闲回收策略。

// 连接池配置示例
pub struct PoolConfig {
    pub max_size: u32,        // 最大连接数
    pub min_idle: u32,        // 最小空闲连接
    pub max_lifetime: Duration, // 连接最大生命周期
    pub idle_timeout: Duration, // 空闲超时
    pub connect_timeout: Duration, // 连接超时
}

查询执行引擎:支持同步和异步两种模式,大结果集使用流式读取避免内存溢出:

pub enum QueryMode {
    /// 一次性加载所有结果
    Eager,
    /// 流式读取,每次返回一批行
    Stream { batch_size: usize },
}

pub struct QueryResult {
    pub columns: Vec<ColumnInfo>,
    pub rows: Vec<Vec<Value>>,
    pub affected_rows: u64,
    pub execution_time: Duration,
    pub truncated: bool,  // 是否被截断
}

2.3 Tauri 2 IPC通信

Tauri 2的IPC(进程间通信)是连接Vue前端和Rust后端的桥梁。DBX通过Tauri的invoke机制暴露命令:

// Rust端:暴露给前端的命令
#[tauri::command]
async fn execute_query(
    state: State<'_, AppState>,
    connection_id: String,
    sql: String,
    mode: Option<String>,
) -> Result<QueryResult, String> {
    let conn = state.get_connection(&connection_id).await
        .map_err(|e| e.to_string())?;
    let result = conn.execute(&sql).await
        .map_err(|e| e.to_string())?;
    Ok(result)
}

#[tauri::command]
async fn get_databases(
    state: State<'_, AppState>,
    connection_id: String,
) -> Result<Vec<Database>, String> {
    let conn = state.get_connection(&connection_id).await
        .map_err(|e| e.to_string())?;
    conn.list_databases().await.map_err(|e| e.to_string())
}
// Vue前端:调用Rust命令
import { invoke } from '@tauri-apps/api/core';

const result = await invoke<QueryResult>('execute_query', {
    connectionId: 'my-postgres',
    sql: 'SELECT * FROM users LIMIT 100',
    mode: 'eager',
});

Tauri 2相比Tauri 1的关键改进:

  • 权限系统重构:每个命令需要显式声明权限,安全性更高
  • 事件系统增强:支持前端到后端的双向事件流,适合实时查询进度推送
  • 多窗口支持:可以同时打开多个数据库连接窗口

2.4 Vue 3前端架构

DBX的前端采用Vue 3 + TypeScript + Vite构建,核心组件包括:

SQL编辑器:基于Monaco Editor(VS Code同款编辑器引擎),支持SQL语法高亮、自动补全、错误提示。DBX会根据当前连接的数据库类型加载对应的SQL方言补全规则。

数据表格:虚拟滚动的高性能表格组件,支持百万级数据行的流畅展示。列宽自适应、排序、过滤、复制、导出——这些功能在大数据量下都需要精心优化。

树形导航:数据库 → Schema → 表 → 列的层级结构,懒加载避免一次性拉取所有元数据。

ER图:基于表之间的外键关系自动生成实体关系图,使用Canvas或SVG渲染。

三、60+数据库支持的技术实现

3.1 支持矩阵

DBX支持的数据库种类令人印象深刻,覆盖了几乎所有主流和国产数据库:

关系型数据库:MySQL、PostgreSQL、SQLite、MariaDB、SQL Server、Oracle、TiDB、OceanBase、达梦DM8、openGauss、GaussDB、KWDB、KingBase、Vastbase、GoldenDB、SelectDB、Doris、StarRocks

NoSQL数据库:MongoDB、Redis、Elasticsearch、CouchDB

向量数据库:Qdrant、Milvus、Weaviate

OLAP数据库:ClickHouse、DuckDB、Apache Druid

时序数据库:InfluxDB、TDengine、CockroachDB

图数据库:Neo4j、NebulaGraph

消息队列:Kafka(通过SQL接口)

其他:etcd、FTP/SFTP、BigQuery、Databricks、Databend、Redshift、Firebird

3.2 驱动插件化

DBX的数据库驱动采用插件化架构。每个数据库驱动是一个独立的Rust crate,编译为动态库或静态链接。这种设计有几个好处:

  1. 按需编译:Docker版本可以只编译常用数据库,减小镜像体积
  2. 独立更新:某个数据库驱动的bug修复不需要重新发布整个应用
  3. 社区贡献:第三方开发者可以开发新的数据库驱动插件
# Cargo.toml中的数据库feature flags
[features]
default = ["mysql", "postgres", "sqlite", "redis", "mongodb"]
mysql = ["dep:sqlx-mysql"]
postgres = ["dep:sqlx-postgres"]
sqlite = ["dep:rusqlite"]
redis = ["dep:redis"]
mongodb = ["dep:mongodb"]
clickhouse = ["dep:clickhouse-rs"]
duckdb = ["dep:duckdb"]
# ... 更多数据库

3.3 跨数据库SQL方言处理

不同数据库的SQL方言差异巨大。DBX在Rust后端维护了一个SQL方言适配层:

pub enum SqlDialect {
    MySQL,
    PostgreSQL,
    SQLite,
    SqlServer,
    Oracle,
    ClickHouse,
    // ...
}

impl SqlDialect {
    pub fn quote_identifier(&self, name: &str) -> String {
        match self {
            Self::MySQL => format!("`{}`", name),
            Self::PostgreSQL => format!("\"{}\"", name),
            Self::SqlServer => format!("[{}]", name),
            Self::Oracle => format!("\"{}\"", name.to_uppercase()),
            // ...
        }
    }

    pub fn limit_clause(&self, limit: u64, offset: u64) -> String {
        match self {
            Self::MySQL | Self::PostgreSQL | Self::SQLite => {
                format!("LIMIT {} OFFSET {}", limit, offset)
            }
            Self::SqlServer => {
                format!("OFFSET {} ROWS FETCH NEXT {} ROWS ONLY", offset, limit)
            }
            Self::Oracle => {
                format!("OFFSET {} ROWS FETCH NEXT {} ROWS ONLY", offset, limit)
            }
            // ...
        }
    }
}

四、AI SQL助手:内置的智能查询生成器

4.1 核心功能

DBX内置的AI助手是它区别于传统数据库客户端的最大亮点。选中一张表,用自然语言描述你想要的数据,AI直接生成SQL:

-- 用户输入:查询最近7天每天的新增用户数,按天排序
-- AI生成:
SELECT 
    DATE(created_at) AS date,
    COUNT(*) AS new_users
FROM users
WHERE created_at >= NOW() - INTERVAL 7 DAY
GROUP BY DATE(created_at)
ORDER BY date ASC;

4.2 多模型支持

DBX的AI助手支持多种LLM提供商:

pub enum AIProvider {
    OpenAI {
        api_key: String,
        model: String,       // gpt-4o, gpt-4o-mini
        base_url: Option<String>,
    },
    Claude {
        api_key: String,
        model: String,       // claude-sonnet-4-20250514
    },
    Ollama {
        base_url: String,    // http://localhost:11434
        model: String,       // qwen2.5-coder, deepseek-coder
    },
    Custom {
        base_url: String,
        api_key: String,
        model: String,
    },
}

本地模型优先:对于注重数据安全的团队,DBX支持通过Ollama运行本地模型。你的SQL和表结构永远不会离开本地网络。

4.3 安全检查机制

AI生成的SQL在执行前会经过安全检查:

pub fn safety_check(sql: &str, dialect: &SqlDialect) -> SafetyReport {
    let mut warnings = Vec::new();
    let upper = sql.to_uppercase();

    // 检查是否有危险操作
    if upper.contains("DROP ") || upper.contains("TRUNCATE ") {
        warnings.push(SafetyWarning::DestructiveOperation);
    }
    if upper.contains("DELETE ") && !upper.contains("WHERE") {
        warnings.push(SafetyWarning::DeleteWithoutWhere);
    }
    if upper.contains("UPDATE ") && !upper.contains("WHERE") {
        warnings.push(SafetyWarning::UpdateWithoutWhere);
    }

    // 检查是否缺少LIMIT
    if upper.starts_with("SELECT") && !upper.contains("LIMIT") {
        warnings.push(SafetyWarning::SelectWithoutLimit);
    }

    SafetyReport { warnings, safe: warnings.is_empty() }
}

五、MCP协议:让AI Agent直接查询你的数据库

5.1 什么是MCP?

MCP(Model Context Protocol)是Anthropic在2024年底推出的开放协议,定义了AI模型与外部工具之间的标准通信方式。简单来说,MCP让Claude Code、Cursor、Windsurf等AI编程工具能够直接调用外部服务。

DBX实现了MCP Server,意味着你配置好的数据库连接可以被任何支持MCP的AI工具直接访问。

5.2 DBX的MCP实现

DBX通过Tauri的后台服务暴露MCP端点:

// MCP Server核心实现
pub struct DbxMcpServer {
    connections: Arc<RwLock<HashMap<String, Box<dyn DatabaseDriver>>>>,
    server: McpServer,
}

impl DbxMcpServer {
    pub async fn start(&self, port: u16) -> Result<()> {
        // 注册MCP工具
        self.server.register_tool("list_connections", list_connections_handler);
        self.server.register_tool("execute_query", execute_query_handler);
        self.server.register_tool("get_schema", get_schema_handler);
        self.server.register_tool("get_table_info", get_table_info_handler);
        self.server.register_tool("export_query_result", export_handler);

        self.server.listen(port).await
    }
}

// MCP工具处理函数
async fn execute_query_handler(params: Value) -> Result<Value> {
    let conn_id = params["connection_id"].as_str()
        .ok_or("Missing connection_id")?;
    let sql = params["sql"].as_str()
        .ok_or("Missing sql")?;

    // 安全检查
    let report = safety_check(sql, &dialect);
    if !report.safe {
        return Ok(json!({
            "error": "Safety check failed",
            "warnings": report.warnings
        }));
    }

    let result = execute_on_connection(conn_id, sql).await?;
    Ok(json!(result))
}

5.3 在Claude Code中使用DBX的MCP

配置文件(.mcp.json):

{
  "mcpServers": {
    "dbx": {
      "command": "dbx",
      "args": ["mcp", "serve", "--port", "3001"],
      "env": {}
    }
  }
}

配置完成后,Claude Code可以直接这样使用:

> 帮我查一下users表里最近注册的10个用户

[Claude Code调用 MCP tool: execute_query]
SELECT * FROM users ORDER BY created_at DESC LIMIT 10;

> 统计每个城市的用户数量,找出TOP 5

[Claude Code调用 MCP tool: execute_query]
SELECT city, COUNT(*) as user_count 
FROM users 
GROUP BY city 
ORDER BY user_count DESC 
LIMIT 5;

这比手动打开客户端、复制粘贴SQL要高效得多。

六、Docker自部署:团队共享数据库连接

6.1 Docker Compose一键部署

DBX支持Docker自部署,团队成员共享数据库连接配置:

# docker-compose.yml
version: '3.8'
services:
  dbx:
    image: dbxio/dbx:latest
    ports:
      - "3000:3000"   # Web界面
      - "3001:3001"   # MCP端点
    volumes:
      - dbx-data:/data
    environment:
      - DBX_DATA_DIR=/data
      - DBX_ADMIN_PASSWORD=your-secure-password
      - DBX_MCP_ENABLED=true
    restart: unless-stopped

volumes:
  dbx-data:

启动后访问 http://your-server:3000 即可使用Web版DBX。

6.2 数据安全考量

自部署模式下,所有数据都在你自己的服务器上:

  • 连接信息加密存储:数据库密码使用AES-256-GCM加密
  • 访问控制:支持Basic Auth和JWT认证
  • 审计日志:所有查询操作都有日志记录
  • 网络隔离:可以配置只允许内网访问
// 连接信息加密
pub fn encrypt_connection_config(config: &ConnectionConfig, key: &[u8]) -> Result<Vec<u8>> {
    let plaintext = serde_json::to_vec(config)?;
    let nonce = generate_nonce();
    let cipher = Aes256Gcm::new(GenericArray::from_slice(key));
    let ciphertext = cipher.encrypt(&nonce, plaintext.as_ref())
        .map_err(|_| anyhow!("Encryption failed"))?;
    // 返回 nonce + ciphertext
    let mut result = nonce.to_vec();
    result.extend_from_slice(&ciphertext);
    Ok(result)
}

七、与竞品的深度对比

7.1 DBX vs DBeaver

DBeaver是老牌开源数据库客户端,基于Java/Eclipse RCP。它的优势是功能全面、社区成熟,但劣势也很明显:

维度DBXDBeaver
安装包大小20MB500MB+(含JRE)
内存占用50-100MB500MB-1.5GB
启动速度<1秒5-15秒
AI集成内置
MCP支持原生
ER图内置Community版无
数据库数量60+100+(含付费驱动)

7.2 DBX vs TablePlus

TablePlus是macOS上最受欢迎的数据库客户端之一,以其精致的UI著称。但它的局限性在于:

  • 仅支持macOS(Windows版功能受限,无Linux版)
  • 不支持国产数据库(达梦、OceanBase等)
  • 无AI集成
  • 闭源收费

DBX在跨平台和数据库覆盖面上完胜,TablePlus在macOS原生体验上仍有优势。

7.3 DBX vs Beekeeper Studio

Beekeeper Studio是另一个优秀的开源选项,基于Electron构建。对比:

维度DBXBeekeeper Studio
技术栈Rust+Tauri 2Electron
安装包大小20MB150MB+
数据库数量60+15-20
AI集成内置
MCP支持原生
国产数据库支持全面

八、实际使用场景与代码实战

8.1 场景一:跨数据库数据迁移

从MySQL迁移数据到PostgreSQL:

-- 1. 在DBX中连接MySQL,导出表结构
SHOW CREATE TABLE users;

-- 2. 在DBX中连接PostgreSQL,创建对应表
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

-- 3. 使用DBX的导入功能,从MySQL导出CSV,导入PostgreSQL

DBX内置的导入导出功能支持CSV、JSON、SQL、Excel多种格式,不需要额外工具。

8.2 场景二:AI辅助复杂查询

假设你有一个电商数据库,需要分析用户购买行为:

-- 自然语言:找出过去30天内购买了3次以上、且平均订单金额超过500元的用户,
--          按总消费金额降序排列

-- AI生成的SQL:
SELECT 
    u.id,
    u.username,
    u.email,
    COUNT(o.id) AS order_count,
    AVG(o.total_amount) AS avg_order_amount,
    SUM(o.total_amount) AS total_spent
FROM users u
JOIN orders o ON u.id = o.user_id
WHERE o.created_at >= NOW() - INTERVAL 30 DAY
  AND o.status = 'completed'
GROUP BY u.id, u.username, u.email
HAVING COUNT(o.id) >= 3 AND AVG(o.total_amount) > 500
ORDER BY total_spent DESC;

8.3 场景三:MCP驱动的自动化运维

通过Claude Code + DBX MCP实现数据库健康检查:

# 在Claude Code中
> 检查PostgreSQL数据库的连接数、慢查询和表膨胀情况

# Claude Code自动调用DBX MCP执行:
SELECT count(*) as active_connections 
FROM pg_stat_activity 
WHERE state = 'active';

SELECT query, calls, mean_exec_time, total_exec_time
FROM pg_stat_statements 
ORDER BY mean_exec_time DESC 
LIMIT 10;

SELECT schemaname, relname, n_dead_tup, n_live_tup,
       round(n_dead_tup::numeric / GREATEST(n_live_tup, 1) * 100, 2) AS dead_ratio
FROM pg_stat_user_tables
WHERE n_dead_tup > 1000
ORDER BY dead_ratio DESC;

九、性能优化与最佳实践

9.1 大数据量查询优化

处理百万级数据时,DBX的流式读取模式至关重要:

// 使用流式模式查询大表
const stream = await invoke<QueryStream>('start_stream_query', {
    connectionId: 'my-db',
    sql: 'SELECT * FROM large_table',
    batchSize: 1000,
});

// 逐批处理数据
for await (const batch of stream) {
    processBatch(batch.rows);
    updateProgress(batch.offset);
}

9.2 连接池调优

根据使用场景调整连接池参数:

{
    "connectionPool": {
        "maxSize": 10,
        "minIdle": 2,
        "maxLifetime": "30m",
        "idleTimeout": "10m",
        "connectTimeout": "5s"
    }
}
  • 开发环境maxSize: 3-5,避免占用太多数据库连接
  • 生产Docker部署maxSize: 20-50,根据团队规模调整
  • 只读查询场景:可以适当增大maxSize

9.3 内存管理

Rust的优势在内存管理上体现得淋漓尽致。DBX处理大结果集时的内存策略:

  1. 行数限制:默认最多返回10000行,超出部分需要显式确认
  2. 列宽截断:单个单元格超过1MB时自动截断
  3. 懒加载:树形导航中的表列表按需加载
  4. 缓存过期:元数据缓存5分钟过期,自动刷新

十、生态系统与社区

10.1 插件系统

DBX支持通过插件扩展功能:

# 插件清单示例
[plugin]
name = "dbx-data-compare"
version = "0.1.0"
description = "Compare data between two databases"
author = "community"

[plugin.dependencies]
min_dbx_version = "0.4.0"

10.2 社区贡献

DBX的开源社区活跃度很高:

  • GitHub Stars:持续增长中
  • Discord社区:活跃的技术讨论
  • QQ群:中文社区支持
  • Contributing指南:清晰的贡献流程

10.3 许可证

DBX采用Apache 2.0 + MIT双许可证,个人和商业使用均免费,无功能阉割。

十一、未来展望

DBX的Roadmap上有几个值得关注的方向:

  1. 移动端支持:Tauri 2已经支持iOS和Android,DBX有望成为第一个支持移动端的全能数据库客户端
  2. 协作功能:多人同时查看同一个数据库连接,类似Google Docs的协作体验
  3. 数据建模:可视化ER图编辑,直接生成DDL
  4. AI增强:更智能的查询优化建议、索引推荐、慢查询诊断
  5. 插件市场:社区插件的集中发布和管理

总结

DBX的出现代表了数据库客户端工具的一个新方向:轻量、AI原生、MCP就绪。它用Rust+Tauri 2证明了20MB的安装包完全可以做到传统工具需要500MB才能实现的功能,而且体验更好。

对于开发者来说,DBX的价值在于:

  1. 减少工具切换:一个客户端搞定所有数据库,不再需要装四五个工具
  2. AI提效:自然语言转SQL,复杂查询不再需要手写
  3. MCP赋能:让AI编程工具直接访问你的数据库,实现真正的AI辅助开发
  4. 团队协作:Docker自部署,共享连接配置,统一管理
  5. 开源免费:Apache 2.0许可证,无任何使用限制

如果你还在用DBeaver忍受漫长的启动时间,或者在为Navicat的高昂费用犹豫,不妨试试DBX。20MB,下载即用,可能就是你一直在等的那个数据库客户端。


项目地址:https://github.com/t8y2/dbx

官方文档:https://dbxio.com

下载地址:https://github.com/t8y2/dbx/releases

复制全文 生成海报 DBX Rust Tauri 数据库客户端 MCP AI助手 开源 Vue

推荐文章

api接口怎么对接
2024-11-19 09:42:47 +0800 CST
如何将TypeScript与Vue3结合使用
2024-11-19 01:47:20 +0800 CST
Vue3中如何扩展VNode?
2024-11-17 19:33:18 +0800 CST
Nginx rewrite 的用法
2024-11-18 22:59:02 +0800 CST
阿里云免sdk发送短信代码
2025-01-01 12:22:14 +0800 CST
程序员茄子在线接单