Curio 开发指南

让你的想法,
有一个自己的入口。

熟悉的前端技术,加上一条通往 macOS 底座的连接。

认识 Trove

Trove 是 macOS 上的 Host。Curio 是由 Host 安装、管理和运行的工具。UI 通过 Web Plugin SDK 发起调用,Host 负责身份、权限和消息路由。SDK 不要求使用特定的 UI 框架。

下面的流程适用于已经取得 Trove 开发版的作者。公开安装包尚未发布,发布状态见下载页

开始开发

  1. 启动 Trove,在「开发」页面检查并安装 CLI 命令。正式版使用 trove,开发版使用 trove-dev,可以并存。
  2. 在准备存放项目的父目录执行初始化命令。向导会始终创建一个新的项目文件夹,插件 ID 默认跟随你输入的名称。
  3. 选择 Web 或静态模板;Web 模板会询问包管理器,并可安装依赖。
trove curio init

# 进入刚刚创建的文件夹
cd my-curio
trove curio dev

如果使用的是 Trove 开发版,将上述 trove 替换为 trove-dev。Web 工程需要 Node.js 与所选包管理器;静态模板不需要前端构建步骤。

四个核心命令

命令负责什么
trove curio init交互式创建目录、清单与示例代码。
trove curio check检查项目配置、声明和开发所需依赖。
trove curio dev连接 Host,启动当前插件的开发会话。
trove curio pack构建并校验发布内容,生成 .curio 安装包。

在不同插件目录的终端分别运行 dev,即可同时开发多个插件。具体参数可通过 trove curio <命令> --help 查看。

连接 SDK

初始化模板已配置 @trove/plugin-sdk。导入客户端,等待连接就绪,再按“服务 ID、方法名、参数”发起调用:

import { trove } from "@trove/plugin-sdk"

await trove.ready()

const response = await trove.call(
  "host.runtime",
  "echo",
  { message: "Hello, Trove." },
  { timeoutMs: 5_000 },
)

console.log(response)

这个示例会收到 Host 原样返回的消息。直接在普通浏览器打开页面时,没有 Host 注入的桥接连接;请通过 trove curio dev 在 Trove 中运行。

调用能力

通过 Host 存储服务写入、读取并清理一段数据。示例使用独立 key,避免覆盖插件已有内容。

await trove.ready()
const storage = trove.service("host.storage")
const key = `demo.${crypto.randomUUID()}`

await storage.call("set", { key, value: "My idea" })
try {
  const result = await storage.call("get", { key })
  console.log(result)
} finally {
  await storage.call("delete", { key })
}

curio.json 中声明所需服务与能力。不要将临时授权或开发状态当作发布环境的默认条件;敏感系统能力还受 macOS 权限管理。

打包与分发

trove curio check
trove curio pack

pack 依据项目构建配置生成并验证产物,剥离开发配置,按文件清单打包。包含原生后端时,需要适用于目标平台的自包含可执行文件;Host 不捆绑 Node.js 或 Python 运行时。

软件源以 index.json 描述插件版本和平台产物,包含下载 URL、大小及 SHA-256。发布时先上传安装包,再发布索引,保证用户看到的版本可以下载。

了解 Curios
文档基于当前 v0.1.0 开发实现。命令参数以安装版本的 --help 为准。