1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152# compadcn
A powerful CLI tool for installing and managing ShadCN UI components with preset functionality.
## Features
- **Easy component installation** - Add ShadCN components with a single command
- **Smart linting** - Find and remove unused components from your project
- **Import cleanup** - Automatically removes imports when components are deleted
- **Dependency removal** - Optionally remove unused dependencies when components are deleted
- **Custom presets** - Create and save your own component collections
## Installation
```bash
npm install -g compadcn
# or
pnpm add -g compadcn
# or
yarn global add compadcn
```
## Commands
### `compadcn add [components...]`
Add ShadCN components to your project.
```bash
# Interactive mode - select components from a non installed components list
compadcn add
# Add specific components
compadcn add button card dialog
```
### `compadcn remove [components...]`
Remove ShadCN components from your project.
```bash
# Interactive mode - select installed components to remove
compadcn remove
# Remove specific components
compadcn remove button card
```
**Features:**
- Interactive removal with confirmation
- Dependency conflict detection
- Automatic import cleanup from your codebase
- Optional dependency removal
- Validates internal dependencies before removal
### `compadcn lint`
Find and remove unused ShadCN components from your project.
```bash
compadcn lint
```
**Features:**
- Scans your entire codebase for component usage
- Identifies unused components
- Option to automatically remove unused components
- Provides removal commands for manual cleanup
### `compadcn preset`
Manage component presets - collections of commonly used components.
```bash
# Interactive preset manager
compadcn preset
```
#### Preset Subcommands
```bash
# List all available presets
compadcn preset list
compadcn preset list --builtin # Show only builtin presets
compadcn preset list --custom # Show only custom presets
# Show components in a preset
compadcn preset show core
compadcn preset show "My Custom Preset"
# Install all components from a preset
compadcn preset install dashboard
compadcn preset install mobile
# Create a custom preset
compadcn preset create "my-preset" button card input
compadcn preset create "my-preset" --description "My custom components"
compadcn preset create "my-preset" --base core,form # Extend multiple existing presets
compadcn preset create "dashboard-mobile" --base dashboard,mobile --description "Mobile dashboard components"
# Delete a custom preset
compadcn preset delete "my-preset"
```
## Requirements
- Node.js 18.0.0 or higher
- A ShadCN project with `components.json` file
- Package manager: npm, pnpm, yarn, or bun
## How It Works
1. **Component Detection**: Reads your `components.json` file to understand your project structure
2. **Package Manager Detection**: Automatically detects your package manager from lock files
3. **Smart Installation**: Uses the appropriate package manager to install components
4. **Usage Scanning**: Analyzes your codebase to find component usage patterns
5. **Dependency Management**: Handles both external and internal component dependencies
## File Structure
compadcn works with the standard ShadCN project structure:
```
your-project/
โโโ components.json # ShadCN configuration
โโโ src/
โ โโโ components/
โ โโโ ui/ # Components directory
โ โโโ button.tsx
โ โโโ card.tsx
โ โโโ ...
โโโ package.json
```
## Custom Presets
Custom presets are stored in `~/.compadcn/custom-presets.json` and can be:
- Created from scratch
- Based on existing presets
- Shared across projects
## Contributing
1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request