Manifest¶
Every plugin ships a manifest.json. The loader validates it and the Plugin Store surfaces several fields in its UI.
{
"id": "com.example.hello",
"name": "Hello RBrowser",
"version": "0.1.0",
"apiVersion": "1",
"minHostVersion": "0.1.0",
"entry": "index.js",
"permissions": ["state:read", "navigation:write", "highlight:write"],
"panel": { "position": "right", "title": "Hello", "defaultWidth": 280 },
"author": "Jane Doe",
"description": "Says hello to the selected transcript.",
"icon": "icon.png",
"homepage": "https://github.com/you/hello-rbrowser"
}
Fields¶
| Field | Required | Notes |
|---|---|---|
id |
yes | Stable unique id (reverse-DNS or kebab-case). |
name |
yes | Human-readable name. |
version |
yes | Plain semver. Used for upgrade-vs-downgrade detection. |
apiVersion |
yes | '1' — bumped on breaking SDK changes. The loader rejects unknown versions. |
minHostVersion |
yes | Lowest host semver this plugin works on. |
entry |
yes | Path / URL to the ESM bundle that default-exports a PluginModule. |
permissions |
yes | Array of Permission strings; shown to the user on install. |
panel |
yes | { position: 'left' \| 'middle' \| 'right', title?, defaultWidth? } |
author |
no | |
description |
no | One-line description shown in the store. |
icon |
no | Path inside the .rbp archive (typically icon.png). |
homepage |
no | URL to docs / source repo. |
Type¶
The full contract, from @rbrowser/plugin-sdk:
interface PluginManifest {
id: string
name: string
version: string
apiVersion: '1'
minHostVersion: string
entry: string
permissions: Permission[]
panel: {
position: 'left' | 'middle' | 'right'
title?: string
defaultWidth?: number
}
author?: string
description?: string
icon?: string
homepage?: string
}
Once the manifest is ready, see Packaging & CLI to build a .rbp.