插件注册表是中心化市场的去中心化继承者。发布者拥有自己的记录,任何人都可以运行使它们可被发现的索引——即聚合器。每个聚合器定义哪些标签方必须批准一个列表才能显示。当您将站点指向注册表时,管理面板将从注册表而非市场浏览和安装插件。
它构建在 AT Protocol 之上,即 Bluesky 背后的网络协议。
注册表与市场的对比
市场和注册表都允许管理员从管理面板浏览、安装、更新和移除沙盒插件。安装体验——能力授权确认、校验和验证、沙盒运行器——是相同的。它们的区别在于谁控制目录以及您信任谁。
| 市场 | 注册表 | |
|---|---|---|
| 控制权 | 由一家公司拥有和运营 | 没有中心所有者;任何人都可以运行聚合器 |
| 发现 | 由市场服务提供 | 由索引网络的聚合器提供 |
| 审核 | 运营方审查列表并可以移除它们 | 标签方批准确切的列表修订版本,并可以发出屏蔽或下架通知 |
| 信任对象 | 市场运营方 | 您指向的聚合器及其策略所要求的标签方 |
您为给定站点配置其中之一。当设置了 experimental.registry 时,管理面板的浏览和安装流程将使用注册表。
启用注册表
注册表需要 sandboxRunner,因为注册表插件始终在沙盒中运行。有关运行器设置,请参阅插件沙盒。
以下配置将站点指向参考聚合器:
import { defineConfig } from "astro/config";
import { sandbox } from "@emdash-cms/cloudflare";
import emdash from "emdash/astro";
export default defineConfig({
integrations: [
emdash({
sandboxRunner: sandbox(),
experimental: {
registry: "https://registry.emdashcms.com",
},
}),
],
});
裸 URL 字符串是简写形式。当您需要声明接受的标签方或设置发布时效策略时,请使用对象形式:
emdash({
sandboxRunner: sandbox(),
experimental: {
registry: {
aggregatorUrl: "https://registry.emdashcms.com",
acceptLabelers: "did:web:labels.emdashcms.com",
policy: {
minimumReleaseAge: "48h",
minimumReleaseAgeExclude: ["did:plc:yourfirstpartydid"],
},
},
},
})
在生产环境中聚合器 URL 必须是 HTTPS(开发环境允许 http://localhost)。
配置选项
acceptLabelers— 可选的逗号分隔裸标签方 DID 列表,作为经过验证的声明转发,并包含在客户端的缓存标识中。设置时,列表必须包含聚合器要求的每个来源。该声明不能更改聚合器的批准、屏蔽、下架或撤回策略。policy.minimumReleaseAge— 在选择要安装或更新到的版本时,暂缓新于此时效的发布版本,为下架通知在受损的发布版本到达您的站点之前争取更多时间窗口。接受持续时间字符串("24h"、"7d")或秒数。policy.minimumReleaseAgeExclude— 不受暂缓限制的 DID,用于您已明确接受其发布节奏的发布者(例如您自己的第一方插件)。每个条目是一个裸发布者 DID,或<did>/<slug>对以豁免单个包。只接受 DID,不接受 handle。
浏览和安装
- 打开管理面板并导航到 Plugins > Registry。
- 浏览或搜索。每个已批准的结果显示其列表名称、已批准的作者名称或稳定的发布者 DID,以及最新版本。
- 打开一个插件以查看其 README、截图、声明的访问权限和发布历史。
- 点击 Install 并查看能力授权确认对话框。
- 确认。
安装会验证下载的字节是否与发布校验和匹配,确认包的插件 ID 和版本与发布匹配,并确认其声明的能力与您批准的内容匹配。更新和卸载的工作方式与市场插件相同。
信任模型
注册表是去中心化的,因此信任是显式的。参考标签方仅评估管理面板中显示的发布者控制的元数据和媒体。它不会获取或评估插件归档文件、源代码、清单、依赖项、软件物料清单或来源证据。其批准绑定到配置文件或发布记录的确切内容标识符(CID)。
插件代码检查保持独立。在激活插件之前,EmDash 会独立验证制品字节是否哈希到已批准的发布校验和,包是否对应其声明的插件 ID 和版本,以及其能力是否与授权确认对话框匹配。