This guide will walk you through setting up and publishing the OpenPlugins marketplace to GitHub.
- Git installed and configured
- GitHub account
- GitHub CLI (
gh) installed (optional but recommended) - Claude Code installed
Ensure all files are in place:
cd /home/danie/projects/plugins/architect/open-plugins
# Verify structure
tree -L 3Expected structure:
open-plugins/
├── .claude-plugin/
│ └── marketplace.json
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug-report.md
│ │ ├── feature-request.md
│ │ └── plugin-submission.md
│ └── PULL_REQUEST_TEMPLATE.md
├── .gitignore
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
└── README.md
# Validate JSON syntax
cat .claude-plugin/marketplace.json | python3 -m json.tool
# Should output formatted JSON with no errorsYou have three options for publishing to GitHub:
Use the provided automation script that handles everything:
cd /home/danie/projects/plugins/architect/open-plugins
# Interactive mode - prompts for all details
./scripts/publish-to-github.sh
# Or preview what it will do first
./scripts/publish-to-github.sh --dry-run
# Or fully automated (CI/CD)
./scripts/publish-to-github.sh --yes --owner dhofheinz
# Get help on all options
./scripts/publish-to-github.sh --helpWhat the script does:
- ✅ Validates marketplace structure
- ✅ Checks prerequisites (git, gh CLI)
- ✅ Initializes git repository (if needed)
- ✅ Creates initial commit
- ✅ Creates GitHub repository
- ✅ Pushes to GitHub
- ✅ Creates release tag (optional)
Script Features:
- Dry-run mode: Preview changes before making them (
--dry-run) - Verbose mode: See detailed output for debugging (
--verbose) - Automated mode: Non-interactive for CI/CD (
--yes) - Force mode: Override safety checks (
--force) - Idempotent: Safe to run multiple times
- Validation: Input sanitization and error checking
- Helpful errors: Clear messages with solutions
Examples:
# Preview without making changes
./scripts/publish-to-github.sh --dry-run --verbose
# Fully automated publish
./scripts/publish-to-github.sh \
--yes \
--owner dhofheinz \
--repo open-plugins
# Force republish existing repo
./scripts/publish-to-github.sh --force --owner dhofheinzSkip to Step 5 (Configure Repository Settings) if using the automated script.
If you prefer manual control or want to learn the steps:
# Initialize repository
git init
# Add all files
git add .
# Create initial commit
git commit -m "feat: initialize OpenPlugins marketplace
- Complete marketplace structure with metadata
- Comprehensive documentation (README, CONTRIBUTING, CODE_OF_CONDUCT)
- GitHub templates for issues and PRs
- Plugin quality standards and review process
- MIT License for marketplace structure
- Initial version 1.0.0
"
# Verify commit
git log --oneline# Create public repository
gh repo create dhofheinz/open-plugins \
--public \
--description "AI-curated marketplace of high-quality, open-source Claude Code plugins" \
--homepage "https://github.com/dhofheinz/open-plugins"
# Push to GitHub
git remote add origin https://github.com/dhofheinz/open-plugins.git
git branch -M main
git push -u origin mainIf you don't have GitHub CLI installed:
# Initialize repository
git init
# Add all files
git add .
# Create initial commit
git commit -m "feat: initialize OpenPlugins marketplace
- Complete marketplace structure with metadata
- Comprehensive documentation (README, CONTRIBUTING, CODE_OF_CONDUCT)
- GitHub templates for issues and PRs
- Plugin quality standards and review process
- MIT License for marketplace structure
- Initial version 1.0.0
"- Go to https://github.com/new
- Fill in repository details:
- Owner: dhofheinz
- Repository name: open-plugins
- Description: AI-curated marketplace of high-quality, open-source Claude Code plugins
- Visibility: Public
- Do NOT initialize with README, .gitignore, or license (we already have these)
- Click "Create repository"
- Follow GitHub's instructions to push existing repository:
git remote add origin https://github.com/dhofheinz/open-plugins.git
git branch -M main
git push -u origin mainAfter creating the repository on GitHub:
-
Enable Discussions:
- Go to repository Settings → Features
- Check "Discussions"
- Create initial categories: General, Q&A, Ideas, Show and Tell
-
Configure Issues:
- Go to repository Issues
- Verify issue templates appear correctly
-
Set Repository Topics:
- Go to repository home page
- Click gear icon next to "About"
- Add topics:
claude-code,plugins,marketplace,open-source,community
-
Enable Branch Protection (Optional but recommended):
- Settings → Branches → Add rule
- Branch name pattern:
main - Enable: "Require pull request reviews before merging"
- Enable: "Require status checks to pass before merging"
Note: The automated script (Option A) can create the release automatically. If you used that, skip this step.
For manual publishing:
# Create annotated tag for v1.0.0
git tag -a v1.0.0 -m "Initial release of OpenPlugins marketplace
Features:
- Complete marketplace infrastructure
- Comprehensive documentation
- Plugin submission process
- Quality standards and review guidelines
- Community governance
"
# Push tag to GitHub
git push origin v1.0.0
# Create GitHub release (if using gh CLI)
gh release create v1.0.0 \
--title "OpenPlugins v1.0.0 - Initial Release" \
--notes "First public release of OpenPlugins marketplace. Ready for community plugin submissions."Test that users can add your marketplace:
# Add marketplace using GitHub URL
/plugin marketplace add dhofheinz/open-plugins
# Or use raw URL
/plugin marketplace add https://raw.githubusercontent.com/dhofheinz/open-plugins/main/.claude-plugin/marketplace.json
# Verify marketplace was added
/plugin marketplace listExpected output:
✓ open-plugins marketplace added successfully
Source: https://github.com/openplugins/open-plugins
Plugins: 0 (marketplace is new, plugins coming soon!)
After GitHub repository is created, update placeholder URLs if you used a different owner/repo name:
# Update README.md badges and links (if needed)
# Update CONTRIBUTING.md links (if needed)
# Update marketplace.json URLs to actual repository
# Example: Update marketplace.json if using different org/repo name
# Replace "openplugins/open-plugins" with your actual repoNote: This marketplace is already configured for dhofheinz/open-plugins. If you need to publish to a different GitHub organization or username, update these files:
-
.claude-plugin/marketplace.json:metadata.homepagemetadata.repositoryowner.url
-
README.md:- All GitHub links
- Installation commands
- Badge URLs
-
CONTRIBUTING.md:- Repository URLs
- Example commands
Once published:
-
Create Announcement:
- Post in GitHub Discussions → Announcements
- Share on social media
- Post in Claude Code communities
-
Invite Contributors:
- Share submission guidelines
- Reach out to plugin authors
- Encourage community participation
-
Monitor Submissions:
- Watch for new issues and PRs
- Respond promptly to submissions
- Review plugins thoroughly
Once your marketplace is live, users can:
# Using GitHub shorthand
/plugin marketplace add dhofheinz/open-plugins
# Using full GitHub URL
/plugin marketplace add https://github.com/dhofheinz/open-plugins
# Using raw JSON URL
/plugin marketplace add https://raw.githubusercontent.com/dhofheinz/open-plugins/main/.claude-plugin/marketplace.json# List all plugins in marketplace
/plugin marketplace list open-plugins
# Search for specific plugins
/plugin search keyword# Install plugin from OpenPlugins marketplace
/plugin install plugin-name@open-plugins
# Install specific version
/plugin install plugin-name@open-plugins@1.2.0# Refresh to get latest plugin list
/plugin marketplace update open-pluginsFor team use, add marketplace to .claude/settings.json:
{
"marketplaces": [
"dhofheinz/open-plugins"
],
"plugins": [
"recommended-plugin@open-plugins",
"another-plugin@open-plugins"
]
}This automatically adds the marketplace for all team members.
When accepting plugin submissions:
- Review PR against quality checklist
- Test plugin installation and functionality
- Verify no security issues
- Merge PR to add plugin to
marketplace.json - Plugin becomes immediately available to users
When plugin authors submit version updates:
- Verify new version exists in plugin repository
- Test updated version
- Update version in
marketplace.json - Merge and tag new marketplace release (optional)
If plugin needs removal:
- Add deprecation notice (90-day warning)
- Update
marketplace.jsonafter grace period - Document removal in CHANGELOG.md
- Notify users via Discussions
Check:
- Repository is public
marketplace.jsonis in.claude-plugin/directory- JSON syntax is valid
- GitHub repository is accessible
Verify:
- Plugin source URL is correct
- Plugin repository is public
- Plugin has valid
plugin.json - Plugin structure follows Claude Code standards
# Validate locally
cat .claude-plugin/marketplace.json | python3 -m json.tool
# Check for common issues:
# - Missing commas
# - Trailing commas
# - Invalid escaping
# - Unclosed brackets- Issues: https://github.com/dhofheinz/open-plugins/issues
- Discussions: https://github.com/dhofheinz/open-plugins/discussions
- Claude Code Docs: https://docs.claude.com/en/docs/claude-code/plugins
- Plugin Reference: https://docs.claude.com/en/docs/claude-code/plugins-reference
The publish-to-github.sh script supports these options:
# Show all options
./scripts/publish-to-github.sh --help
# Common usage patterns
./scripts/publish-to-github.sh # Interactive
./scripts/publish-to-github.sh --dry-run # Preview
./scripts/publish-to-github.sh --verbose # Debug
./scripts/publish-to-github.sh --yes --owner USER # Automated
# Advanced options
--force # Override safety checks
--skip-validation # Skip marketplace validation
--owner OWNER # GitHub username/org
--repo REPO # Repository nameExit Codes:
0- Success1- Validation failed2- Git error3- GitHub error4- User cancelled5- Missing prerequisites6- Invalid input
- Run
./scripts/publish-to-github.sh --dry-runto preview - Run
./scripts/publish-to-github.shto publish - Configure repository settings (Step 4)
- Test marketplace installation (Step 6)
- Announce to community (Step 8)
- Follow Steps 3B or 3C for manual git/GitHub setup
- Configure repository settings (Step 4)
- Create release (Step 5)
- Test marketplace installation (Step 6)
- Update URLs if needed (Step 7)
- Announce to community (Step 8)
Ready to publish? Use the automated script for the easiest experience, or follow the manual steps for full control!