NovaSQL 是一个基于 Tauri 2 的桌面 SQL 工作台,目标是把 Navicat 的连接管理 + Tableau 的可视化分析 放进一个轻量桌面应用。支持 SQLite 和 DuckDB 双引擎,内置 AI 助手(流式输出),中文优先。
| 层 | 选型 |
|---|---|
| 桌面框架 | Tauri 2.11 (Rust backend) |
| 前端 | React 18 + Vite 6 + Tailwind CSS v4 |
| 状态管理 | Zustand + Immer |
| SQL 编辑器 | CodeMirror 6 |
| 图表引擎 | Apache ECharts |
| 拖拽仪表盘 | @dnd-kit + react-grid-layout |
| 数据库 | DuckDB 1.1 (bundled) + rusqlite 0.32 (bundled) |
| AI 提供者 | OpenAI 兼容接口(默认 DeepSeek V4 Flash) |
- SQLite 和 DuckDB 双引擎连接
- 连接创建、编辑、删除、测试
- 中文/英文双语界面(设置中切换)
- 搜索过滤表列表
- Schema 详情:列名、数据类型(彩色标签)、主键、NOT NULL 标记
- 数据预览:可调行数、行号、NULL 样式、hover 高亮
- CodeMirror 6 语法高亮
- 多标签页(Ctrl+T 新建、Ctrl+W 关闭)
- Ctrl+Enter 运行、Ctrl+/ 行注释切换
- 结果表格:排序、筛选、导出 CSV
- SQL 代码片段库
- 自然语言转 SQL(NL-to-SQL)
- SQL 解释、错误修复
- 查询结果总结、对比、趋势分析
- 流式输出:逐字显示 AI 回复,带闪烁光标
- 多轮对话上下文(结构化 messages,非拼接文本)
- SQL 安全护栏:写操作检测、多语句拦截
- 一键"应用并运行"AI 生成的 SQL
- Schema 感知:数据类型、主键、外键信息注入 prompt
- 拖拽式字段货架(行/列/筛选器/标记)
- 自动生成 ECharts 图表(柱状图、折线图、饼图、散点图等)
- react-grid-layout 自由布局仪表盘
- 图表配置面板(类型、聚合、排序)
- 添加图表 toast 反馈 + 仪表盘导航
- 文件选择 + 编码自动检测(chardet)
- 数据预览 + 表名建议
- 列类型推断
- 项目保存/加载(布局、连接、查询状态)
- 最近项目列表
- 查询历史记录
NovaSQL/
├── src/ # React 前端
│ ├── components/ # UI 组件
│ │ ├── dnd/ # 拖拽仪表盘组件
│ │ ├── dashboard/ # 仪表盘网格组件
│ │ ├── QueryAiSidebar.tsx # AI 助手侧边栏
│ │ ├── ConnectionManager.tsx
│ │ ├── OtherSectionsPanel.tsx
│ │ └── ...
│ ├── stores/ # Zustand 状态管理
│ ├── lib/ # Tauri IPC 封装
│ ├── i18n/ # 国际化字符串
│ ├── charts/ # ECharts 图表配置
│ ├── contracts/ # 类型契约
│ └── App.tsx # 主应用入口
├── src-tauri/ # Rust 后端
│ ├── src/
│ │ ├── commands/ # Tauri 命令
│ │ │ ├── ai.rs # AI 会话 + 流式推送
│ │ │ ├── connections.rs # 连接管理 + schema 检查
│ │ │ ├── sql.rs # SQL 执行
│ │ │ ├── analytics.rs # 语义查询 + 图表生成
│ │ │ ├── import.rs # CSV 导入
│ │ │ ├── history.rs # 查询历史
│ │ │ └── project.rs # 项目持久化
│ │ ├── domain/ # 业务逻辑
│ │ │ ├── ai_provider.rs # AI 提供者(流式 SSE)
│ │ │ ├── ai_prompt.rs # Prompt 模板
│ │ │ ├── ai_guardrails.rs # SQL 安全护栏
│ │ │ ├── db_backend.rs # SQLite/DuckDB 双后端
│ │ │ └── ...
│ │ └── lib.rs # Tauri 注册
│ └── .env # AI API 配置(不入 git)
├── crates/
│ └── analytics-core/ # 分析引擎核心库
├── Cargo.toml # Workspace 根配置
└── package.json
- Node.js 18+ / pnpm
- Rust 1.75+ (stable)
- Tauri CLI (
cargo install tauri-cli)
# 安装依赖
pnpm install
# 启动开发模式(前端 HMR + Rust 编译)
pnpm tauri dev
# 仅运行前端测试
pnpm test
# 仅运行 Rust 测试
cargo test --manifest-path src-tauri/Cargo.toml
# 完整质量检查(前端测试 + 前端构建 + Rust 测试)
pnpm quality
# 打包生产安装包
pnpm tauri build在 src-tauri/.env 中配置 AI 提供者(OpenAI 兼容接口):
NOVASQL_AI_BASE_URL=https://api.deepseek.com/v1
NOVASQL_AI_API_KEY=sk-your-api-key
NOVASQL_AI_MODEL=deepseek-v4-flash应用启动时会读取 .env 并强制覆盖同名环境变量。
| 命令 | 说明 |
|---|---|
pnpm dev |
仅启动 Vite 前端开发服务器 |
pnpm tauri dev |
启动完整 Tauri 开发模式 |
pnpm test |
运行前端测试(vitest) |
pnpm build |
构建前端生产包 |
pnpm tauri build |
构建生产安装包 |
MIT