{ "$schema": "http://json-schema.org/draft-07/schema#", "title": "Cookbook Manifest", "description": "Schema for cookbook.yml manifest defining cookbooks and recipes", "type": "object", "required": ["cookbooks"], "properties": { "cookbooks": { "type": "array", "description": "List of cookbooks", "items": { "type": "object", "required": ["id", "name", "description", "path", "languages", "recipes"], "properties": { "id": { "type": "string", "description": "Unique identifier for the cookbook", "pattern": "^[a-z0-9-]+$" }, "name": { "type": "string", "description": "Display name for the cookbook" }, "description": { "type": "string", "description": "Brief description of the cookbook" }, "path": { "type": "string", "description": "Relative path to the cookbook folder" }, "featured": { "type": "boolean", "description": "Whether this cookbook should be featured", "default": false }, "languages": { "type": "array", "description": "Programming languages supported by this cookbook", "items": { "type": "object", "required": ["id", "name"], "properties": { "id": { "type": "string", "description": "Language identifier (folder name)", "pattern": "^[a-z0-9-]+$" }, "name": { "type": "string", "description": "Display name for the language" }, "icon": { "type": "string", "description": "Emoji icon for the language" }, "extension": { "type": "string", "description": "File extension for runnable examples", "pattern": "^\\.[a-z]+$" } } } }, "recipes": { "type": "array", "description": "List of recipes in this cookbook", "items": { "type": "object", "required": ["id", "name", "description"], "properties": { "id": { "type": "string", "description": "Recipe identifier (matches markdown filename without extension)", "pattern": "^[a-z0-9-]+$" }, "name": { "type": "string", "description": "Display name for the recipe" }, "description": { "type": "string", "description": "Brief description of what the recipe covers" }, "tags": { "type": "array", "description": "Tags for filtering and categorization", "items": { "type": "string" } } } } } } } } } }