26 个不稳定版本 (8 个破坏性更新)

0.9.0-rc.1 2024 年 8 月 15 日
0.8.0 2024 年 5 月 23 日
0.7.4 2024 年 3 月 24 日
0.7.0 2023 年 12 月 3 日
0.1.1 2022 年 11 月 18 日

47GUI

Download history 219/week @ 2024-05-02 710/week @ 2024-05-09 1231/week @ 2024-05-16 969/week @ 2024-05-23 368/week @ 2024-05-30 343/week @ 2024-06-06 284/week @ 2024-06-13 165/week @ 2024-06-20 235/week @ 2024-06-27 277/week @ 2024-07-04 345/week @ 2024-07-11 358/week @ 2024-07-18 386/week @ 2024-07-25 340/week @ 2024-08-01 736/week @ 2024-08-08 343/week @ 2024-08-15

1,890 每月下载量
4 个包 中使用

Apache-2.0

250KB
2K SLoC

Rust 1.5K SLoC // 0.1% comments TypeScript 338 SLoC // 0.1% comments Swift 36 SLoC // 0.2% comments Java 19 SLoC

Crux · GitHub 许可证 包版本 文档 构建状态

使用 Rust 开发跨平台应用

  • 共享核心功能 - Crux 帮助您在移动(iOS/Android)和网页上共享应用程序的业务逻辑和行为——作为使用 Rust 构建的单个可重用核心。
  • 轻量级 UI 外壳 - Crux 认为最好的体验是使用现代声明性框架(如 SwiftUIJetpack ComposeReact/Vue,或基于 WebAssembly 的框架(如 Yew))构建的——然而,它旨在尽可能保持这个 UI 层的轻量级,其他所有工作都由共享核心完成。
  • 类型生成 - 与核心的接口在所有语言中具有静态类型检查——为 Swift、Kotlin 和 TypeScript 生成类型和序列化代码。Rust 外壳可以直接导入核心。
  • 功能 - 功能表达了调用 API 等副作用(包括 UI)的意图。因为所有副作用(包括 UI)都由外壳执行,核心变得非常容易进行全面测试——测试套件在毫秒内运行(而不是分钟或小时)。

入门指南

了解如何在您的项目中使用 Crux.

查看 Github 项目仓库中的 README

阅读API 文档

观看最近在伦敦举办的Rust Nation 2023 会议上的入门演讲

您还可以加入我们Zulip频道上的友好讨论。

注意,Crux 是实验性的,目前正在积极开发中(可能还不适合在生产应用中使用)。然而,主分支应该始终运行良好,并且我们会在前进的过程中努力保持示例和文档的更新。我们认为 API 现在已经稳定,所以您可以试一试!:-)

架构概述

Logical architecture

基本架构概念是将纯计算任务与产生副作用的任务严格分离。这与 Elm 的工作方式类似。

无副作用的核心

在上面的图中,内部的“核心”在每个平台上编译并链接到外部的“壳”作为库

  • 在iOS上作为本地静态库
  • 在Android上作为使用Java Native Access的动态库
  • 在浏览器中作为WebAssembly模块

实际上,由于 WebAssembly (Wasm) 是编译目标之一,因此核心必须保持无副作用,这是由于 Wasm 运行时环境的沙箱特性。

因此,核心完全隔离且安全,因为它无法访问任何外部 API。它所能做的就是执行纯计算并保持内部状态。

遵循 Elm 架构,核心定义了应用程序中的关键组件类型

  • Event — 一个描述核心可以处理的事件的 enum
  • Model — 描述应用程序的内部状态
  • ViewModel — 表示应向用户显示的信息

前两个通过 Elm、Redux 或其他事件源架构中熟悉的 update 函数相互关联

fn update(
    &self,
    event: Event,
    model: &mut Model,
    capabilities: &Capabilities,
)

update 函数的职责是处理一个 Event,相应地更新模型,并可能使用功能请求一些副作用。

应用程序壳

封装的平台本地“壳”使用适合该平台的语言编写,并充当执行所有非纯任务的运行时环境。从核心的角度来看,壳是核心运行的平台。

依赖项

~2.6–4MB
~83K SLoC