Orbis:使用 Rust 和 React 构建插件驱动的桌面平台

发布: (2025年12月28日 GMT+8 11:40)
8 min read
原文: Dev.to

Source: Dev.to

现有插件系统的痛点

如果你曾为 VS Code、IntelliJ 或 Figma 等工具开发插件,你一定体会过以下痛苦:

  • 陌生的环境 – 每个平台都有自己的 API、怪癖和限制。
  • UI 开发困难 – 要么只能使用有限的 UI 基元,要么必须再学习另一套框架。
  • 安全性被忽视 – 大多数插件系统默认信任插件代码。
  • 状态管理成一团乱麻 – 在插件状态与宿主应用状态之间协调简直是噩梦。

我想要在不牺牲性能的前提下解决所有这些问题,所以答案是 Rust

激进想法:插件交付 JSON Schema,而非 React 代码

{
  "type": "Container",
  "children": [
    {
      "type": "Heading",
      "level": 1,
      "text": "Hello, {{state.username}}!"
    },
    {
      "type": "Button",
      "label": "Count: {{state.clicks}}",
      "events": {
        "onClick": [
          {
            "type": "updateState",
            "path": "clicks",
            "value": "{{state.clicks + 1}}"
          }
        ]
      }
    }
  ]
}

就是这样。 没有 JSX、没有打包工具、没有框架锁定。Orbis 核心解释此 schema,并使用 shadcn/ui 渲染可直接投入生产的 React 组件。

受控动作系统

因为插件不能交付任意 JavaScript,也就不能运行任意 JavaScript。所有交互都通过 受控动作系统 进行:

  • 想要发起 API 调用?使用 call_api 动作。
  • 想要导航?使用 navigate 动作。

核心会在执行前验证每个动作。

一致的、原生感 UI

所有插件都通过同一组件库渲染,消除突兀的 UI 不匹配(例如,一个插件使用 Material Design,另一个插件使用 Bootstrap)。

你不需要是前端开发者就能创建插件。
只要会写 JSON(或将来我们的自定义 DSL),就能构建 UI。

Source:

分层架构

┌─────────────────────────────────────────────────┐
│                 User Interface                  │
│              (Plugin Pages & UI)                │
├─────────────────────────────────────────────────┤
│              Frontend Layer                     │
│   Schema Renderer │ Zustand State │ Actions     │
├─────────────────────────────────────────────────┤
│               Backend Layer                     │
│   Tauri Commands │ Plugin Runtime │ Auth        │
├─────────────────────────────────────────────────┤
│              Plugin System                      │
│   WASM Sandbox │ Manifests │ UI Schemas        │
├─────────────────────────────────────────────────┤
│              Storage Layer                      │
│   SQLite │ PostgreSQL                           │
└─────────────────────────────────────────────────┘

前端

  • 使用 React 构建。
  • 使用 Zustand 进行状态管理。
  • 每个插件页面拥有独立的状态——不会产生全局状态污染。
// Simplified: each page gets its own isolated state store
const pageStore = createPageStateStore({
  username: "Guest",
  clicks: 0
});

后端

  • Rust,使用 Tauri 作为桌面包装器,使用 Axum 作为 HTTP 服务器。
  • 优势:
    • 原生性能——没有 Electron 的臃肿。
    • 内存安全——Rust 的保证同样适用于插件。
    • 跨平台——Windows、macOS、Linux 只需一套代码。

WASM 沙箱

插件编译为 WASM 并在 wasmtime 沙箱中运行,提供以下保障:

  • 未经授权无法访问文件系统。
  • 未经授权无法发起网络请求。
  • 插件崩溃不会影响宿主应用。
  • 内存空间相互隔离。

内置 UI 组件

开箱即用,Orbis 提供:

  • 布局组件
  • 表单组件
  • 展示组件
  • 交互组件

每个都映射到经过充分测试的 shadcn/ui 实现,为您免费提供可访问性、键盘导航和现代 UI 模式。

操作 – 插件如何与外部交互

{
  "type": "call_api",
  "api": "users.list",
  "method": "GET",
  "onSuccess": [
    {
      "type": "update_state",
      "path": "users",
      "value": "{{$response.body.data}}"
    }
  ]
}

可用操作

操作描述
update_state修改页面状态
call_api发起 HTTP 请求
navigate更改路由
show_toast显示 toast 通知
show_dialog / close_dialog处理模态框
validate_form / reset_form管理表单状态
conditionalif/else 逻辑
更多功能即将推出

存储选项

  • 单用户桌面应用 – 嵌入式 SQLite(零外部依赖)。
  • 多用户应用 – 连接到带有 PostgreSQL 后端的 Orbis 中央服务器,完整的身份验证、会话管理等。

安全 – 内置而非后加

  • Secure authentication – JWT 令牌,使用 Argon2 密码哈希。
  • Session management – 使用刷新令牌进行安全处理。
  • WASM sandboxing – 隔离的插件执行。
  • TLS support – 可选的 HTTPS,使用 rustls(不依赖 OpenSSL 或其他系统依赖)。

路线图

里程碑描述
插件市场一键发现并安装插件
插件间通信在插件之间进行安全消息传递
自定义 DSL相比 JSON 更简洁的页面定义语法
完全 GUI 覆盖允许插件完全替换默认 UI
自动更新利用 Tauri 内置的更新器实现无缝更新
更多功能正在开发中

更新

查看完整的即将推出功能路线图

克隆仓库

git clone https://github.com/cyberpath-HQ/orbis
cd orbis

安装前端依赖

cd orbis && bun install

在开发模式下运行

bun run tauri dev

您的第一个插件可以如此简单

{
  "name": "hello-world",
  "version": "0.1.0",
  "pages": [
    {
      "id": "main",
      "title": "Hello World",
      "route": "/hello",
      "state": {
        "message": { "type": "string", "default": "Hello, Orbis!" }
      },
      "layout": {
        "type": "Container",
        "children": [
          {
            "type": "Heading",
            "text": "{{state.message}}"
          }
        ]
      }
    }
  ]
}

为什么选择 Rust?

选择 Rust 并非随意。除了性能优势之外,Rust 的所有权模型还能确保:

  • 我们的插件运行时没有数据竞争
  • 可预测的内存使用
  • 插件执行时的无畏并发
  • 在编译时提供的保证,在其他地方可能会导致运行时错误

此外,Rust 在 WASM 领域的生态系统已经相当成熟:

  • Wasmtime – 经受实战考验的沙箱
  • Tauri – 轻量级桌面包装器
  • Axum – 高速异步 HTTP 服务器

Orbis 能提供的

Orbis 代表了一种面向可扩展桌面应用的新方法。通过将 what(JSON 架构)与 how(React 渲染)分离,我们创建了一个平台,使得:

  • 插件开发者专注于功能,而不是框架的怪癖
  • 用户获得一致、安全、美观的应用程序
  • 核心团队可以演进渲染层,而不会破坏插件

如果你正在构建需要扩展的桌面应用——无论是内部工具、开发者实用程序,还是完整的产品——不妨试试 Orbis。

资源

如果你觉得这很有趣,关注我以获取更多关于 Rust、安全和开发者工具的深度解析。如果你用 Orbis 构建了什么,我很想看到!

Back to Blog

相关文章

阅读更多 »