Machine-readable descriptor placed at the root of a TurboDL plugin repository.
| 字段 | 类型 | 说明 | |
|---|---|---|---|
| manifestVersion | string | 必填 | Manifest schema version. 1.0 |
| id | string | 必填 | Must equal the plugin's Plugin.id. Lowercase, dot-separated <category>.<name>. pattern: ^[a-z0-9]+(\.[a-z0-9][a-z0-9-]*)+$ |
| name | string | 必填 | |
| description | string | ||
| version | string | 必填 | Plugin release version (semantic). pattern: ^\d+\.\d+\.\d+([-+].*)?$ |
| author | string | ||
| homepage | string | ||
| license | string | ||
| category | string | 必填 | Which shelf the plugin sits on. turbodl-protocol is for a plugin that declares the protocols/schemes it handles (the `protocols` field; it may also implement a DownloadBackend); turbodl-backend is for a plugin whose identity is implementing a backend; turbodl-loader is for a plugin that loads plugins written in another language. turbodl-backendturbodl-protocolturbodl-adapterturbodl-parserturbodl-hookturbodl-loader |
| capabilities | array | Capability ids this plugin provides, in namespaced form <namespace>.cap.<name> (the TurboDL project's own namespace is dev.turbodl.cap.*, e.g. dev.turbodl.cap.hls). The namespace keeps two vendors' same-named capabilities from colliding. A capability is a market/diagnostics label only: it grants NO permission and changes no behavior. Legacy bare strings such as turbodl-hls (or turbodl-parser) do NOT match and are rejected; capability GitHub topics keep the turbodl-* spelling (see MARKET.md). | |
| protocols | array | Protocols/schemes this plugin declares it can handle, e.g. ["hls"], ["magnet","bt","ed2k"], ["ftp","sftp","webdavs"]. One plugin MAY declare several: the ecosystem model is one plugin for many protocols, not one plugin per protocol. The host builds a load-time scheme -> plugin index from these declarations (host.protocols), used for discovery, market filtering, diagnostics and conflict reporting. A declaration grants NO permission and does not by itself route downloads: a DownloadBackend (see extensionPoints) still decides what handles a request. Names are lowercase URL-scheme-like tokens; note a content type is not a URL scheme (an .m3u8 URL's scheme is http(s)), so declare the name the market should know the plugin by. | |
| turbodl | object | 必填 | |
| entry | object | 必填 | |
| artifact | object | ||
| extensionPoints | array | Extension-point ids this plugin registers, e.g. turbo.downloadBackend. | |
| services | array | Service ids this plugin publishes. |
一份最小清单
turbodl-plugin.json
{
"manifestVersion": "1.0",
"id": "parser.example",
"name": "Example parser",
"description": "Turns example:// links into download requests.",
"version": "0.1.0",
"author": "you",
"homepage": "https://github.com/you/turbodl-plugin-example",
"license": "MIT",
"category": "turbodl-parser",
"capabilities": [
"dev.turbodl.cap.parser"
],
"protocols": [
"example"
],
"turbodl": {
"apiMajor": 1,
"requiredApiVersion": "1.0.0"
},
"entry": {
"language": "kotlin",
"pluginClass": "com.example.ExamplePlugin"
},
"extensionPoints": [
"turbo.linkParser"
]
}Schema 原文下载:https://turbodl.dev/schemas/turbodl-plugin.schema.json