nu-bi/nubi
GitHub: nu-bi/nubi
浏览器原生的嵌入式 BI 平台,通过 DuckDB-WASM 在前端执行分析查询,实现接近零成本的仪表盘查看。
Stars: 2 | Forks: 1
Nubi
在浏览器中运行的 BI —— 单次仪表盘查看成本接近于零。
文档 ·
对比 Hex/Cube ·
快速开始 ·
架构 ·
路线图
## 什么是 Nubi?
Nubi 是一个开箱即用的 BI 和嵌入式分析平台。其核心架构赌注在于**分析内核默认运行在用户的浏览器中**(DuckDB-WASM / Pyodide),因此仪表盘的边际查看成本几乎为零 —— 服务端内核(E2B / Modal Firecracker microVM)仅作为运行原生 wheel 和处理大型任务的备用方案。
数据平面在每个边界都使用 **Arrow IPC**,因此数据在数据仓库、边缘节点、浏览器和内核之间移动时无需承担序列化开销。其切入点是**嵌入式分析**:宿主应用只需签署短期的 JWT,挂载 `
`,即可获得带有服务端行级安全(RLS)控制的实时跨过滤仪表盘,且每次查看的成本几乎为零。
## ✨ 为什么选择 Nubi?
| | Hex | Cube | **Nubi** |
|---|---|---|---|
| 内核 | 每个会话使用 Python,位于他们的云端 ($$$) | n/a | **浏览器内使用 Pyodide;仅在需要时按需启动服务端内核** |
| 结果传输 | 通过 pandas 的 JSON | JSON / SQL API | **Arrow IPC —— 零序列化开销** |
| 可视化 | Plotly/SVG,超过 ~5 万行时会卡顿 | 自行携带 | **基于 Arrow 缓冲区的 WebGL/WebGPU,可流畅交互超过 100 万个数据点** |
| 缓存 | 基于会话 | 在 Cube Store 中进行预聚合 | **内容哈希边缘缓存 + 自动预聚合** |
| 建模成本 | 中等 | 高(优先使用 Cube) | **低 —— 指向数据仓库即可开始** |
| 嵌入 | 独立产品 | 仅支持 Headless | **核心界面;不仅支持输出,编辑器也可嵌入** |
| 免费层级 | 按席位收取内核计算费用 | 基础设施/席位 | **真正的免费层级 —— 计算发生在用户的浏览器中** |
**核心差异化优势:**
- **Arrow 原生数据平面** —— sqlglot planner → PhysicalPlan → executor → Arrow IPC 流,具有固定的缓存键规范和一致性测试套件,因此未来的 Rust executor 可以在不改动调用点的情况下无缝替换。
- **内容哈希边缘缓存** —— N 个查看同一仪表盘的用户最终只会触发一次对数据仓库的访问。缓存键:`sha256(canonical_json({sql, params, rls_claims}))`。
- **Auth-as-code + 服务端 RLS** —— JWT claim 携带行/列策略;planner 将其作为 AST 级别的谓词注入(绝不使用字符串拼接)。通过同一套基础机制,同时支持内部用户、多租户嵌入以及 Google OAuth。
- **受治理的语义指标** —— `MetricDefinition` 将业务逻辑统一编码(度量、维度、时间智能、RLS 键、派生公式),并通过 `POST /metrics/{id}/query` 按需编译为 SQL。Agents 和仪表盘查询的是受治理的词汇表,而不是原始 SQL。内置功能:派生/比率度量(带 NULLIF 保护的公式)、完整的时间智能套件(前期对比、同比、本年/本季/本月至今、滚动窗口、最新快照)、带有 "Other" 桶的动态 top-N、`percentile_cont`、`approx_count_distinct`。
- **智能引擎 + 预聚合汇总** —— `build_rollup_for_metric` 将匹配指标编译器 `__base` CTE 的汇总结果物化,以便路由器可以直接从汇总表提供派生和窗口化指标查询,而无需访问原始事实表。单看板的查询融合以及共享的 `(model, predicate, rls_hash)` 缓存键,将重复的小部件加载合并为一次扫描。
- **作为数据应用引擎的 Flows** —— 支持单元格级别的 `cpu_cores / mem_mb / timeout_s` 资源请求;带有运行级种子的随机单元格以保证可重复性;类型化的 artifact 通道(通过 handle 处理的 pickle/joblib/model blobs);场景扫描 + 回填;事件/webhook/下游触发器 + 运行历史 + SLA 监控;受治理的回写(幂等/事务性、dry-run、RBAC、审批门控)。驱动闭环周期:Flow 计算 → 表 → 指标 → 仪表盘 → 行动 → 回写 → 重新触发。
- **Canvas —— HTML 原生文档界面** —— `CanvasDoc` 是直接编写的自由格式 HTML(由人类或 LLM 编写)。元素通过侧边的 `data-el-id` → 绑定映射,绑定到查询、语义指标或 HTTP API 连接器。复用仪表盘的数据/RLS/清理器/调度层;增加了代码+可视化编辑器、右侧绑定检查器、`/c/:id` 公共查看器,以及 生成→验证→修复 的 LLM 循环。定时发送(PDF/HTML)复用 `report_send` 流程处理器。
- **LLM 可编写的仪表盘 + MCP** —— 仪表盘是一个经过清理的 HTML/CSS 文档,包含声明式 ``、`` 和 `` 自定义元素。LLM 和 MCP Agents 编写布局和小部件属性;它们绝不编写 WebGL 或 fetch 代码。15 个 MCP 工具将完整的创作界面暴露给任何 Agent。
- **自动 WebGL 渲染** —— `` 在超过 20,000 行时会自动切换到 regl WebGL 散点图渲染;低于此数则使用 SVG/HTML。在交互式帧率下,直接读取 Arrow 列可处理多达约 100 万个数据点。
- **SQL 优先的连接器 SDK** —— 任何 `fn(plan) -> pyarrow.Table` 都是具备声明能力的一等连接器。能力门控强制执行安全底线:当策略处于活动状态时,带有 `predicate_rls=False` 的连接器将被拒绝(501)。内置连接器包括:`postgres` (ADBC)、`duckdb`(内存中 + 基于文件)、`duckdb_storage`(S3/R2/MinIO httpfs)、`http_json`、`mysql`、`mariadb`、`jdbc`、`snowflake`、`bigquery`、`clickhouse`、`databricks`、`athena`、`trino`/`presto`、`sqlserver`/`azuresql`/`azuresynapse`、`oracle`、`redshift`、`cockroachdb`、`cloudsql`、`sftp`、`ftp`(大多数通过可选的延迟导入驱动程序支持)。私有数据库可通过 `network_mode='bridge'` WebSocket 隧道访问。
- **真正的免费层级** —— 计算发生在用户的浏览器中;Hex 如果不承担内核计算成本,就无法做到这一点。
## 📸 产品截图
上方的首图是**查询编辑器**。下面展示更多界面 —— 请查看 [**UI 导览**](docs/ui-tour.md) 获取完整的指引式 walkthrough。
Dashboard editor — drag-and-drop widgets, 9 chart types, live cross-filtering
|
Flows — cell-based SQL/Python orchestration (notebook + canvas views)
|
Data browser — explore any connected source, edit grid-style
|
Published dashboard — embeddable, RLS-enforced, near-zero cost per view
|
## 🚀 快速开始
### Docker Compose(最快 —— 一条命令)
仓库自带一个 `docker-compose.yml`,包含两个服务:`db` (postgres:16-alpine) 和一个
组合式 `app`(根目录 `Dockerfile` —— 构建 Vite SPA 并运行 FastAPI,在 8000 端口的单一源上提供 SPA 和 `/api/v1` API 服务)。
```
# Clone 并启动 stack
git clone https://github.com/nu-bi/nubi.git
cd nubi
make up # docker compose up -d --build
# 打开应用
# App (SPA + API): http://localhost:8000
# API 文档: http://localhost:8000/docs (仅限开发环境)
# (可选)注入测试用户
cd backend && DATABASE_URL=postgresql://nubi:nubi@localhost:5432/nubi python seed.py
# → test@nubi.dev / nubitest123
# 冒烟测试
make smoke # scripts/smoke.sh — health + auth + query assertions
```
开发路径 —— 后端 + 前端分别运行
**前置条件:** Python 3.11+, Node 20+
```
# ── Backend ───────────────────────────────────────────────────
python3.11 -m venv .venv && source .venv/bin/activate
pip install -r backend/requirements.txt
# 复制并编辑 env — 至少设置 DATABASE_URL 和 JWT_SECRET
cp .env.example backend/.env
# 运行 migrations,然后启动 API
python database/migrate.py
cd backend && uvicorn main:app --reload
# API: http://localhost:8000
# 文档: http://localhost:8000/docs
# ── Frontend(新终端,repo 根目录)────────────────────────
npm install
cp .env.example .env # set VITE_BACKEND_URL=http://localhost:8000
npm run dev
# Frontend: http://localhost:5173
```
初始化测试用户(可选,在激活的 venv 环境下):
```
cd backend && DATABASE_URL=postgresql://user:pass@host/db python seed.py
# → test@nubi.dev / nubitest123
```
关键环境变量 (.env.example)
| 变量 | 必需 | 描述 |
|---|---|---|
| `DATABASE_URL` | 是 | `postgresql://...?sslmode=require` (Neon) 或本地 Postgres |
| `JWT_SECRET` | 是 | HS256 签名密钥 —— `openssl rand -hex 32` |
| `VITE_BACKEND_URL` | 前端 | FastAPI 后端的基础 URL |
| `GOOGLE_CLIENT_ID` | OAuth | Google OAuth 客户端 ID |
| `GOOGLE_CLIENT_SECRET` | OAuth | Google OAuth 客户端密钥 |
| `GOOGLE_REDIRECT_URI` | OAuth | 在 Google 控制台中注册的回调 URL |
| `FRONTEND_URL` | 后端 | Google OAuth 后后端重定向的地址 |
| `CORS_ORIGINS` | 后端 | 逗号分隔的允许来源 |
| `ENV` | 后端 | `development` / `production`(在生产环境中禁用 `/docs`) |
| `KERNEL_LOCAL_ENABLED` | 后端 | 设为 `true` 以允许本地子进程内核(仅限开发环境,默认为 `true`) |
| `KERNEL_REMOTE_PROVIDER` | 后端 | 设为 `e2b` 或 `modal` 以使用 Firecracker/Modal 沙箱内核(生产环境) |
| `LLM_PROVIDER` | 可选 | `litellm` / `anthropic` / `openai` / `gemini`。`litellm`(一个 SDK,支持所有提供商及模型级成本追踪)读取 `LITELLM_MODEL`;请参阅 [AI 文档](docs/ai-and-mcp.md#configuring-the-llm-provider-operators)。未设置 ⇒ 离线模式。 |
| `ALLOW_UNSAFE_PUBLIC_EXPORTS` | 可选 | 设为 `true` 以启用免认证的 CDN 静态导出(模式 3b)。需要组织 `public_exports` 门控。默认 `false`。 |
| `EMBED_DEV_TOKEN_ENABLED` | 仅限开发 | 设为 `true` 以启用仅限开发的 HS256 嵌入 token 生成端点。**生产环境中绝对不能设为 `true`。** |
| `NUBI_COLLECT_ROW_CAP` | 可选 | 快照/报告数据收集的行数上限。默认 `50000`。`0` = 无限制。 |
| `JOBS_SCHEDULER_ENABLED` | 可选 | 设为 `true` 以激活后台作业调度程序的运行。默认 `false`。 |
| `FLOWS_TICK_SECRET` | 可选 | 用于 `POST /flows/tick`(外部 cron 调度器)的共享密钥。留空则禁用。 |
| `FX_EMERGENCY_RATE` | 仅限企业版 | 无实时汇率可用时的紧急回退 USD→ZAR 汇率。默认 `16.26`。 |
## 🏗️ 架构
```
flowchart TD
subgraph client["Browser / host page"]
direction TB
DASH["<nubi-dashboard> + widget kit
kpi · table · chart · filter"]
WASM["DuckDB-WASM kernel
regl WebGL render above ~20k rows"]
DASH --- WASM
end
subgraph api["FastAPI backend"]
direction TB
AUTH["Auth · email+pw · Google OAuth · JWKS"]
QUERY["/query"]
PLAN["Planner — sqlglot AST → PhysicalPlan
injects row-level-security predicates"]
CACHE["Content-hashed cache
X-Nubi-Cache: HIT | MISS"]
REG["Connector registry"]
SVC["/ai · /lineage · /jobs · REST CRUD"]
KR["/compute/run · kernel router"]
QUERY --> PLAN --> CACHE --> REG
end
subgraph data["Data sources — bring your own"]
direction TB
WH["Warehouses
postgres · duckdb · http_json
mysql · snowflake · bigquery"]
BRIDGE["VPC bridge · WebSocket tunnel"]
META["Metadata DB
Postgres / Neon"]
end
subgraph compute["Compute kernel · first-party only · embed → 403"]
direction TB
LOCAL["LocalSubprocessRunner · dev"]
REMOTE["E2B / Modal · Firecracker microVM"]
end
DASH -->|"getToken() → JWT"| AUTH
DASH -->|"HTTPS"| QUERY
DASH -.-> SVC
CACHE -->|"Arrow IPC stream"| WASM
REG -->|"Arrow IPC"| WH
REG --> BRIDGE --> WH
REG --> META
KR --> LOCAL
KR --> REMOTE
classDef client fill:#eff6ff,stroke:#3b82f6,color:#1e3a8a;
classDef secure fill:#fef2f2,stroke:#ef4444,color:#991b1b;
class client client;
class compute secure;
```
### 技术栈
| 层级 | 技术 |
|---|---|
| 后端 | FastAPI 0.131, Python 3.11+, uvicorn, pydantic-settings v2 |
| 数据库 (DB) | asyncpg(连接池,原生 SQL);Postgres 16 / Neon(必须使用 SSL) |
| 认证 (Auth) | argon2-cffi (argon2id), PyJWT HS256, cryptography RS256/ES256 JWKS |
| 数据平面 | sqlglot(AST 规划器 + RLS 注入 + 方言验证)、pyarrow、DuckDB(内存 + 文件)、adbc-driver-postgresql;mysql/mariadb/jdbc 连接器(可选驱动程序);VPC 桥接隧道 |
| 缓存 | 进程内 LRU + TTL (`ContentAddressedCache`);接口支持替换为 Redis |
| 计算 | 子进程(开发);e2b-code-interpreter / modal(生产,可选的延迟加载依赖项) |
| AI / LLM | NullProvider(默认,零网络请求);进程内 LiteLLM(推荐 —— 一个 SDK,支持所有提供商 + 每次调用的成本追踪);通过环境变量延迟加载原生的 Anthropic / OpenAI / Gemini SDK |
| 前端 | React 19, Vite 7, TailwindCSS, react-router-dom |
| 可视化 | regl(WebGL 散点图,约 100 万点)、apache-arrow、@duckdb/duckdb-wasm、ECharts |
| 嵌入 | 自定义元素 (``, ``, ``, ``)、DOMPurify |
| SDK | `@nubi/sdk` —— 框架无关的 ESM,封装了认证 + 查询 + 资源 CRUD + 嵌入 |
| CLI | Python typer (`nubi / deploy / run / diff / pull`) |
| MCP | Python `mcp` SDK, stdio 传输, 15 个工具 |
| 自托管 | Docker Compose (`docker-compose.yml`);Makefile: `make up/down/migrate/smoke` |
### Monorepo 结构
```
nubi/
├── backend/ FastAPI app, connectors, planner, compute, auth, AI, jobs
│ ├── app/
│ │ ├── auth/ argon2id, JWT HS256, Google PKCE, JWKS, sessions
│ │ ├── connectors/ sqlglot planner, Arrow executor, cache, pre-agg
│ │ ├── compute/ KernelRunner ABC, LocalSubprocessRunner, E2BRunner, ModalRunner
│ │ ├── ai/ LLMProvider, grounding, dashboard generation
│ │ ├── lineage/ sqlglot AST extractor, LineageGraph
│ │ ├── jobs/ cron + interval scheduler, executor, store
│ │ ├── repos/ asyncpg (prod) + in-memory (test) repository layer
│ │ └── routes/ auth, query, compute, embed, ai, lineage, jobs, resources
│ └── tests/ ~180 test modules + conformance suite (golden Arrow + cache keys) + security/ suite
├── database/ Forward-only SQL migration runner + 13 OSS migrations + 4 EE migrations
├── src/ React 19 frontend (Vite + Tailwind) — pages, components, viz
├── embed/ Web components: , , ,
├── sdk/ @nubi/sdk — createNubiClient ESM package
├── cli/ nubi CLI (typer): login / deploy / run / diff / pull
├── mcp/ MCP stdio server — 15 tools for agent authoring
├── docs/ cache-key-spec.md, conformance.md, kernel-security.md, assets/
├── Dockerfile combined image: Vite SPA build + FastAPI (single origin)
├── docker-compose.yml db (postgres:16) + app (SPA + API on :8000)
├── Makefile up / down / migrate / logs / smoke
├── scripts/smoke.sh End-to-end health + auth + query assertions
└── .env.example All env vars with comments
```
## 📊 项目状态
| 里程碑 | 状态 | 已发布功能 |
|---|---|---|
| M0 — 基础架构 | ✅ 完成 | 基于 Neon Postgres 的 React + FastAPI 重构,email/pw + Google OAuth,数据库迁移 |
| M1 — 连接器 + 一致性 | ✅ 完成 | sqlglot planner,PhysicalPlan,Postgres/DuckDB 连接器,固定的缓存键规范 |
| M2 — 流处理 + 缓存 + 下推 | ✅ 完成 | Arrow IPC 流,内容哈希 LRU 缓存,projection/predicate/LIMIT 下推,预聚合种子 |
| M3 — 嵌入认证 + `` | ✅ 完成 | HS256 + JWKS 验证器,签发者注册表,服务端 RLS,来源绑定,Web 组件 |
| M4 — 本地内核 + 放置路由器 | ✅ 完成 | KernelRunner ABC, LocalSubprocessRunner, ComputePlacementRouter, `POST /compute/run` |
| M4-REMOTE — E2B/Modal 沙箱 | ✅ 完成 | E2BRunner (Firecracker microVM), ModalRunner 适配器 |
| M5 — WebGL 可视化 | ✅ 完成 | 基于 Arrow 缓冲区的 regl GPU 散点图,`` 在 2 万行以上自动启用 WebGL |
| M6 — REST API + SDK + CLI | ✅ 完成 | asyncpg 仓储层,datastores/boards/widgets/queries 的 CRUD,`@nubi/sdk`,typer CLI |
| M7 — 血缘关系 + AI + MCP | ✅ 完成 | sqlglot 血缘提取器,确定性基础,LLMProvider,MCP 服务端(15 个工具) |
| M8 — LLM 可编写的仪表盘 | ✅ 完成 | ``, ``, `` 小部件套件,DOMPurify 渲染器,`POST /ai/dashboard` |
| M9 — 连接器 SDK + HTTP/JSON | ✅ 完成 | FunctionConnector, apply_rls_postfetch, HttpJsonConnector,刻意将 NoSQL 排除在范围之外 |
| 连接器广度 | ✅ 完成 | 注册表内置 20 多种类型:`postgres`、`duckdb`(内存 + 文件支持)、`duckdb_storage`(S3/R2/MinIO httpfs)、`http_json`、`mysql`、`mariadb`、`jdbc`、`snowflake`、`bigquery`、`clickhouse`、`databricks`、`athena`、`trino`/`presto`、`sqlserver`/`azuresql`/`azuresynapse`、`oracle`、`redshift`、`cockroachdb`、`cloudsql`、`sftp`、`ftp`(大多数通过可选的延迟导入驱动程序支持) |
| VPC 桥接 | ✅ 完成 | `network_mode='bridge'` 通过 `BridgeBroker` 开启 WebSocket TCP 隧道,接入查询路径 (`resolve_network_async`);其他模式返回 501 |
| 构建器层 (M13–M22) | ✅ 完成 | 查询工作区 + 类型化参数,过滤器/变量/路由参数交互,TanStack 表格 + 条件格式,9 种图表类型,导出,计划报告,AI-SQL,智能体聊天,git 同步 |
| 统一的编辑器界面 | ✅ 完成 | EditorShell:Dashboard / Report / Presentation 界面切换;DocCanvas(A4/Letter 分页文档)+ SlideCanvas(16:9 幻灯片 + 演示模式);`spec.surfaces.{grid,report,slides}` schema 拆分已上线 |
| 语义层 (Bet 1) | ✅ 完成 | `MetricDefinition` + `MetricQuery` 受治理编译器;派生/比率度量(带 NULLIF 保护);完整的时间智能套件(通过 QUALIFY 实现 prior_period/pop/yoy/ytd/qtd/mtd/rolling_sum/rolling_avg/latest_snapshot);带有 Other 桶的动态 top-N;percentile_cont;approx_count_distinct |
| 智能引擎 (Bet 2) | ✅ 完成 | `build_rollup_for_metric`(指标驱动的预聚合);感知 `__base` 的汇总路由器支持派生 + 窗口查询;单看板的 `DataProvider` 查询融合 + 共享 `(model, predicate, rls_hash)` 缓存键 |
| Flows 数据应用引擎 (Axis B) | ✅ 完成 | 单元格级 `cpu_cores / mem_mb / timeout_s`;带运行级种子的随机单元格;类型化 artifact 通道(pickle/joblib/bytes/json);场景扫描 + 回填;事件/webhook/下游触发器 + 运行历史 + SLA;受治理的回写(幂等、dry-run、RBAC、审批门控) |
| Canvas (Axis C) | ✅ 完成 | `canvases` 资源;`CanvasDoc` 模型;`validate_canvas_doc`;`/c/:id` 公共查看器;代码+可视化编辑器 + 右侧绑定检查器;三种绑定类型(query/metric/api);LLM 生成/编辑/修复循环;通过 `report_send` 定时发送 |
| M10 — Docker 自托管冒烟测试 | 🔄 进行中 | docker-compose.yml 本地可用(db + 组合应用在 :8000 上);针对实时基础设施的 CI 冒烟测试是剩余的压轴工作 |
| M11 — 计划任务 | ✅ 完成 | cron + 间隔调度器(确定性 `now`),`execute_job`,CRUD + run-now + 运行历史路由 |
| M12 — 能力门控 RLS | ✅ 完成 | 通过 `datastore.config.type` 解析连接器,当 `predicate_rls=False` + 活动策略时触发 501 门控 |
**测试:** 约 180 个后端测试模块(包括 security/ 套件)+ 一致性套件(golden Arrow 输出 + 字节一致的缓存键)、MCP 测试、CLI 测试、仪表盘清理器(`node --test`)、SDK 测试。
**实验性/尚未经过生产环境验证:** `LocalSubprocessRunner`(开发级隔离 —— 同一 OS 用户,宿主网络);Docker Compose 堆栈尚未针对实时外部基础设施(Neon SSL, E2B, 真实的 Google OAuth)进行过冒烟测试。
## 🔌 嵌入式快速开始
```
```
CSS 自定义属性控制主题:`--nubi-bg`、`--nubi-fg`、`--nubi-accent`、`--nubi-border`。
完整的嵌入集成步骤
**1. 在 `app/auth/issuers.py` 中注册您的签发者**:
```
{
"iss": "https://your-app.example.com",
"jwks_uri": "https://your-app.example.com/.well-known/jwks.json",
"aud": "nubi:your-project-id",
"allowed_origins": ["https://your-app.example.com"],
}
```
**2. 从您的后端签发短期 JWT**(≤15 分钟,RS256 或 ES256):
```
// Reference: embed/getToken.reference.js
async function getToken() {
const { token } = await fetch('/your-api/nubi-token').then(r => r.json())
return token // signed JWT from your backend
}
window.getToken = getToken
```
必需的 JWT claim:`iss`、`sub`、`aud`、`org`、`project`、`roles[]`、`scope[]`(必须包含 `"read:*"` 或更窄的范围)、`policies`(RLS 列值对)、`embed_origin`、`exp`(≤ now + 900)、`iat`。
**3. 组件会处理其余所有事情** —— JWKS 验证、RLS 强制执行、Arrow IPC 获取、WebGL 渲染。
## 🧪 运行测试
```
# Backend — 内存 repo + DuckDB fixtures;无需实时 DB
cd backend && pytest
# MCP server 测试
cd mcp && pytest tests/
# Dashboard 清理器(Node 内置 runner)
npm run test:dash
# JS SDK 测试
cd sdk && node --test src/index.test.mjs
# CLI 测试
cd cli && pytest tests/
```
后端一致性套件(`backend/tests/conformance/`)断言规划器生成标准的 Arrow 输出和字节一致的缓存键。未来的 Rust executor 必须通过相同的套件才能实现互换。
## 📦 SDK 与工具
| 包 | 路径 | 描述 |
|---|---|---|
| `@nubi/sdk` | [`sdk/`](sdk/README.md) | 框架无关的 ESM —— `.auth`, `.query()`, `.resources.*`, `.embed.mount()` |
| `nubi` CLI | [`cli/`](cli/README.md) | `login / deploy / run / diff / pull` —— 支持 `--dry-run` |
| MCP 服务端 | [`mcp/`](mcp/README.md) | stdio MCP —— 15 个用于 Agent 仪表盘编写的工具 |
| 嵌入包 | [`embed/`](embed/README.md) | `` + 小部件套件自定义元素 |
## 📖 文档
完整文档位于 [`docs/`](docs/index.md) —— **请从 [文档索引](docs/index.md)** 开始阅读。重点内容:
**使用 Nubi**
- [入门指南](docs/getting-started.md) · [UI 导览](docs/ui-tour.md)
- [连接器](docs/connectors.md) · [查询与参数](docs/queries-and-params.md) · [预聚合](docs/pre-aggregations.md)
- [仪表盘](docs/dashboards.md) · [仪表盘规范参考](docs/dashboard-spec-reference.md) · [导出与定时报告](docs/exports-and-jobs.md)
- [Flows](docs/flows.md) · [Notebooks](docs/notebooks.md) · [AI、聊天与 MCP](docs/ai-and-mcp.md)
- [嵌入](docs/embedding.md) · [组织与设置](docs/organization-settings.md)
- [语义层、数据应用与闭环](docs/semantic-and-data-apps.md) —— 指标、Flows 数据应用引擎、Canvas、回写、完整循环
- [指标参考](docs/metrics-reference.md) —— 用于查询受治理指标的 Agent/MCP 参考
**平台与安全**
- [架构与经济学](docs/architecture-and-economics.md) —— 计算模型、嵌入模式、账单 COGS 映射
- [自托管](docs/self-host.md) · [Open Core](docs/open-core.md) · [Open-core 架构](docs/architecture-open-core.md)
- [内核安全](docs/kernel-security.md) · [连接器安全](docs/connector-security.md) · [密钥管理](docs/secrets.md)
- [缓存键规范](docs/cache-key-spec.md) · [一致性](docs/conformance.md) · [桥接](docs/bridges.md) · [Lakehouse](docs/lakehouse.md)
**构建与贡献**
- [SDK 与 CLI](docs/sdk-and-cli.md) · [Files-as-code](docs/files-as-code.md) · [Git 同步](docs/git-sync.md)
- [开发 Nubi](docs/development.md) · [文档与截图](docs/docs-and-screenshots.md)
- [`ROADMAP.md`](ROADMAP.md) —— 产品战略、对比 Hex/Cube 的定位、里程碑顺序、Rust→WASM 拆分计划
## License
[Apache License 2.0](LICENSE) —— 请参阅 `LICENSE` 文件。标签:AV绕过, DuckDB-WASM, FastAPI, LLM, React, Syscalls, Unmanaged PE, 商业智能, 嵌入式分析, 测试用例, 请求拦截, 逆向工具