1. styles
1.1. bad
1.2. good
1.3. not as good
1.4. not as bad
1.5. important
1.6. warning
2. main
2.1. JSON Schema Example (for Validation)
2.1.1. example
2.1.1.1. { "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", "properties": { "nameTag": { "type": "string" }, "title": { "type": "string" }, "version": { "type": "string" }, "description": { "type": "string" }, "author": { "type": "object", "properties": { "name": { "type": "string" }, "email": { "type": "string" }, "website": { "type": "string" } }, "required": ["name"] }, "executableFile": { "type": "string" }, "iconURL": { "type": "string" }, "documentation": { "type": "object", "properties": { "readme": { "type": "string" }, "helpURL": { "type": "string" } } }, "inputs": { "type": "object", "patternProperties": { "^[a-zA-Z]+$": { "type": "object", "properties": { "type": { "type": "string" }, "min": { "type": "number" }, "max": { "type": "number" }, "default": {}, "required": { "type": "boolean" }, "description": { "type": "string" } }, "required": ["type", "description"] } } }, "outputs": { "type": "object", "patternProperties": { "^[a-zA-Z]+$": { "type": "object", "properties": { "type": { "type": "string" }, "description": { "type": "string" } }, "required": ["type", "description"] } } }, "errorCodes": { "type": "object", "patternProperties": { "^[A-Z_]+$": { "type": "object", "properties": { "code": { "type": "integer" }, "message": { "type": "string" }, "solution": { "type": "string" } }, "required": ["code", "message"] } } }, "dependencies": { "type": "object", "properties": { "python": { "type": "string" }, "requiredLibraries": { "type": "array", "items": { "type": "string" } } } } }, "required": ["nameTag", "title", "description", "executableFile", "inputs", "outputs"] }
2.1.2. why
2.1.2.1. 1. Standardized Structure
2.1.2.1.1. JSON Schema provides a clear, standardized way to define the structure of JSON documents (like your plugin metadata).
2.1.2.1.2. Consistency
2.1.2.1.3. Predictability
2.1.2.2. 2. Automatic Validation
2.1.2.2.1. JSON Schema enables automatic validation of your plugin metadata and input/output data.
2.1.2.2.2. Error Prevention
2.1.2.2.3. Clear Error Messages
2.1.2.2.4. Automatic Default Handling
2.1.2.3. 3. Interoperability
2.1.2.3.1. JSON Schema is widely supported and used across various programming languages and frameworks, making it easy to integrate with other tools and systems.
2.1.2.3.2. Language-Agnostic
2.1.2.3.3. Integration with APIs
2.1.2.4. 4. Extensibility
2.1.2.4.1. JSON Schema allows you to extend your validation rules easily, adding new fields or constraints over time as your plugin system grows.
2.1.2.4.2. Schema Evolution
2.1.2.4.3. Reusable Components
2.1.2.5. 5. Documentation
2.1.2.5.1. JSON Schema is not just for validation; it can also serve as documentation for your plugin system.
2.1.2.5.2. Self-Documenting
2.1.2.5.3. Tooling Support
2.1.2.6. 6. Dynamic Plugin Loading
2.1.2.6.1. With JSON Schema, you can validate plugin metadata at runtime, ensuring that plugins dynamically loaded into the system conform to the expected structure.
2.1.2.6.2. Safe Plugin Installation
2.1.2.6.3. Version Control
2.1.2.7. 7. Validation of Nested Structures
2.1.2.7.1. JSON Schema allows you to define and validate complex, nested structures.
2.1.2.7.2. Hierarchical Data Validation
2.1.2.7.3. Conditional Validation
2.1.2.8. 8. Tooling and Ecosystem Support
2.1.2.8.1. JSON Schema has a rich ecosystem with a variety of libraries and tools.
2.1.2.8.2. Libraries for Validation
2.1.2.8.3. Integration with IDEs
2.2. Metadata
2.2.1. example
2.2.1.1. { "nameTag": "sum_plugin", "title": "Sum Plugin", "version": "1.0.0", "description": "Calculates the sum of two numbers (a and b).", "author": { "name": "Your Name", "email": "[email protected]", "website": "https://example.com" }, "executableFile": "plugins/sum/plugin.py", "iconURL": "path/to/icon.png", "documentation": { "readme": "plugins/sum/README.mdx", "helpURL": "https://example.com/sum_plugin/help" }, "inputs": { "a": { "type": "number", "min": 0, "max": 100, "default": 0, "required": true, "description": "First number to add, must be between 0 and 100." }, "b": { "type": "number", "min": 0, "max": 100, "default": 0, "required": true, "description": "Second number to add, must be between 0 and 100." } }, "outputs": { "sum": { "type": "number", "description": "The sum of 'a' and 'b'." } }, "errorCodes": { "INVALID_INPUT": { "code": 1001, "message": "The provided input is invalid.", "solution": "Ensure that 'a' and 'b' are valid numbers and within the expected range." }, "MISSING_INPUT": { "code": 1002, "message": "Required input is missing.", "solution": "Ensure all required inputs are provided." } }, "dependencies": { "python": ">=3.8", "requiredLibraries": ["numpy", "scipy"] } }
2.2.2. structure
2.2.2.1. meta data
2.2.2.1.1. nameTag
2.2.2.1.2. title
2.2.2.1.3. version
2.2.2.1.4. description
2.2.2.1.5. author
2.2.2.1.6. iconURL
2.2.2.2. executableFile
2.2.2.3. documentation
2.2.2.4. I/O
2.2.2.4.1. inputs
2.2.2.4.2. outputs
2.2.2.5. errorCodes
2.2.2.6. dependencies
2.3. common files
2.3.1. files
2.3.1.1. 1
2.3.1.1.1. 2
2.3.1.2. common names for entery point and the meta data
2.3.1.2.1. 1