Static site generator for Claude Code Plugin Marketplace repositories
Project description
cc-plugin-catalog
Static site generator for Claude Code Plugin Marketplace repositories.
Generate a beautiful, responsive catalog page from your marketplace's marketplace.json and plugin.json files — and deploy it to GitHub Pages with a single reusable workflow.
Demo: https://giginet.me/claude-plugins-official/
Features
- Plugin catalog pages — Grid index page with plugin cards and individual detail pages
- Component detection — Automatically scans and displays Skills, Commands, Agents, Hooks, MCP Servers, and LSP Servers
- Search & filter — Incremental search with inline category, tag, and tool type filters
- Markdown rendering — README and LICENSE files rendered as HTML
- Dark / Light mode — Toggle with
prefers-color-schemedetection andlocalStoragepersistence - GitHub integration — Auto-links to source file trees, GitHub icon in header
- Reusable workflow — One-line GitHub Actions setup for any marketplace repository
Quick Start
Preview a marketplace locally
No installation required — just use uvx:
uvx cc-plugin-catalog preview /path/to/marketplace-repo
Open http://localhost:8000/ in your browser. Press Ctrl+C to stop.
# Custom port and output directory
uvx cc-plugin-catalog preview /path/to/marketplace-repo -p 3000 -o _site
Build static files
uvx cc-plugin-catalog build /path/to/marketplace-repo -o _site
This generates a fully static site in _site/ that can be deployed anywhere.
Deploy to GitHub Pages
Add a single workflow file to your marketplace repository to automatically build and deploy the catalog site on every push.
1. Enable GitHub Pages
Go to your marketplace repository's Settings > Pages and set the source to GitHub Actions.
2. Add the workflow
Create .github/workflows/deploy-catalog.yml:
name: Deploy Plugin Catalog
on:
push:
branches: [main]
permissions:
pages: write
id-token: write
jobs:
deploy:
uses: giginet/cc-plugin-catalog/.github/workflows/build-pages.yml@v1
# Optional: customize with inputs
# with:
# base-url: "https://example.github.io/my-marketplace" # Enables OGP meta tags
# logo: "assets/logo.png" # Header logo image
That's it! Every push to main will build your catalog and deploy it to GitHub Pages.
Workflow inputs
All inputs are optional.
| Input | Default | Description |
|---|---|---|
catalog-version |
"" (latest) |
cc-plugin-catalog version to install |
output-dir |
"_site" |
Output directory for generated files |
base-url |
"" |
Base URL for OGP meta tags. OGP tags are only generated when this is set. |
logo |
"" |
Path to a logo image in the repository (e.g. assets/logo.png) |
default-repository |
"" |
Marketplace repo identifier for install commands (e.g. owner/repo). Auto-detected from git remote if not set. |
# Example with optional inputs
jobs:
deploy:
uses: giginet/cc-plugin-catalog/.github/workflows/build-pages.yml@v1
with:
base-url: "https://example.github.io/my-marketplace"
logo: "assets/logo.png"
The logo path is relative to the repository root. Simply commit an image file (PNG, SVG, etc.) to your repository and reference it.
Without the reusable workflow
If you can't use the reusable workflow (e.g. GitHub Enterprise, custom runners, or additional build steps):
name: Deploy Plugin Catalog
on:
push:
branches: [main]
permissions:
pages: write
id-token: write
jobs:
build-and-deploy:
runs-on: ubuntu-latest
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- uses: actions/checkout@v4
- uses: astral-sh/setup-uv@v5
- run: uv tool install cc-plugin-catalog
- run: cc-plugin-catalog build . -o _site --base-url "https://example.github.io/my-marketplace" --logo assets/logo.png
- uses: actions/upload-pages-artifact@v3
with:
path: _site
- id: deployment
uses: actions/deploy-pages@v4
Supported Plugin Components
cc-plugin-catalog detects and displays the following component types from plugin directories:
| Component | Source | Detected From |
|---|---|---|
| Skills | skills/*/SKILL.md |
Folder name, YAML frontmatter |
| Commands | commands/*.md |
Filename, YAML frontmatter |
| Agents | agents/*.md |
YAML frontmatter (name, description, model) |
| Hooks | hooks/hooks.json |
Event names, matchers |
| MCP Servers | .mcp.json |
Server names, commands |
| LSP Servers | .lsp.json |
Language names, commands |
Development
git clone https://github.com/giginet/cc-plugin-catalog.git
cd cc-plugin-catalog
uv sync --dev
Run tests
uv run pytest tests/ -v
Lint & format
uv run ruff check src/ tests/
uv run ruff format src/ tests/
Type check
uv run ty check src/
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file cc_plugin_catalog-1.2.0.tar.gz.
File metadata
- Download URL: cc_plugin_catalog-1.2.0.tar.gz
- Upload date:
- Size: 543.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e55c19cf8767335fa89bff9c63055fcec0495a3199591f4c518296acb75b7170
|
|
| MD5 |
b30fae6c27647e4b841f5199154a8c8b
|
|
| BLAKE2b-256 |
c40b30df331a485ffb95491929f6be01b128f4e3530e229939a271b48f9d60d5
|
Provenance
The following attestation bundles were made for cc_plugin_catalog-1.2.0.tar.gz:
Publisher:
publish.yml on giginet/cc-plugin-catalog
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cc_plugin_catalog-1.2.0.tar.gz -
Subject digest:
e55c19cf8767335fa89bff9c63055fcec0495a3199591f4c518296acb75b7170 - Sigstore transparency entry: 1196383421
- Sigstore integration time:
-
Permalink:
giginet/cc-plugin-catalog@1ccc811bac29614100c8e434917a396ebcedfff7 -
Branch / Tag:
refs/tags/1.2.0 - Owner: https://github.com/giginet
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1ccc811bac29614100c8e434917a396ebcedfff7 -
Trigger Event:
release
-
Statement type:
File details
Details for the file cc_plugin_catalog-1.2.0-py3-none-any.whl.
File metadata
- Download URL: cc_plugin_catalog-1.2.0-py3-none-any.whl
- Upload date:
- Size: 27.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6abd818b415fe2bfa66e61a254341b957f0c6972b8c59650c6d7d2874d4c78d2
|
|
| MD5 |
c4e4c4f0f8afc53f7b6d8052c8dab20f
|
|
| BLAKE2b-256 |
af1008755fe1477fbce14bbcec3a493c774482622777a4d5b506e27d1e32c97e
|
Provenance
The following attestation bundles were made for cc_plugin_catalog-1.2.0-py3-none-any.whl:
Publisher:
publish.yml on giginet/cc-plugin-catalog
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
cc_plugin_catalog-1.2.0-py3-none-any.whl -
Subject digest:
6abd818b415fe2bfa66e61a254341b957f0c6972b8c59650c6d7d2874d4c78d2 - Sigstore transparency entry: 1196383487
- Sigstore integration time:
-
Permalink:
giginet/cc-plugin-catalog@1ccc811bac29614100c8e434917a396ebcedfff7 -
Branch / Tag:
refs/tags/1.2.0 - Owner: https://github.com/giginet
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@1ccc811bac29614100c8e434917a396ebcedfff7 -
Trigger Event:
release
-
Statement type: