cj-tauri 是一个开源在 AtomGit 上的类 Tauri 桌面应用混合开发框架,基于华为仓颉(Cangjie)语言实现。

它的核心理念是将前端 Web 界面技术与原生仓颉后端相结合,为开发者提供高效率、轻量化的跨平台桌面开发解决方案。

在这里插入图片描述

核心架构与工作原理

cj-tauri 借鉴了 Tauri 2 的架构设计思想,用仓颉语言完成了完整的后端逻辑与安全桥接实现:

后端逻辑:使用仓颉语言静态编译为原生二进制文件,无需依赖 Node.js 运行时或打包巨大的 Chromium。

前端渲染:基于操作系统自带的原生 WebView 宿主,各平台对位实现:
Windows:Microsoft Edge WebView2
Linux:WebKitGTK
HarmonyOS(鸿蒙 PC):ArkWeb

通信机制(IPC):通过原生的 postMessage 构建双向通信通道(window.CJ_TAURI.invoke 与 listen/emit)。

安全模型:采用权限白名单与 Capability 机制(基于 capabilities/*.json),默认遵循最小权限原则,未放行的命令前端无法调用。

最小代码示例:

// 1) 实现命令:handle 在 worker 线程上执行,返回的 JsonValue 回投给页面
public class GreetCommand <: CommandHandler {
    public func handle(cmd: String, args: JsonObject, ipc: IpcContext): JsonValue {
        return JsonString("Hello, ${argString(args, "name", "world")}!")
    }
}

main(): Int64 {
    // 2) 装配:建窗口 + 注册命令;capabilities/ 由 run() 自动扫描
    let app = TauriApp()
        .window(WindowConfig("hello", 1000, 700))
        .register("greet", GreetCommand())
    // 3) 启动:run() 自己不返回,窗口关闭后收尾
    app.run(HTML)
    return 0
}

前端调用:

// 桥在 document-start 注入,页面脚本执行时就已经存在;
// 应用侧仍建议等一次(模板里的 waitForBridge),免得构建形态不同步。
const cj = window.__CJ_TAURI__;

// 调后端命令:与 @tauri-apps/api 同形,返回 Promise
const msg = await cj.invoke("greet", { name: "仓颉" });

// 订阅后端事件(事件名同样要在能力清单的 events 里声明)
cj.listen("tick", e => {
  document.querySelector("#out").textContent = e.data;
});

// 插件自带前端命名空间,例如原生文件对话框:
const picked = await cj.dialog.open({ filter: "文本文件|*.txt|所有文件|*.*" });

主要亮点与优势

极轻量化与低资源占用:
交付产物通常为几 MB 到十几 MB 级别的单文件(相比于 Electron 动辄 100MB+ 的安装包和高内存开销,优势显著)。

语言特性与编译体验:
相比于 Rust(Tauri 原生语言),仓颉语言语法更为简洁易懂,编译速度更快、磁盘占用更小,方便安全审计与快速迭代。

支持鸿蒙与国产化技术栈:
适合原本就在仓颉/鸿蒙技术栈上的开发者,方便在桌面端与鸿蒙端共用相同的仓颉后端代码。

健全的工程脚手架与 AI 助手指引:
提供了 cj-tauri CLI,支持从脚手架创建(create)、开发(dev)、构建(build)到环境诊断(doctor)全流程。
沉淀了专门的 AtomCode AI Skills,支持环境自检、构建断言、实机日志取证与踩坑排障。

在这里插入图片描述

项目目录概览

my-cj-tauri-app/
├── cj-tauri.json             # cj-tauri 核心配置文件(应用元信息、窗口参数、构建选项等)
├── cjpm.toml                 # 仓颉包管理器配置文件(定义依赖项、包名及构建目标)
├── package.json              # 前端 npm/pnpm 依赖配置文件
├── capabilities/             # 安全权限与能力定义目录
│   └── default.json          # 默认权限白名单(定义前端允许调用的后端命令)
├── src-cj/                   # 仓颉后端代码目录
│   ├── main.cj               # 仓颉后端程序入口(注册命令、配置系统托盘/菜单、启动 Webview)
│   ├── config.cj             # 应用业务配置逻辑
│   └── commands/             # 开放给前端调用的 IPC 命令模块
│       ├── mod.cj            # 命令模块导出
│       └── system.cj         # 具体命令实现(如文件读取、原生通知、系统信息获取)
├── src/                      # 前端 UI 代码目录(可使用 React / Vue / Svelte / Vanilla)
│   ├── index.html            # 主界面 HTML 页面入口
│   ├── main.ts / main.js     # 前端逻辑入口
│   ├── App.vue / App.tsx     # 主组件
│   └── assets/               # 静态资源(图片、样式表等)
└── dist/                     # 前端打包产物目录(构建时自动注入给 Webview 渲染)

代表性示例项目

在官方仓库的 examples/ 目录中,包含了多个实用的靶机应用与示例:
cjnote:内置仓颉 AI 智能体(cjh)的 Markdown 笔记应用,支持流式对话、原生菜单托盘与单文件交付。

music:轻量级桌面音乐播放器,支持榜单拉取、歌词同步滚动与本地存储。
leetcode-gui:桌面版力扣客户端,整合了本地代码判题机、临时文件编译与试题离线管理。

串口示波器 / Modbus 工具:展示原生硬件接口与 Web 界面结合的工业/调试工具。

总结

如果你希望用 Web 技术编写界面,同时要求后端逻辑原生编译、无庞大依赖开销,或者希望在仓颉语言生态中快速构建跨平台桌面应用,cj-tauri 是一个非常值得尝试的轻量框架。

项目地址:https://atomgit.com/qq8864/cj-tauri

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐