Create a plugin
The recommended way is the interactive scaffold (it fills in the id / name / icon and any optional backend, settings or database parts):
pnpm create-pluginOr copy the template by hand:
cp -r plugins/_template plugins/my-toolsThen edit plugins/my-tools/plugin.json:
{ "id": "my-tools", "name": "My Tools", "tools": [ { "id": "my-tools-hello", "name": "Hello", "description": "My first tool", "icon": "Sparkles", "entry": "frontend/views/Tool.vue" } ]}Rewrite frontend/views/Tool.vue — done. Sidebar navigation, routing, titles, the enable/disable
toggle, the settings panel, the error boundary and KeepAlive all work automatically, with no manual
registration.
Reference implementations
Section titled “Reference implementations”These examples all live in the hello-world plugin (available until you delete it):
| Goal | File |
|---|---|
| Call Rust commands, read/write SQLite | frontend/views/Tool.vue (full Rust integration) |
| Table + pagination + dialog CRUD + import/export | frontend/views/TableTool.vue |
| Form controls and validation | frontend/views/FormTool.vue |
| Make an HTTP request and show the result | frontend/views/HttpTool.vue |
| Layout and the empty / loading / error states | frontend/views/TemplateTool.vue |
Next: review plugin.json fields, or write the frontend view.