Guide for creating and managing Claude Code plugin marketplaces. Use when setting up a marketplace, validating marketplace.json, or distributing plugins.
Creates and validates Claude Code plugin marketplaces with schema compliance checks.
npx claudepluginhub vinnie357/claude-skillsThis skill is limited to using the following tools:
references/schema-specification.mdscripts/analyze-plugins.nuscripts/format-marketplace.nuscripts/init-marketplace.nuscripts/validate-dependencies.nuscripts/validate-marketplace.nuGuide for creating, validating, and managing plugin marketplaces for Claude Code. Includes schema validation, best practices, and automated tools.
Activate this skill when:
.claude-plugin/marketplace.json filesAll marketplaces must be located at .claude-plugin/marketplace.json in the repository root.
Required Fields:
name: Marketplace identifier (kebab-case, lowercase alphanumeric and hyphens only)owner: Object with maintainer details (name required, email optional)plugins: Array of plugin definitions (can be empty)Optional Metadata:
metadata.description: Summary of marketplace purposemetadata.version: Marketplace version tracking (semantic versioning recommended)metadata.pluginRoot: Base directory for relative plugin source pathsIMPORTANT: Schema Relationship
Plugin entries use the plugin manifest schema with all fields made optional, plus marketplace-specific fields (source, strict, category, tags). This means any field valid in a plugin.json file can also be used in a marketplace entry.
strict: false, the marketplace entry serves as the complete plugin manifest if no plugin.json existsstrict: true (default), marketplace fields supplement the plugin's own manifest fileEach plugin entry in the plugins array requires:
Mandatory:
name: Plugin identifier (kebab-case)source: Location specification (string path or object)Standard Metadata:
description: Brief explanation of plugin functionalityversion: Semantic version numberauthor: Creator information (object with name, optional email)homepage: Documentation or project URLrepository: Source control URLlicense: SPDX license identifier (e.g., MIT, Apache-2.0)keywords: Array of discovery and categorization tagscategory: Organizational groupingtags: Additional searchability termsComponent Configuration:
commands: Custom paths to command files or directoriesagents: Custom paths to agent fileshooks: Custom hooks configuration or path to hooks filemcpServers: MCP server configurations or path to MCP configskills: Array of skill directory pathsStrict Mode Control:
strict: Boolean (default: true)
true: Plugin must include plugin.json; marketplace fields supplement itfalse: Marketplace entry serves as complete manifest (no plugin.json needed)Dependencies:
dependencies: Array of plugin names this plugin depends on (format: "namespace:plugin-name")"source": "./plugins/my-plugin"
// In marketplace metadata
"metadata": {
"pluginRoot": "./plugins"
}
// In plugin entry
"source": "my-plugin" // Resolves to ./plugins/my-plugin
"source": {
"source": "github",
"repo": "owner/plugin-repo",
"path": "optional/subdirectory",
"branch": "main"
}
"source": {
"source": "url",
"url": "https://gitlab.com/team/plugin.git",
"branch": "main"
}
Use ${CLAUDE_PLUGIN_ROOT} in paths to reference the plugin's installation directory:
{
"skills": [
"${CLAUDE_PLUGIN_ROOT}/skills/my-skill"
],
"commands": [
"${CLAUDE_PLUGIN_ROOT}/commands"
]
}
This ensures paths work correctly regardless of installation location.
Use strict: false to define complete plugin manifests inline without requiring plugin.json:
{
"name": "my-plugin",
"source": "./plugins/my-plugin",
"strict": false,
"description": "Complete plugin definition inline",
"version": "1.0.0",
"author": {
"name": "Developer Name"
},
"skills": [
"${CLAUDE_PLUGIN_ROOT}/skills/skill-one",
"${CLAUDE_PLUGIN_ROOT}/skills/skill-two"
]
}
Customize component locations:
{
"name": "custom-paths",
"source": "./plugins/custom",
"strict": false,
"commands": ["${CLAUDE_PLUGIN_ROOT}/custom-commands"],
"agents": ["${CLAUDE_PLUGIN_ROOT}/custom-agents"],
"hooks": {
"onInstall": "${CLAUDE_PLUGIN_ROOT}/hooks/install.sh"
},
"mcpServers": "${CLAUDE_PLUGIN_ROOT}/mcp-config.json"
}
With strict: true, marketplace entries can add metadata not in plugin.json:
{
"name": "existing-plugin",
"source": "./plugins/existing",
"strict": true,
"category": "development",
"keywords": ["added", "from", "marketplace"],
"homepage": "https://docs.example.com"
}
Use the provided Nushell script to validate marketplace.json:
nu ${CLAUDE_PLUGIN_ROOT}/scripts/validate-marketplace.nu .claude-plugin/marketplace.json
This validates:
Validate individual plugin entries:
nu ${CLAUDE_PLUGIN_ROOT}/scripts/validate-plugin-entry.nu .claude-plugin/marketplace.json "plugin-name"
Checks:
Check for circular dependencies and missing dependencies:
nu ${CLAUDE_PLUGIN_ROOT}/scripts/validate-dependencies.nu .claude-plugin/marketplace.json
vinnie357)elixir-phoenix, rust-tools, core-skills)development, language, tools, frontend, backend, metadependencies for plugins that require other pluginsall-skills) that bundles related pluginsall-skills:core)Use strict: false when:
Use strict: true when:
{
"metadata": {
"pluginRoot": "./plugins"
},
"plugins": [
{
"name": "core",
"source": "core" // Resolves to ./plugins/core
},
{
"name": "external",
"source": {
"source": "github",
"repo": "org/repo"
}
}
]
}
// ❌ Invalid
"name": "myPlugin"
"name": "my_plugin"
"name": "My-Plugin"
// ✅ Valid
"name": "my-plugin"
"name": "core-skills"
// ❌ Invalid
{
"name": "marketplace"
}
// ✅ Valid
{
"name": "marketplace",
"owner": {
"name": "Developer Name"
}
}
// ❌ Invalid (path doesn't exist)
"source": "./plugins/nonexistent"
// ✅ Valid (path exists)
"source": "./plugins/core"
// ❌ Invalid
{
"plugins": [
{
"name": "plugin-a",
"dependencies": ["namespace:plugin-b"]
},
{
"name": "plugin-b",
"dependencies": ["namespace:plugin-a"]
}
]
}
mkdir -p .claude-plugin
Use the validation script to generate a template:
nu ${CLAUDE_PLUGIN_ROOT}/scripts/init-marketplace.nu
This creates .claude-plugin/marketplace.json with required fields.
For each plugin, decide on strict mode and add entry:
{
"name": "marketplace-name",
"owner": {
"name": "Your Name",
"email": "you@example.com"
},
"metadata": {
"description": "Your marketplace description",
"version": "1.0.0",
"pluginRoot": "./plugins"
},
"plugins": [
{
"name": "plugin-name",
"source": "plugin-name",
"strict": false,
"description": "Plugin description",
"version": "1.0.0",
"author": {
"name": "Your Name"
},
"license": "MIT",
"category": "development",
"skills": [
"${CLAUDE_PLUGIN_ROOT}/skills/skill-one"
]
}
]
}
nu ${CLAUDE_PLUGIN_ROOT}/scripts/validate-marketplace.nu .claude-plugin/marketplace.json
claude-code install ./
Use the provided script to analyze existing structure:
nu ${CLAUDE_PLUGIN_ROOT}/scripts/analyze-plugins.nu .
This scans for plugin.json files and suggests marketplace.json structure.
source path is correctpluginRoot in metadata if using relative paths${CLAUDE_PLUGIN_ROOT} if neededRun validation script with verbose mode:
nu ${CLAUDE_PLUGIN_ROOT}/scripts/validate-marketplace.nu .claude-plugin/marketplace.json --verbose
For detailed schema specifications and examples, see:
references/schema-specification.md: Complete JSON schemareferences/examples.md: Real-world marketplace examplesreferences/migration-guide.md: Step-by-step migration instructionsAll validation and utility scripts are located in scripts/:
validate-marketplace.nu: Full marketplace validationvalidate-plugin-entry.nu: Individual plugin entry validationvalidate-dependencies.nu: Dependency graph validationinit-marketplace.nu: Generate marketplace templateanalyze-plugins.nu: Analyze existing plugin structureformat-marketplace.nu: Format and sort marketplace.jsonExecute scripts with:
nu ${CLAUDE_PLUGIN_ROOT}/scripts/[script-name].nu [args]
This skill should be used when the user asks about libraries, frameworks, API references, or needs code examples. Activates for setup questions, code generation involving libraries, or mentions of specific frameworks like React, Vue, Next.js, Prisma, Supabase, etc.
UI/UX design intelligence. 50 styles, 21 palettes, 50 font pairings, 20 charts, 9 stacks (React, Next.js, Vue, Svelte, SwiftUI, React Native, Flutter, Tailwind, shadcn/ui). Actions: plan, build, create, design, implement, review, fix, improve, optimize, enhance, refactor, check UI/UX code. Projects: website, landing page, dashboard, admin panel, e-commerce, SaaS, portfolio, blog, mobile app, .html, .tsx, .vue, .svelte. Elements: button, modal, navbar, sidebar, card, table, form, chart. Styles: glassmorphism, claymorphism, minimalism, brutalism, neumorphism, bento grid, dark mode, responsive, skeuomorphism, flat design. Topics: color palette, accessibility, animation, layout, typography, font pairing, spacing, hover, shadow, gradient. Integrations: shadcn/ui MCP for component search and examples.