Composable desktop application foundations for MoonBit.
Dependencies
git clone https://github.com/Nanaloveyuki/orbit.git
cd orbit
moon update
moon run orbit-examplemoon run --target native orbit-build orbit-example/orbit.conf.json orbit-example/generated_page.mbt
moon run orbit-example| 平台 | 开发依赖 | 当前状态 |
|---|---|---|
| Windows x64 | MSVC/Windows SDK;首次 native build 会自动下载并校验 WebView2 SDK | 主要开发平台,CI 与安装包流程已验证 |
| Linux x64 | C 编译器、GTK3、WebKitGTK 4.1 开发包 | Ubuntu/Fedora/Arch 构建与打包流程已验证 |
| macOS | - | Orbit 顶层窗口宿主尚未实现 |
| Android/OpenHarmony | - | 相关底层库有独立探索,当前不是 Orbit 应用目标平台 |
sudo apt-get install libgtk-3-dev libwebkit2gtk-4.1-devnpx @nanaloveyuki/orbit-cli@alpha init my-orbit-app \
--name "My Orbit App" \
--identifier com.example.my-orbit-app \
--module example/my-orbit-app
cd my-orbit-app
moon update
npm install
npm run orbit:runmoon add Nanaloveyuki/orbit@0.1.0-alpha.6
npm install --save-dev @nanaloveyuki/orbit-cli@alpha
npx orbit generate
npx orbit runlet registry = @ipc.CommandRegistry::new()
registry.register_json(@ipc.CommandName::new("example.ping"), _payload => {
Ok({ "message": "IPC round trip completed." })
})const response = await window.__ORBIT__.invoke("example.ping", { value: 1 }, {
timeout: 5000,
});let file_extension = @desktop_file.DesktopFileExtension::new()
let options = @core.DesktopOptions::new(
windows~,
ipc_registry=Some(registry),
ipc_policy=Some(policy),
extensions=[file_extension.as_extension()],
)let options = @core.DesktopOptions::new(
windows~,
close_request_handler=Some((_label, _controller) => {
@core.DesktopCloseAction::suspend()
}),
runtime_suspend_handler=Some(label => {
// Persist application-owned state previously received through IPC.
save_window_state(label)
}),
){
"identifier": "main-file-dialogs",
"effect": "allow",
"principals": [{ "kind": "window", "identifier": "main" }],
"scopes": [],
"commands": ["orbit.dialog.open", "orbit.dialog.save"]
}const selected = await window.__ORBIT__.invoke("orbit.dialog.open", {
title: "Open document",
filters: [{ name: "Text", extensions: ["txt", "md"] }]
});
if (!selected.cancelled) console.log(selected.files);{
"build": {
"vite": {
"dev_command": "npm run dev",
"dev_url": "http://127.0.0.1:5173",
"build_command": "npm run build",
"dist_dir": "dist"
}
}
}npx orbit dev
npx orbit buildnpx orbit init --help
npx orbit diagnose --json
npx orbit bindings
npx orbit icon --source assets/icon-1024.png --out-dir icons
npx orbit package --release --out-dir dist
npx orbit verify-package --package-dir dist| 项目 | 职责 |
|---|---|
| Orbit on Mooncakes | 框架、构建器、运行时适配和 IPC 包 |
| Orbit CLI on npm | 生成、开发、构建、图标和分发命令 |
| Orby | 原生窗口与宿主事件循环 |
| MoonView | 系统 WebView 嵌入层 |
| orbit-plugin-abi | 稳定的 C 插件 ABI 与异步 executor |
| Ajni | 通用 JNI 与 Android JNI 基础设施 |
| sync | 原生线程同步原语 |
| dynlib | 动态库加载 |
| image | 图标解码、缩放和多格式输出 |
| Parsec | 严格 JSON 解析等解析基础设施 |
| moonbitlang/async | 官方结构化异步运行时 |
Composable desktop application foundations for MoonBit.
Dependencies