Skip to main content

Manifest Reference

Every Voiden plugin requires a manifest.json file. This file tells Voiden about your plugin — its identity, capabilities, and dependencies. It's how the extension system discovers and manages your plugin.


Required Fields

These fields must be present in every manifest:

FieldTypeDescription
idstringUnique identifier for your plugin. Use lowercase with hyphens (e.g., my-plugin).
namestringHuman-readable display name.
descriptionstringShort description of what the plugin does.
versionstringSemantic version string (e.g., 1.0.0).
authorstringAuthor name or organization.
enabledbooleanWhether the plugin is enabled by default. Usually true.
readmestringLonger documentation text shown in the extension manager.

Minimal Example

{
"id": "my-plugin",
"name": "My Plugin",
"description": "A simple Voiden plugin",
"version": "1.0.0",
"author": "Your Name",
"enabled": true,
"readme": "This plugin adds useful features to Voiden."
}

Optional Fields

FieldTypeDefaultDescription
type"core" | "community"Plugin type. Use "community" for your plugins.
prioritynumber999Load order. Lower numbers load first. Use a higher number (e.g., 50) unless other plugins depend on yours.
repostringRepository URL (GitHub). Used for installation and updates.
capabilitiesobjectDeclares what your plugin provides (blocks, commands, etc.).
dependenciesobjectVersion constraints for core and SDK compatibility.
featuresstring[]List of features provided, shown in the extension manager.

Priority

Priority determines the order in which plugins load. Lower numbers load first.

RangeIntended Use
1–10Foundational plugins that others depend on
11–20Core feature plugins
21–30Enhancement plugins
31–50Utility and integration plugins
50+Import tools, cosmetic plugins

If your plugin depends on another plugin's helpers (via ctx.helpers.from()), make sure your priority is higher (loads later) than the plugin you depend on.

Example: voiden-graphql (priority 15) depends on voiden-rest-api (priority 10), so REST loads first.


Capabilities

The capabilities object declares what features your plugin provides. This is primarily for documentation and the extension manager UI — Voiden doesn't enforce these declarations at runtime.

blocks

Declares custom editor block types your plugin owns.

{
"capabilities": {
"blocks": {
"owns": ["my-block", "my-output"],
"allowExtensions": true,
"description": "Custom widget blocks"
}
}
}
FieldTypeDescription
ownsstring[]Block type names this plugin owns
allowExtensionsbooleanWhether other plugins can extend these blocks
descriptionstringDescription of the block capability

slashCommands

Declares slash commands the plugin registers.

{
"capabilities": {
"slashCommands": {
"groups": [
{
"name": "My Commands",
"commands": ["Insert widget", "Insert output"]
}
]
}
}
}

requestPipeline

Declares pipeline hooks the plugin registers.

{
"capabilities": {
"requestPipeline": {
"buildHandler": true,
"responseHandler": true,
"description": "Modifies requests and processes responses"
}
}
}

editorActions

Declares editor toolbar actions.

{
"capabilities": {
"editorActions": {
"actions": [
{
"id": "my-action",
"name": "Preview",
"description": "Opens a preview panel",
"icon": "Eye",
"fileTypes": [".json", ".yaml"]
}
]
}
}
}

ui

Declares UI elements like sidebar buttons or panels.

{
"capabilities": {
"ui": {
"buttons": [
{
"id": "my-panel-btn",
"location": "sidebar-left",
"icon": "Globe",
"tooltip": "Open My Panel"
}
]
}
}
}

paste

Declares paste handling capabilities.

{
"capabilities": {
"paste": {
"patterns": [
{
"name": "cURL",
"pattern": "/^curl\\s+/i",
"handles": "cURL command parsing"
}
],
"blockHandlers": ["my-block"]
}
}
}

pipeline

Declares which pipeline stages the plugin hooks into.

{
"capabilities": {
"pipeline": {
"hooks": ["pre-send", "post-processing"]
}
}
}

editor

Declares editor enhancements.

{
"capabilities": {
"editor": {
"autocomplete": true,
"suggestions": true
}
}
}

Dependencies

Declare version compatibility with Voiden core and the SDK:

{
"dependencies": {
"core": "^1.0.0",
"sdk": "^1.0.0"
}
}

Features

A list of human-readable feature descriptions shown in the extension manager:

{
"features": [
"Custom widget block for data visualization",
"Slash command for quick widget insertion",
"Response panel integration",
"Autocomplete support"
]
}

Full Example

Here's a complete manifest combining all fields:

{
"id": "voiden-data-viz",
"type": "community",
"name": "Voiden Data Visualizer",
"description": "Visualize API response data with interactive charts and tables",
"version": "1.0.0",
"author": "Your Name",
"enabled": true,
"priority": 30,
"readme": "Data Visualizer adds interactive charts and table views to your API responses. Insert a visualization block with /chart, then send a request to see your data come alive.",
"repo": "https://github.com/yourname/voiden-data-viz",

"capabilities": {
"blocks": {
"owns": ["chart-block", "data-table"],
"allowExtensions": true,
"description": "Chart and table visualization blocks"
},
"slashCommands": {
"groups": [
{
"name": "Data Visualization",
"commands": ["Insert chart", "Insert data table"]
}
]
},
"requestPipeline": {
"responseHandler": true,
"description": "Processes response data for visualization"
}
},

"dependencies": {
"core": "^1.0.0",
"sdk": "^1.0.0"
},

"features": [
"Interactive chart visualization for JSON responses",
"Tabular data view with sorting and filtering",
"Auto-detect chartable data in responses",
"Multiple chart types: bar, line, pie, scatter"
]
}