# How Plugin Categories Function in the Claude Marketplace JSON

> Learn how plugin categories work in the Claude Marketplace JSON. Discover how arbitrary lowercase strings define categories, validated by CI for schema compliance.

- Repository: [Anthropic/claude-plugins-community](https://github.com/anthropics/claude-plugins-community)
- Tags: how-to-guide
- Published: 2026-09-12

---

**Plugin categories in the Claude marketplace are defined as arbitrary, lower-case string values assigned to the `category` key within each plugin object in [`.claude-plugin/marketplace.json`](https://github.com/anthropics/claude-plugins-community/blob/main/.claude-plugin/marketplace.json), validated by continuous integration to ensure schema compliance.**

The `anthropics/claude-plugins-community` repository maintains a single source of truth for all public Claude plugins. Understanding how plugin categories function within [`marketplace.json`](https://github.com/anthropics/claude-plugins-community/blob/main/marketplace.json) is essential for developers submitting extensions, as these classification strings directly influence how the marketplace UI groups and filters plugins for user discovery.

## Category Field Structure in marketplace.json

The community marketplace relies on [`.claude-plugin/marketplace.json`](https://github.com/anthropics/claude-plugins-community/blob/main/.claude-plugin/marketplace.json) as its central manifest. This file contains a JSON array where each element represents a plugin object. Every object must include a **`category`** property whose value classifies the plugin's primary function.

The schema imposes minimal constraints: the value must be a non-empty string. There is no hard-coded enumeration limiting valid entries, allowing the taxonomy to evolve organically as new plugin types emerge.

### Real-World Category Examples

The current marketplace demonstrates the flexible string-based approach through diverse categorizations:

- `"category": "testing"` (line 105)
- `"category": "productivity"` (line 368)
- `"category": "development"` (line 695)

Other common values observed in the manifest include `"security"` and `"finance"`, though contributors may define any descriptive term that accurately represents their plugin's domain.

## CI Validation of Plugin Categories

When the repository is built, the CI validator located at [`.github/actions/validate-plugins/scripts/20-validate-cli-marketplace.sh`](https://github.com/anthropics/claude-plugins-community/blob/main/.github/actions/validate-plugins/scripts/20-validate-cli-marketplace.sh) processes the assembled [`marketplace.json`](https://github.com/anthropics/claude-plugins-community/blob/main/marketplace.json). This script enforces that every plugin entry contains a properly formed `category` field.

Unlike systems that validate against a rigid enum, this validator checks for structural integrity—ensuring the key exists and contains a non-empty string—without restricting the semantic meaning. This approach balances standardization with flexibility, allowing novel categories to emerge without code changes.

## Implementing Categories in Your Plugin Definition

To assign a category to your plugin, include the `category` key in your entry within [`marketplace.json`](https://github.com/anthropics/claude-plugins-community/blob/main/marketplace.json). The value should be a concise, lower-case descriptor that aligns with existing conventions where possible.

**Example: Productivity Plugin**

```json
{
  "name": "10x-shopping",
  "description": "...",
  "source": { "source": "url", "url": "...", "sha": "..." },
  "homepage": "https://www.10xgeo.com/",
  "category": "productivity"
}

```

**Example: Security Plugin**

```json
{
  "name": "42crunch-api-security-testing",
  "description": "...",
  "source": {
    "source": "git-subdir",
    "url": "42Crunch-AI/claude-plugins",
    "path": "plugins/api-security-testing",
    "ref": "v1.0.1",
    "sha": "30287f5e3f122a646d1ac5ca3ab96e130c52a3ad"
  },
  "homepage": "https://docs.42crunch.com",
  "category": "security"
}

```

**Example: Development Plugin**

```json
{
  "name": "a11y-fixer",
  "description": "Scan HTML/JSX for accessibility issues",
  "source": {
    "source": "git-subdir",
    "url": "barnburner121/claude-plugin-marketplace",
    "path": "generated-plugins/a11y-fixer",
    "ref": "main",
    "sha": "5f6b5d32d9f457dc9c2c7c0fb1d67dffc9140f33"
  },
  "homepage": "https://github.com/barnburner121/claude-plugin-marketplace",
  "category": "development"
}

```

## Summary

- **Centralized Definition**: Plugin categories are defined exclusively within [`.claude-plugin/marketplace.json`](https://github.com/anthropics/claude-plugins-community/blob/main/.claude-plugin/marketplace.json), not in separate configuration files.
- **Flexible Schema**: The `category` field accepts any non-empty string value, with no hard-coded list of allowed terms in the repository.
- **Automated Validation**: The [`.github/actions/validate-plugins/scripts/20-validate-cli-marketplace.sh`](https://github.com/anthropics/claude-plugins-community/blob/main/.github/actions/validate-plugins/scripts/20-validate-cli-marketplace.sh) script enforces structural compliance during CI builds.
- **Discovery Impact**: These strings power the marketplace UI's filtering and grouping mechanisms, directly affecting plugin discoverability.

## Frequently Asked Questions

### What file contains the canonical plugin category definitions?

The file [`.claude-plugin/marketplace.json`](https://github.com/anthropics/claude-plugins-community/blob/main/.claude-plugin/marketplace.json) serves as the single source of truth. It contains a JSON array of plugin objects, each requiring a `category` field that the marketplace UI consumes for organization and filtering.

### Is there a predefined enumeration of allowed categories?

No. The repository does not maintain a hard-coded list of valid categories. The validation script only verifies that the `category` key exists and contains a non-empty string, allowing the taxonomy to expand organically as developers introduce new plugin types.

### How does the repository prevent malformed category entries?

The validation occurs during the CI build process via [`.github/actions/validate-plugins/scripts/20-validate-cli-marketplace.sh`](https://github.com/anthropics/claude-plugins-community/blob/main/.github/actions/validate-plugins/scripts/20-validate-cli-marketplace.sh). This script checks the assembled marketplace manifest to ensure every entry meets the schema requirements, including the presence and proper formatting of the `category` property.

### Can I create a plugin with a custom category not currently used in the marketplace?

Yes. Since the system accepts arbitrary non-empty strings, you may define novel categories (for example, `" healthcare"` or `"devops"`) provided they accurately describe your plugin's functionality. The absence of an enumeration means innovation in categorization is supported without repository changes.