Skip to content

plugin.json manifest

plugin.json is a plugin’s single source of truth, shared by both the frontend and backend scanners.

FieldRequiredNotes
idyesPlugin id, globally unique, kebab-case, must equal the directory name
nameyesPlugin group display name (sidebar group title)
descriptionnoPlugin description
groupnoExplicit group name; otherwise grouped by order
ordernoSort weight, default 100; group order uses the smallest order
keywordsnoKeyword array for global search
legacyMigrationsnoOld global version → new local version migration bridge

A plugin may declare multiple tools, each with independent navigation, toggle and settings tab:

FieldRequiredNotes
idyesTool id, globally unique, route /tool/:id
nameyesTool display name
descriptionnoOne-line description
iconyeslucide icon name (e.g. Rocket, Table)
entryyesPage entry, relative to the plugin directory and including the frontend/ prefix, e.g. frontend/views/Tool.vue
keepAlivenoDefault true; set false to drop the cache and reset on return

Declare the settings panel entry:

{
"settings": {
"entry": "frontend/settings/Settings.vue"
}
}
{
"id": "hello-world",
"name": "Example Plugin",
"description": "Demonstrates the full plugin chain: Rust commands, SQLite, logging, HTTP, layout",
"group": "Examples",
"keywords": ["demo", "example"],
"order": 1,
"legacyMigrations": { "1": 1, "2": 2 },
"tools": [
{
"id": "hello-world",
"name": "Example Tool",
"description": "Rust command calls, logging and SQLite notes",
"icon": "Rocket",
"entry": "frontend/views/Tool.vue",
"keepAlive": true
}
],
"settings": { "entry": "frontend/settings/Settings.vue" }
}