All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
-
Incomplete Plugin Detection - Detects plugins missing
.claude-plugin/plugin.json- Shows
[incomplete]tag in search results with explanatory legend - Checks local marketplace directory for plugin structure during loading
- Provides actionable error messages with two options:
- Refresh marketplace in case plugin was recently updated
- Use plugin directly from marketplace directory (Claude Code can access skills/commands without installation)
- Shows
-
Install Optimizations
- Skip download when valid cache exists ("Using cached plugin files")
- Check if plugin already installed in target scope before attempting install
- Improved error messages for non-installable plugins with context-specific guidance
- Installability Detection - Clear feedback for plugins that can't be installed via plum
- LSP plugins (e.g., gopls-lsp, typescript-lsp) marked as
[built-in]- handled by Claude Code - External URL plugins (e.g., atlassian, figma) marked as
[external]- require manual installation - Search results show tags with explanatory legend
- Install command shows helpful error with guidance instead of cryptic 404
- TUI shows badges in list view and detail view
- LSP plugins (e.g., gopls-lsp, typescript-lsp) marked as
- Refactored installability code with helper functions for maintainability
- Converted if-else chains to switch statements for consistency
- Added
InstallabilityTag()method toMarketplacePluginfor API parity
- LSP detection no longer triggers on empty
lspServers: {}orlspServers: []
-
Full CLI Interface - Complete command-line interface for plugin management
plum search <query>- Search plugins across all marketplacesplum info <plugin>- Show detailed plugin informationplum install <plugin>- Install plugins to user/project/local scopeplum remove <plugin>- Remove plugins (aliases:uninstall,rm)plum list- List installed plugins with filters (--enabled,--disabled,--scope)plum enable/disable <plugin>- Toggle plugin stateplum update [plugin]- Update plugins to latest versionsplum doctor- Health check for plugin installationsplum marketplace list- List available marketplacesplum marketplace add/remove- Manage custom marketplacesplum marketplace refresh- Fetch fresh data from GitHub- All commands support
--jsonoutput for scripting - Scope support:
--scope=user|project|local
-
Automatic Settings Backup - Safety net for user configuration
- Creates
settings.json.backup-plumbefore first modification - One-time backup per settings file (idempotent)
- Covers user and project scopes
- Easy restore:
cp ~/.claude/settings.json.backup-plum ~/.claude/settings.json
- Creates
-
Settings Safety Documentation - New README section explaining field preservation
- Documents what plum manages vs preserves
- Shows backup locations and restore instructions
- Builds user confidence in plum safety
-
Integration Tests - End-to-end testing with real plum binary
- Verifies settings preservation in realistic scenarios
- Tests multiple operations in sequence
- Run with:
go test -tags=integration ./internal/integration/... -v
- CRITICAL: Settings.json Data Loss - Fixed bug that destroyed user configuration
- Previous behavior: Installing/removing plugins deleted
permissions,hooks,attribution,model, and other custom fields - New behavior: All fields are preserved - plum only modifies
enabledPluginsandextraKnownMarketplaces - Implemented custom JSON marshaling to preserve unknown fields
- Added 4 comprehensive unit tests for field preservation
- This was a production blocker that affected all users
- Previous behavior: Installing/removing plugins deleted
- Addressed code review security issues in CLI commands
- Added input validation for plugin names and marketplace sources
- Atomic file writes with temp file + rename pattern
- Secure file permissions (0600) for settings and backups
- Updated marketplace stats and plugin counts (2026-01-21 snapshot)
- Cleaner Version Output - Hide commit and build time when unavailable
go installusers now see clean output:plum version v0.3.6- Homebrew/binary users still see full details with commit hash and build time
- Removes clutter from "none" and "unknown" values
- Version Display for
go install- Now shows actual version instead of "dev"- Uses
runtime/debug.ReadBuildInfo()to read version from Go module system - Displays correct version, commit hash, and build time
- No more confusion about what version is installed
- Works for both
go installand pre-built binaries
- Uses
Before:
plum version dev
commit: none
built: unknown
After:
plum version v0.3.5
commit: 3d98de6
built: 2026-01-11T07:37:42Z
- Updated Marketplace Data - Fresh sync with all 12 marketplaces (snapshot: 2026-01-11)
- Total plugins: 600+ → 750+ plugins (+25% growth)
- claude-code-marketplace: 10 → 117 plugins (+107 🚀)
- claude-plugins-official: 3 → 44 plugins (+41)
- claude-code-plugins-plus: 254 → 280 plugins (+26)
- claude-code-plugins: 5 → 13 plugins (+8)
- mag-claude-plugins: 4 → 10 plugins (+6)
- wshobson-agents: 65 → 68 plugins (+3)
- Updated GitHub stats for all marketplaces (stars, forks, last push dates)
- claude-code: 50,055 → 54,841 stars
- claude-mem: 9,729 → 13,076 stars (+35%)
- claude-plugins-official: 1,158 → 2,732 stars (+136%)
- anthropic-agent-skills: 30,756 → 37,240 stars
- claude-plugins-official marketplace - Added missing link to README (44 plugins)
- Plugin Count Verification Script -
scripts/check-plugin-counts.go- Fetches live plugin counts from all marketplace manifests
- Validates accuracy of README and discovery.go
- CLAUDE.md Maintenance Guide - Project workflow documentation
- Pre-push checklist (linting, tests, build)
- Routine maintenance for marketplace data syncs
- golangci-lint installation instructions
- CI Linting - Upgraded golangci-lint v1.64.8 → v2.8.0 for Go 1.24 support
- Migrated config to v2 format
- Using official golangci-lint-action@v9 in CI
- Fixed all linting issues (0 issues now)
- CI will no longer fail on lint step
- Installation Documentation - Improved clarity with all installation options
- Homebrew, Windows/Manual, Go install methods clearly separated
- Better troubleshooting guidance for PATH issues
- Git URL Source Parsing - Critical fix for claude-plugins-official compatibility
- Added custom JSON unmarshaling to handle source field as string OR object
- Fixes parsing for Git-hosted plugins (Atlassian, Figma, Vercel, Notion, Sentry, etc.)
- MarketplacePlugin now handles
{"source": "url", "url": "https://..."}format - Plugin.Source now handles both
"./plugins/name"and Git URL objects
- Local Marketplace Loading - Plugin counts now load from local installations when cache empty
- Fixes "(? plugins)" display for installed marketplaces
- claude-plugins-official now shows "(40 plugins)" correctly
- Works for any locally installed marketplace
- Updated Moved Repo URLs - Fixed broken marketplace links
- claude-code-plugins-plus: Updated to new repo location (845 ⭐)
- claude-code-marketplace: Updated to new repo location (577 ⭐)
- Fresh Static Stats - Updated all marketplace stats (snapshot: 2025-12-31)
- claude-code: 50,055 stars (+245)
- anthropic-agent-skills: 30,756 stars (+819)
- wshobson-agents: 23,995 stars (+100)
- claude-mem: 9,729 stars (+144)
- claude-plugins-official: 1,158 stars (NEW!)
- All 12 marketplaces now have timestamps (fixes "🕒 unknown" display)
- Developer Script -
scripts/update-marketplace-stats.sh- Fetches fresh GitHub stats for all marketplaces
- Outputs in Go code format for easy updates
- Rate-limited, error handling for moved repos
- Usage:
./scripts/update-marketplace-stats.sh
- Marketplace Stats Display - GitHub stats (⭐ stars, 🍴 forks, 🕒 updated) now display correctly in marketplace browser
- Fixed static stats lookup when using remote registry
- Stars and Updated sorting tabs now work as intended
- Stats load from cache → static fallback → none (graceful degradation)
- Expanded UI Test Suite - 49 additional test cases (total: 166+ across all packages)
- Copy functionality tests (install commands, marketplace commands)
- Marketplace browser navigation tests
- Display mode toggle and quit behavior tests
- Helper method validation (counts, widths, filters)
- Animation state and transition tests
- UI coverage: 10.6% → 20.2%
- Strict Linting - Enhanced code quality enforcement
- Added 6 new linters: revive, gocritic, gocyclo, unconvert, unparam, prealloc
- Cyclomatic complexity monitoring (threshold: 40)
- Style, performance, and diagnostic checks
- Total: 11 linters active in CI/CD
- Centralized Key Bindings - keybindings.go for maintainability
- 18 semantic actions (ActionQuit, ActionCopy, etc.)
- 5 view-specific binding maps
- Single source of truth for all key mappings
- Prepares for future complexity reduction
- TESTING.md Guide - Comprehensive testing documentation
- Quick start commands and coverage standards
- 4 testing patterns with examples (table-driven, integration, fixtures, temp files)
- Package-specific notes and best practices
- Debugging guide and CI/CD info
- Godoc Comments - Improved API documentation
- Model, Search, Plugin types documented
- Scoring algorithm details
- Usage patterns and thread-safety notes
- Reduced Complexity - ApplyMarketplaceSort refactored (complexity: 21 → 5)
- Replaced O(n²) bubble sort with O(n log n) sort.Slice
- Extracted 4 dedicated comparison functions
- 76% complexity reduction, improved performance
- Refactoring TODOs - Documented future improvements
- handleDetailKeys (35) - planned sub-handler split
- handleListKeys (36) - planned keybinding integration
- Detail View Scrolling - Critical UX bug where long plugin descriptions (e.g., whimsy-injector) were cut off with no scroll capability
- Added scrollable viewport with sticky header/footer (matches help menu pattern)
- Header (plugin name, badge, metadata) stays pinned to top
- Content (description, keywords, install instructions) scrolls with visual scrollbar
- Footer (key bindings) stays pinned to bottom
- Arrow key (↑↓) and mouse wheel scrolling support
- Responsive window resize maintains proper layout
- Scrollbar appears on right side when content overflows
- Comprehensive Test Suite - 117 new test cases across 6 test files
internal/search: 98.1% coverage (35 test cases) - fuzzy matching, scoring algorithmsinternal/plugin: 100% coverage (37 test cases) - all methods and edge casesinternal/ui: 10.6% coverage (24 test cases) - core user flows, navigation, view transitionsinternal/marketplace: 41.0% coverage (21 test cases) - GitHub stats, cache, refresh, discovery
- Static GitHub Stats - Hardcoded fallback stats for 9/12 marketplaces (snapshot: 2025-12-30)
- Users see stats immediately on first run without API calls
- Fallback mechanism: cache → static stats → none
- Reduces GitHub API rate limit pressure
- Stats: claude-code (49.8k★), anthropic-agent-skills (29.9k★), wshobson-agents (23.9k★), claude-mem (9.6k★), and 5 more
- Development Documentation - Comprehensive guide in README
- Go 1.24+ requirements clearly documented
- Test running commands with coverage options
- Code formatting and linting instructions
- Tooling version mismatch troubleshooting
- Expanded PopularMarketplaces list from 8 to 12 entries (matches registry)
- Marketplace coverage improved from 29.3% to 41.0%
- Mouse wheel scrolling now works in both help and detail views
- Marketplace Browser (
Shift+M) - Dedicated view for browsing all 11 marketplaces- GitHub stats integration (stars, forks, last commit date)
- Status badges: Installed/Cached/Available/New
- Plugin count and your installed count per marketplace
- Sort modes: by plugins, stars, name, or last updated
- Detail view with full marketplace info
- Filter plugins by marketplace with 'f' key
- Plugin Source Access - Quick access to plugin code
g- Open plugin on GitHub in browsero- Open local directory (installed plugins)p- Copy local path to clipboardl- Copy GitHub link to clipboard
- @marketplace Filter Syntax - Type
@marketplace-nameto filter plugins by marketplace - Enhanced Refresh - Shift+U improvements
- Progress counter showing X/Y marketplaces
- Shows current marketplace being fetched
- Reduced timeout from 30s to 15s
- Press Esc to cancel refresh
- Scrollable Help Menu - Help view now scrolls on small terminals
- Sticky header and footer (always visible)
- Visual scrollbar (plum-themed █ and ░)
- Responsive to terminal resize
- claude-mem Marketplace - Added to registry (11 total marketplaces now)
- Key Binding Consistency - All major commands now use Shift modifiers
Ctrl+v→Shift+V(toggle view mode)m→Shift+M(marketplace browser) - avoids search conflicts
- Help Menu Redesign
- Organized into logical sections with emoji headers
- Fixed width (62 chars) for better readability
- Removed clutter, added visual dividers
- Context hints for detail-view-only commands
- Status Bar Enhancement - Keys now highlighted in orange for better visibility
- Visual Feedback - Specific flash messages for each action
- 'g' → "✓ Opened!" (orange)
- 'l' → "✓ Link Copied!" (green)
- 'o' → "✓ Opened!" (orange)
- 'p' → "✓ Path Copied!" (green)
- Flash messages replace specific keys instead of adding clutter
- Installed Tab - Now correctly reads
installed_plugins.json(was looking for_v2suffix) - CI/CD - All linting issues resolved, tests passing
- Cache Errors - SaveToCache failures now logged instead of silently ignored
- Help Menu Sizing - Box height matches content, no unnecessary expansion
- Header Clipping - Help header stays visible on all terminal sizes
- Homebrew tap support - Install with
brew install itsdevcoffee/plum/plum - GoReleaser automation - Automated multi-platform releases via GitHub Actions
- Pre-built binaries - macOS (Intel/ARM), Linux (amd64/arm64), Windows (amd64/arm64)
- Version flag - Check version with
plum --versionorplum -v
- Release process now automated via GoReleaser
- Binaries include embedded version, commit hash, and build date
- Cross-platform distribution improved
0.1.0 - 2025-12-13
- Marketplace Discovery System - Browse and discover plugins from popular marketplaces even if not installed locally
- Dynamic Registry - Auto-fetches marketplace list from GitHub (
marketplaces.json) - Auto-Update Notifications - Shows alert when new marketplaces are available: "⚡ X new marketplace - Shift+U"
- Discover Filter Tab - New filter to show only plugins from uninstalled marketplaces with
[Discover]badge - Ready Filter - Renamed "Available" to "Ready" for plugins that are one command away from installation
- Manual Refresh - Press
Shift+Uto refresh marketplace registry and re-fetch all data - Arrow Key Navigation - Use
←and→for filter tab navigation (in addition to Tab/Shift+Tab) - Dual Copy Commands - Press
cto copy marketplace add command,yto copy plugin install command (for discoverable plugins) - 8 Popular Marketplaces in registry:
- claude-code-plugins-plus (254 plugins)
- claude-code-marketplace (10+ plugins)
- claude-code-plugins (official)
- mag-claude-plugins (4 plugins)
- dev-gom-plugins (15 plugins)
- feedmob-plugins (6 plugins)
- anthropic-agent-skills (official)
- wshobson-agents (65 plugins)
- Filter order: All → Discover → Ready → Installed (was All → Available → Installed)
- Detail view for discoverable plugins shows 2-step install instructions
- Notification displays in styled box aligned to right of header
- Registry cache refreshes every 6 hours, marketplace cache every 24 hours
- Orange/peach themed color palette with warm, earthy aesthetic
- Semantic color naming (PlumBright, TextSecondary, Success, etc.)
- Updated title: "Claude Plugin Manager"
- Professional screenshots showcasing discovery features
- New package:
internal/marketplace/with discovery, registry, cache, and GitHub fetching - Plugin struct adds
IsDiscoverablefield - Cache system:
~/.plum/cache/marketplaces/with TTL-based invalidation - Parallel fetching of marketplace data for fast startup
- Graceful fallback to hardcoded list if registry unavailable
- Smart comparison: compares against cached registry after first update
- Cross-platform path resolution with
CLAUDE_CONFIG_DIRsupport
- Initial release of Plum 🍑
- Fuzzy search across all Claude Code plugin marketplaces
- Filter plugins by All, Available, or Installed status
- Two display modes: Card view (default) and Slim view
- Responsive UI with 4-tier breakpoint system adapting to terminal width
- Plugin detail view with comprehensive information
- One-click copy of plugin install commands to clipboard
- Built-in help menu with keyboard shortcuts reference
- Three transition styles: Instant, Zoom, and Slide Vertical
- Cross-platform support (Linux, macOS, Windows)
- Respects
CLAUDE_CONFIG_DIRenvironment variable - fzf-style keyboard navigation (Ctrl+j/k, Ctrl+p/n, etc.)
- Visual indicators for installed (●) vs available (○) plugins
- Spring-based smooth animations using Harmonica
- Support for multiple plugin marketplaces
- Metadata display: version, author, description, keywords, category, license, repository
- Built with Bubble Tea TUI framework
- Styled with Lip Gloss
- Dynamic configuration reading from
~/.claude/plugins/ - Reads
known_marketplaces.jsonandinstalled_plugins_v2.json - No hardcoded paths or plugin names - works for any Claude Code installation