Where Is the .claude-plugin/plugin.json File Located in Claude Plugins?
Each Claude plugin stores its plugin.json manifest inside a hidden .claude-plugin directory at the root of the plugin folder.
The anthropics/claude-plugins-community repository enforces a strict convention for plugin metadata placement. Understanding the .claude-plugin/plugin.json location is essential for developers building integrations or automating plugin discovery across the ecosystem. Every plugin follows this standardized structure to ensure consistent manifest discovery.
The Standard File Path Convention
According to the source code structure in anthropics/claude-plugins-community, the manifest file must reside at a specific relative path within each plugin directory. The hidden .claude-plugin folder acts as a metadata container, distinguishing plugin configuration from implementation code.
The required structure is:
plugin-name/
├── .claude-plugin/
│ └── plugin.json
└── [other plugin files]
This convention applies universally across all community plugins. The hidden directory prefix prevents clutter while keeping metadata easily discoverable by automation tools.
Repository Examples from claude-plugins-community
The following plugins demonstrate the consistent application of this pattern:
Tres Finance Plugin
Located at tres-finance-plugin/.claude-plugin/plugin.json, this manifest defines the plugin's metadata and entry points. This path follows the standard convention exactly.
Testdino Plugin
The manifest resides at testdino/.claude-plugin/plugin.json, maintaining the same directory depth and naming as all other plugins in the collection.
Quickdesign Plugin
You will find the configuration at quickdesign/.claude-plugin/plugin.json, confirming the pattern holds across different plugin types and functionalities.
ELI5 Plugin
The educational plugin stores its manifest at eli5/.claude-plugin/plugin.json, identical in structure to the production-focused plugins.
Programmatically Accessing the Manifest
When building tools to interact with Claude plugins, you must construct the path dynamically to locate the plugin.json file. Below are reference implementations for common automation scenarios.
Python Implementation
Use pathlib to safely resolve the manifest location:
import json
from pathlib import Path
def load_plugin_manifest(plugin_dir: str) -> dict:
manifest_path = Path(plugin_dir) / ".claude-plugin" / "plugin.json"
with manifest_path.open("r", encoding="utf-8") as f:
return json.load(f)
# Example: load the Tres Finance plugin manifest
tres_manifest = load_plugin_manifest("tres-finance-plugin")
print(tres_manifest["name"])
This approach correctly handles cross-platform path resolution while targeting the specific .claude-plugin/plugin.json location required by the repository specification.
Bash Discovery
To enumerate all plugin manifests within the repository, use the following command:
find . -type f -path "*/.claude-plugin/plugin.json" -print
This returns absolute paths to every manifest file, including the repository-level metadata and all individual plugin configurations.
Repository Root vs Individual Plugin Manifests
The repository contains two categories of manifests. The root-level .claude-plugin/plugin.json provides metadata for the entire collection, while each sub-directory contains its own manifest for specific plugin functionality.
- Repository metadata:
.claude-plugin/plugin.json(at repository root) - Plugin manifests:
{plugin-name}/.claude-plugin/plugin.json(within each plugin directory)
Both follow identical schema structures but serve different organizational purposes. Automation scripts should filter by path depth if they need to distinguish between collection-level and plugin-level configurations.
Summary
- The .claude-plugin/plugin.json file is always located inside a hidden
.claude-plugindirectory at the plugin root. - Real examples include
tres-finance-plugin/.claude-plugin/plugin.jsonandeli5/.claude-plugin/plugin.json. - Repository automation relies on this consistent path structure for manifest discovery.
- The root
.claude-plugin/plugin.jsonserves collection-level metadata, distinct from individual plugin manifests.
Frequently Asked Questions
What is the purpose of the .claude-plugin directory?
The .claude-plugin directory serves as a standardized metadata container that separates plugin configuration from source code. This hidden directory convention ensures that manifest files remain discoverable by the Claude platform while remaining unobtrusive in file listings.
Can I place plugin.json in a different location within my plugin?
No, the repository structure requires the manifest to exist specifically at .claude-plugin/plugin.json relative to the plugin root. The Claude plugin loader searches for this exact path when initializing extensions, and deviation will result in discovery failures.
How does the root-level manifest differ from individual plugin manifests?
The root .claude-plugin/plugin.json describes the entire community repository collection, while individual plugin manifests describe specific integrations. Both use the same schema format, but the root manifest typically contains repository-wide metadata rather than execution endpoints.
Is the .claude-plugin directory required for all Claude plugins?
Yes, every plugin in the anthropics/claude-plugins-community repository must include this directory and its plugin.json file. This requirement ensures consistent metadata availability across the plugin ecosystem, enabling proper indexing and loading by the Claude platform.
Have a question about this repo?
These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:
curl -s "https://instagit.com/install.md" Maintain an open-source project? Get it listed too →