Manifest schema
Every Sidebar Tab module ships a canopi-tab.json manifest. The host reads this file to register permissions, entry points, and lifecycle hooks.
Minimal example
json
{
"id": "archive-assistant",
"name": "Archive Assistant",
"version": "1.0.0",
"description": "Archive pages to external services",
"author": "Your Name",
"icons": {
"16": "icons/icon-16.png",
"48": "icons/icon-48.png",
"128": "icons/icon-128.png"
},
"entry": {
"main": "dist/index.js",
"styles": ["dist/styles.css"]
},
"permissions": {
"required": ["page:url", "network:fetch"],
"optional": ["archive:wayback"]
}
}Top-level fields
| Field | Required | Description |
|---|---|---|
id | yes | Unique module id (kebab-case) |
name | yes | Display name |
version | yes | Semver string |
description | yes | Short summary |
author | yes | Author or org name |
icons | yes | 16 / 48 / 128 px PNG paths |
entry.main | yes | Bundled JS entry |
entry.styles | no | CSS file paths |
permissions | no | Required and optional scopes |
Permission scopes
| Scope | Access |
|---|---|
page:url | Current page URL |
page:content | DOM / page content |
user:profile | Read user profile |
user:preferences | Read/write preferences |
storage:local | Tab-local storage |
storage:sync | Synced storage |
network:fetch | External HTTP via host proxy |
archive:wayback | Wayback Machine archiving |
archive:ipfs | IPFS archiving |
timeline:read / timeline:write | Timeline access |
diagnostics:read / diagnostics:write | Debug telemetry |
Declare scopes in permissions.required (blocked without grant) or permissions.optional (prompted on first use).
Configuration schema
Optional user settings:
json
{
"config": {
"settings": {
"defaultService": {
"type": "select",
"label": "Default archive service",
"default": "wayback",
"options": ["wayback", "archive.today"]
}
}
}
}Supported types: string, number, boolean, select, multiselect, json.
Lifecycle hooks
json
{
"lifecycle": {
"onInit": "handleInit",
"onActivate": "handleActivate",
"onDeactivate": "handleDeactivate",
"onDestroy": "handleDestroy"
}
}Validation
Machine-readable schema in the repo:
docs/schemas/canopi-tab-manifest-v1.schema.jsonExample manifest:
docs/examples/archive-assistant-manifest.json
