claude-code-marketplace 0.8.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -56
- package/package.json +1 -1
- package/public/app.js +12 -1
- package/public/index.html +1 -1
- package/public/sw.js +1 -1
- package/server.js +7 -1
package/README.md
CHANGED
|
@@ -1,89 +1,53 @@
|
|
|
1
1
|
# Claude Code Marketplace
|
|
2
2
|
|
|
3
|
-
A web-based dashboard for browsing, installing, and managing [Claude Code](https://docs.anthropic.com/en/docs/claude-code) plugins across multiple marketplaces.
|
|
4
|
-
|
|
5
3
|
[](https://www.npmjs.com/package/claude-code-marketplace)
|
|
6
4
|
[](LICENSE)
|
|
7
5
|
[](https://www.npmjs.com/package/claude-code-marketplace)
|
|
8
6
|
|
|
9
|
-
|
|
10
|
-
<img src="assets/main-dark.png" alt="Marketplace — dark theme" width="100%">
|
|
11
|
-
</p>
|
|
12
|
-
|
|
13
|
-
<details>
|
|
14
|
-
<summary>Light theme & file preview</summary>
|
|
15
|
-
|
|
16
|
-
<p align="center">
|
|
17
|
-
<img src="assets/main-light.png" alt="Marketplace — light theme" width="100%">
|
|
18
|
-
</p>
|
|
7
|
+
**[Live Demo & Docs](https://nikiforovall.blog/claude-code-marketplace/)**
|
|
19
8
|
|
|
20
|
-
|
|
21
|
-
<img src="assets/prevew-light.png" alt="Plugin file preview" width="100%">
|
|
22
|
-
</p>
|
|
9
|
+
> Browse, install, and manage [Claude Code](https://docs.anthropic.com/en/docs/claude-code) plugins across multiple marketplaces.
|
|
23
10
|
|
|
24
|
-
|
|
11
|
+

|
|
25
12
|
|
|
26
|
-
##
|
|
13
|
+
## Getting Started
|
|
27
14
|
|
|
28
15
|
```bash
|
|
29
16
|
npx claude-code-marketplace --open
|
|
30
17
|
```
|
|
31
18
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
npx claude-code-marketplace --port 8080
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
### Options
|
|
39
|
-
|
|
40
|
-
```
|
|
41
|
-
--port <number> Custom port (default: 3542)
|
|
42
|
-
--project <path> Project directory for project-scoped plugins
|
|
43
|
-
--open Open browser on start
|
|
44
|
-
```
|
|
19
|
+
That's it — the dashboard reads your `~/.claude/plugins/` registry and opens in the browser. All install/uninstall/enable/disable operations delegate to the official `claude plugin` CLI, so Claude Code must be installed and on your PATH.
|
|
45
20
|
|
|
46
21
|
## Features
|
|
47
22
|
|
|
48
23
|
- **Multi-marketplace browser** — aggregate plugins from GitHub repos, git URLs, and local directories
|
|
49
|
-
- **Scope management** — install, enable, and disable plugins per scope (user / project / local)
|
|
24
|
+
- **Scope management** — install, enable, and disable plugins per scope, with `U`/`P`/`L` state badges (user / project / local)
|
|
50
25
|
- **Component inspection** — browse skills, commands, agents, MCP servers, hooks, and LSP servers inside each plugin
|
|
51
26
|
- **File preview** — read plugin source files directly in the browser with syntax highlighting
|
|
27
|
+
- **Full catalog view** — marketplace info panel shows every plugin a source offers, installed or not
|
|
28
|
+
- **User & project customizations** — your local `~/.claude/` and `./.claude/` skills, commands, agents, and hooks appear as browsable virtual marketplaces
|
|
52
29
|
- **Marketplace actions** — add, update, and remove marketplace sources
|
|
53
|
-
- **
|
|
54
|
-
- **Dark / light theme** — styled with IBM Plex Mono, orange accent palette
|
|
30
|
+
- **17 color themes** — Ember, Gruvbox, Catppuccin, Tokyo Night, Dracula, Nord, and more — each in light and dark
|
|
55
31
|
- **Keyboard-first** — vim-style navigation, press `?` for shortcuts
|
|
32
|
+
- **PWA support** — installable as a standalone desktop app
|
|
56
33
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
The server reads `~/.claude/plugins/` to discover installed marketplaces and plugin registries. Each marketplace points to a directory containing a `.claude-plugin/marketplace.json` manifest listing available plugins.
|
|
60
|
-
|
|
61
|
-
The UI renders a tree of marketplaces with their plugins. Clicking a plugin opens its detail panel showing description, version, scope installation matrix, and filesystem-based component breakdown.
|
|
34
|
+

|
|
62
35
|
|
|
63
|
-
|
|
36
|
+

|
|
64
37
|
|
|
65
|
-
|
|
38
|
+

|
|
66
39
|
|
|
67
|
-
|
|
68
|
-
- **Backend** — Express.js serving static files + REST API
|
|
69
|
-
- **Styling** — CSS custom properties with dark/light theme support
|
|
70
|
-
- **Icons** — inline SVG (Feather-style, 24x24 viewBox)
|
|
71
|
-
- **Linter** — Biome with husky pre-commit hook
|
|
40
|
+
## Configuration
|
|
72
41
|
|
|
73
|
-
## Development
|
|
74
|
-
|
|
75
|
-
```bash
|
|
76
|
-
git clone https://github.com/NikiforovAll/claude-code-marketplace.git
|
|
77
|
-
cd claude-code-marketplace
|
|
78
|
-
npm install
|
|
79
|
-
npm run dev
|
|
80
42
|
```
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
43
|
+
--port <number> Custom port (default: 3542, falls back if busy)
|
|
44
|
+
--project <path> Project directory for project-scoped plugins
|
|
45
|
+
--dir <path> Custom Claude config dir (default: ~/.claude)
|
|
46
|
+
--open Open browser on start
|
|
85
47
|
```
|
|
86
48
|
|
|
49
|
+
The config dir can also be set via the `CLAUDE_CONFIG_DIR` environment variable.
|
|
50
|
+
|
|
87
51
|
## License
|
|
88
52
|
|
|
89
53
|
MIT
|
package/package.json
CHANGED
package/public/app.js
CHANGED
|
@@ -1356,6 +1356,11 @@ function setFocusedRow(index, rows) {
|
|
|
1356
1356
|
_focusedRowEl = row;
|
|
1357
1357
|
}
|
|
1358
1358
|
|
|
1359
|
+
function getFocusedPluginId() {
|
|
1360
|
+
if (_focusedRowEl?.dataset.rowType === 'plugin') return _focusedRowEl.dataset.rowId;
|
|
1361
|
+
return null;
|
|
1362
|
+
}
|
|
1363
|
+
|
|
1359
1364
|
function getFocusedIndex(rows) {
|
|
1360
1365
|
if (!focusedRowId) return -1;
|
|
1361
1366
|
return rows.findIndex((r) => r.dataset.rowId === focusedRowId);
|
|
@@ -1408,7 +1413,13 @@ function handleKeydown(e) {
|
|
|
1408
1413
|
|
|
1409
1414
|
if (matchKey(e, 'e')) {
|
|
1410
1415
|
e.preventDefault();
|
|
1411
|
-
|
|
1416
|
+
const id = selectedPluginId || getFocusedPluginId();
|
|
1417
|
+
if (id) {
|
|
1418
|
+
openFolderInEditor({ pluginId: id });
|
|
1419
|
+
toast('Opening in editor…', 'info');
|
|
1420
|
+
} else {
|
|
1421
|
+
toast('Select a plugin first', 'info');
|
|
1422
|
+
}
|
|
1412
1423
|
return;
|
|
1413
1424
|
}
|
|
1414
1425
|
|
package/public/index.html
CHANGED
|
@@ -138,7 +138,7 @@
|
|
|
138
138
|
<tr><td><kbd>?</kbd></td><td>Show keyboard shortcuts</td></tr>
|
|
139
139
|
<tr><td><kbd>/</kbd></td><td>Focus search</td></tr>
|
|
140
140
|
<tr><td><kbd>S</kbd></td><td>Focus scope filter</td></tr>
|
|
141
|
-
<tr><td><kbd>E</kbd></td><td>
|
|
141
|
+
<tr><td><kbd>E</kbd></td><td>Open plugin in editor</td></tr>
|
|
142
142
|
<tr><td><kbd>R</kbd></td><td>Refresh data</td></tr>
|
|
143
143
|
<tr><td><kbd>T</kbd></td><td>Toggle theme</td></tr>
|
|
144
144
|
<tr><td><kbd>U</kbd></td><td>Open user CLAUDE.md</td></tr>
|
package/public/sw.js
CHANGED
package/server.js
CHANGED
|
@@ -14,7 +14,13 @@ app.get('/hub-config', (_req, res) => {
|
|
|
14
14
|
|
|
15
15
|
app.use(express.static(path.join(__dirname, 'public')));
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
function getClaudeDir() {
|
|
18
|
+
const dir = getArg('dir') || process.env.CLAUDE_CONFIG_DIR || process.env.CLAUDE_DIR;
|
|
19
|
+
if (dir) return dir.startsWith('~') ? dir.replace('~', os.homedir()) : dir;
|
|
20
|
+
return path.join(os.homedir(), '.claude');
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
const CLAUDE_DIR = getClaudeDir();
|
|
18
24
|
const PLUGINS_DIR = path.join(CLAUDE_DIR, 'plugins');
|
|
19
25
|
|
|
20
26
|
let _marketplaceCache = null;
|