Files
wanderer/plugins/schema/plugin.schema.json
slothful-vassal 3b8f00fd26 feat: Refine trail category model (#1059)
* feat: advanced trail categories

* rename remote_category

* fix merge issues

* subcategories for plugins mapping

* fix refresh

* remove vertical trail filter category scrolling

* cleanup

* add confirm modal for disabling a category

* Fix federation issues

* fix review findings

* redesign category settings page

* remove prio badge

* fix subcategory badge layout

* optimize subcategory settings layout

* further settings page layout optimization

* fix subcategory icon position

* fix

* update docs

---------

Co-authored-by: Christian Beutel <>
2026-06-29 03:16:26 +02:00

504 lines
11 KiB
JSON

{
"$schema": "https://json-schema.org/draft-07/schema#",
"$id": "https://open-wanderer.github.io/wanderer/schemas/plugin.schema.json",
"title": "wanderer plugin manifest",
"description": "Schema for wanderer plugin.json manifests.",
"type": "object",
"additionalProperties": false,
"required": [
"manifestVersion",
"id",
"type",
"name",
"version",
"runtime",
"capabilities"
],
"properties": {
"$schema": {
"type": "string",
"description": "Optional editor schema reference."
},
"manifestVersion": {
"type": "string",
"const": "1.0"
},
"id": {
"type": "string",
"pattern": "^[a-z0-9][a-z0-9_-]*$"
},
"type": {
"type": "string",
"enum": ["trails"]
},
"name": {
"type": "string",
"minLength": 1
},
"description": {
"type": "string"
},
"version": {
"type": "string",
"minLength": 1
},
"runtime": {
"$ref": "#/definitions/runtime"
},
"capabilities": {
"type": "array",
"minItems": 1,
"items": {
"$ref": "#/definitions/capability"
}
},
"auth": {
"$ref": "#/definitions/auth"
},
"permissions": {
"$ref": "#/definitions/permissions"
},
"configSchema": {
"type": "array",
"items": {
"$ref": "#/definitions/configField"
}
},
"hostConfig": {
"$ref": "#/definitions/hostConfig"
},
"metadata": {
"$ref": "#/definitions/metadata"
}
},
"definitions": {
"runtime": {
"type": "object",
"additionalProperties": false,
"required": ["type", "entrypoint"],
"properties": {
"type": {
"type": "string",
"const": "wasm"
},
"entrypoint": {
"type": "string",
"minLength": 1
}
}
},
"capability": {
"type": "object",
"additionalProperties": false,
"required": ["name", "version", "export"],
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"version": {
"type": "string",
"minLength": 1
},
"export": {
"type": "string",
"minLength": 1
},
"requiredHostFunctions": {
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"uniqueItems": true
},
"job": {
"type": "string",
"minLength": 1
}
}
},
"auth": {
"type": "object",
"additionalProperties": false,
"properties": {
"contexts": {
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/authContext"
}
}
}
},
"authContext": {
"type": "object",
"additionalProperties": false,
"required": ["type"],
"properties": {
"type": {
"type": "string",
"enum": ["oauth2", "api_key", "bearer", "session"]
},
"fields": {
"$ref": "#/definitions/stringList"
},
"authorizationUrl": {
"type": "string",
"format": "uri"
},
"tokenUrl": {
"type": "string",
"format": "uri"
},
"scopes": {
"$ref": "#/definitions/stringList"
},
"scopeSeparator": {
"type": "string"
},
"pkce": {
"type": "boolean"
},
"tokenRequestFormat": {
"type": "string",
"enum": ["json", "form"]
},
"tokenAuth": {
"type": "string",
"enum": ["client_secret_post", "client_secret_basic"]
},
"authorizationParams": {
"$ref": "#/definitions/stringMap"
},
"refresh": {
"$ref": "#/definitions/authRefresh"
},
"placement": {
"type": "string",
"enum": ["query"]
},
"name": {
"type": "string",
"minLength": 1
},
"secretField": {
"type": "string",
"minLength": 1
},
"secretFields": {
"$ref": "#/definitions/stringList"
}
}
},
"authRefresh": {
"type": "object",
"additionalProperties": false,
"required": ["mode"],
"properties": {
"mode": {
"type": "string",
"enum": ["host", "plugin"]
},
"grantType": {
"type": "string",
"minLength": 1
},
"function": {
"type": "string",
"minLength": 1
}
}
},
"permissions": {
"type": "object",
"additionalProperties": false,
"properties": {
"network": {
"$ref": "#/definitions/networkPermissions"
},
"auth": {
"$ref": "#/definitions/stringList"
},
"downloads": {
"$ref": "#/definitions/transferPermissions"
},
"uploads": {
"$ref": "#/definitions/transferPermissions"
}
}
},
"networkPermissions": {
"type": "object",
"additionalProperties": false,
"properties": {
"connectors": {
"type": "array",
"items": {
"$ref": "#/definitions/connector"
}
},
"redirects": {
"$ref": "#/definitions/redirects"
}
}
},
"connector": {
"type": "object",
"additionalProperties": false,
"required": ["name", "type"],
"properties": {
"name": {
"type": "string",
"minLength": 1
},
"type": {
"type": "string",
"enum": ["public_api", "configured"]
},
"fixedBaseURL": {
"type": "string",
"format": "uri"
},
"configKey": {
"type": "string",
"minLength": 1
},
"allowedPathPrefixes": {
"$ref": "#/definitions/stringList"
},
"auth": {
"$ref": "#/definitions/stringList"
},
"supportsMediaAuth": {
"type": "boolean"
},
"supportsStorageRedirects": {
"type": "boolean"
},
"supportsCustomTLS": {
"type": "boolean"
}
},
"allOf": [
{
"if": {
"properties": { "type": { "const": "public_api" } }
},
"then": {
"required": ["fixedBaseURL"],
"not": { "required": ["configKey"] }
}
},
{
"if": {
"properties": { "type": { "const": "configured" } }
},
"then": {
"required": ["configKey"],
"not": { "required": ["fixedBaseURL"] }
}
}
]
},
"redirects": {
"type": "object",
"additionalProperties": false,
"properties": {
"mode": {
"type": "string",
"enum": ["declared_hosts_only"]
},
"hosts": {
"$ref": "#/definitions/stringList"
}
}
},
"transferPermissions": {
"type": "object",
"additionalProperties": false,
"properties": {
"maxBytes": {
"type": "integer",
"minimum": 0
},
"contentTypes": {
"$ref": "#/definitions/stringList"
}
}
},
"configField": {
"type": "object",
"additionalProperties": false,
"required": ["key", "type"],
"properties": {
"key": {
"type": "string",
"minLength": 1
},
"type": {
"type": "string",
"enum": ["boolean", "date", "select", "text", "url"]
},
"label": {
"type": "string"
},
"labels": {
"$ref": "#/definitions/stringMap"
},
"description": {
"type": "string"
},
"descriptions": {
"$ref": "#/definitions/stringMap"
},
"options": {
"type": "array",
"items": {
"$ref": "#/definitions/configFieldOption"
}
},
"default": {},
"required": {
"type": "boolean"
},
"hidden": {
"type": "boolean"
}
}
},
"configFieldOption": {
"type": "object",
"additionalProperties": false,
"required": ["value"],
"properties": {
"value": {
"type": "string"
},
"label": {
"type": "string"
},
"labels": {
"$ref": "#/definitions/stringMap"
}
}
},
"hostConfig": {
"type": "object",
"additionalProperties": true,
"properties": {
"planned": {
"type": "boolean"
},
"completed": {
"type": "boolean"
},
"privacy": {
"type": "string",
"enum": ["original", "settings"]
},
"merge": {
"type": "object",
"additionalProperties": true,
"properties": {
"available": {
"type": "boolean"
},
"enabled": {
"type": "boolean"
}
}
},
"createSummitLogForCompleted": {
"type": "boolean"
},
"categoryMapping": {
"type": "object",
"additionalProperties": {
"oneOf": [
{
"type": "string"
},
{
"$ref": "#/definitions/categoryMappingTarget"
}
]
}
},
"connectors": {
"type": "object",
"additionalProperties": {
"type": "object"
}
}
}
},
"metadata": {
"type": "object",
"additionalProperties": true,
"properties": {
"displayName": {
"type": "string"
},
"displayNames": {
"$ref": "#/definitions/stringMap"
},
"descriptions": {
"$ref": "#/definitions/stringMap"
},
"providerCategories": {
"type": "object",
"additionalProperties": {
"$ref": "#/definitions/providerCategoryMetadata"
}
},
"icons": {
"type": "object",
"additionalProperties": true,
"properties": {
"light": {
"type": "string"
},
"dark": {
"type": "string"
}
}
}
}
},
"stringList": {
"type": "array",
"items": {
"type": "string"
},
"uniqueItems": true
},
"stringMap": {
"type": "object",
"additionalProperties": {
"type": "string"
}
},
"providerCategoryMetadata": {
"type": "object",
"additionalProperties": true,
"properties": {
"labels": {
"$ref": "#/definitions/stringMap"
}
}
},
"categoryMappingTarget": {
"type": "object",
"additionalProperties": false,
"properties": {
"category": {
"type": "string"
},
"subcategory": {
"type": "string"
}
}
}
}
}