{"id":31861944,"url":"https://github.com/devzolo/uiget","last_synced_at":"2025-10-12T17:27:53.726Z","repository":{"id":312477957,"uuid":"1047005688","full_name":"devzolo/uiget","owner":"devzolo","description":null,"archived":false,"fork":false,"pushed_at":"2025-09-01T01:31:14.000Z","size":107,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-08T18:14:56.991Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/devzolo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-29T15:26:50.000Z","updated_at":"2025-09-28T05:33:53.000Z","dependencies_parsed_at":"2025-08-30T23:39:50.115Z","dependency_job_id":null,"html_url":"https://github.com/devzolo/uiget","commit_stats":null,"previous_names":["devzolo/uiget"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/devzolo/uiget","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devzolo%2Fuiget","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devzolo%2Fuiget/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devzolo%2Fuiget/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devzolo%2Fuiget/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devzolo","download_url":"https://codeload.github.com/devzolo/uiget/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devzolo%2Fuiget/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279012191,"owners_count":26085079,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-12T02:00:06.719Z","response_time":53,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-10-12T17:27:52.897Z","updated_at":"2025-10-12T17:27:53.720Z","avatar_url":"https://github.com/devzolo.png","language":"Rust","readme":"# uiget 🚀\n\nA modern and efficient CLI tool in Rust for managing shadcn/ui components from multiple registries with advanced interactive interface.\n\n[![Rust](https://img.shields.io/badge/rust-%23000000.svg?style=for-the-badge\u0026logo=rust\u0026logoColor=white)](https://www.rust-lang.org/)\n[![MIT License](https://img.shields.io/badge/License-MIT-green.svg?style=for-the-badge)](https://choosealicense.com/licenses/mit/)\n\n## ✨ Features\n\n- 🎯 **Advanced interactive menu** with category selection (UI, Blocks, Hooks, Libraries)\n- 📦 **Multiple registry support** by namespace with flexible configuration\n- 🔄 **Automatic dependency resolution** with intelligent detection\n- ⚡ **Colorful and intuitive interface** with visual status indicators\n- 🛠️ **Flexible configuration** of aliases and project structure\n- 🔍 **Smart search** of components across all registries\n- 📊 **Outdated component detection** with content comparison\n- ✅ **Compatible with shadcn-svelte** and shadcn/ui schemas\n- 🔧 **Full TypeScript support** with automatic path resolution\n- 🌐 **Authenticated registries** (custom headers and parameters)\n- 📝 **Intelligent placeholder processing** ($UTILS$, $COMPONENTS$, etc.)\n- 🎨 **Style support** (new-york, default) for compatible registries\n\n## 📦 Installation\n\n### Via Cargo (Recommended)\n\n```bash\n# Install directly from repository\ncargo install --git https://github.com/devzolo/uiget\n\n# Or install locally after cloning\ngit clone https://github.com/devzolo/uiget\ncd uiget\ncargo install --path .\n```\n\n### Manual Compilation\n\n```bash\n# Clone the repository\ngit clone https://github.com/devzolo/uiget\ncd uiget\n\n# Build and install\ncargo build --release\ncargo install --path .\n```\n\n### Installation Verification\n\n```bash\n# Check if uiget command is available\nuiget --help\n\n# Installed version\nuiget --version\n```\n\n## 🚀 Quick Start\n\n### 1. Initialize Configuration\n\n```bash\n# Create default configuration file\nuiget init\n\n# With custom options\nuiget init --base-color blue --css \"src/styles.css\"\n```\n\n### 2. Interactive Menu\n\n```bash\n# Open interactive menu for component selection\nuiget add\n```\n\n### 3. Add Specific Components\n\n```bash\n# Add a specific component\nuiget add button\n\n# Add from a specific registry\nuiget add button --registry custom\n```\n\n## 🎯 Advanced Interactive Menu\n\n`uiget` offers a modern interactive interface that allows efficient component selection:\n\n### Category Selection\n\nRun `uiget add` to open the main menu:\n\n```bash\n? What would you like to do?\n❯ 🔍 Browse and select individual components\n  📦 Select ALL UI Components (52 items)     ← Select ALL instantly\n  🧩 Select ALL Blocks (131 items)          ← Select ALL instantly\n  🪝 Select ALL Hooks (1 items)             ← Select ALL instantly\n  📚 Select ALL Libraries (1 items)         ← Select ALL instantly\n  ⚙️ Select ALL Other (5 items)             ← Select ALL instantly\n  ❌ Cancel\n```\n\n### Visual Status Indicators\n\nComponents are displayed with clear visual indicators:\n\n- **✓** - Component installed and up-to-date\n- **⚠** - Component installed but outdated\n- **→** - Component not installed\n\n### How to Use\n\n1. **↑↓** - Navigate between options\n2. **Enter** - Select complete category or open individual browser\n3. **Space** - Mark/unmark individual components (in browser mode)\n4. **Final Enter** - Confirm and install selection\n\n### Preview and Confirmation\n\n```bash\n✅ Selected ALL ui (52 components)\nComponents to be installed:\n  1. accordion      11. card\n  2. alert          12. checkbox\n  3. alert-dialog   13. collapsible\n  4. aspect-ratio   14. command\n  5. avatar         15. context-menu\n  ... and 37 more\n\n? Install all 52 components? (Y/n)\n```\n\n### Multiple Registry Selection\n\nIf you have multiple registries configured, uiget will automatically ask which one to use:\n\n```bash\n? Select a registry:\n❯ default (shadcn-svelte)\n  shadcn-ui (shadcn/ui)\n  custom (my-registry)\n```\n\n## 📋 Available Commands\n\n### Initial Configuration\n\n```bash\n# Initialize project\nuiget init [--force] [--base-color COLOR] [--css PATH]\n\n# Example with custom options\nuiget init --base-color emerald --css \"src/styles/globals.css\"\n```\n\n### Registry Management\n\n```bash\n# Add new registry\nuiget registry add registry-name https://my-registry.com\n\n# List configured registries\nuiget registry list\n\n# Test registry connection\nuiget registry test registry-name\n\n# Remove registry\nuiget registry remove registry-name\n```\n\n### Components\n\n```bash\n# Interactive menu (recommended)\nuiget add\n\n# Add specific component\nuiget add button\n\n# Add from specific registry\nuiget add button --registry custom\n\n# Add using namespace (@namespace/component)\nuiget add @shadcn-ui/button\n\n# Add forcing overwrite\nuiget add button --force\n\n# Add without dependencies\nuiget add button --skip-deps\n\n# Search components in all registries\nuiget search \"data table\"\n\n# Search in specific registry\nuiget search \"form\" --registry shadcn-ui\n\n# List all available components\nuiget list\n\n# List from specific registry\nuiget list --registry custom\n\n# Detailed component information\nuiget info button\n\n# Information from specific registry\nuiget info button --registry custom\n\n# Remove component (in development)\nuiget remove button\n\n# Check outdated components\nuiget outdated\n\n# Check outdated in specific registry\nuiget outdated --registry custom\n\n# Update component (force reinstall)\nuiget add button --force\n```\n\n### Advanced Features\n\n```bash\n# Use specific configuration file\nuiget --config ./custom-config.json add button\n\n# Verbose mode for debugging\nuiget --verbose add button\n\n# Combine options\nuiget --verbose --config ./config.json add button --force --skip-deps\n```\n\n## ⚙️ Configuration\n\nThe `uiget.json` file is created in the project directory with the following structure:\n\n```json\n{\n  \"$schema\": \"https://shadcn-svelte.com/schema.json\",\n  \"style\": \"default\",\n  \"tailwind\": {\n    \"css\": \"src/app.css\",\n    \"baseColor\": \"slate\",\n    \"config\": \"tailwind.config.js\"\n  },\n  \"aliases\": {\n    \"components\": \"$lib/components\",\n    \"utils\": \"$lib/utils\",\n    \"ui\": \"$lib/components/ui\",\n    \"hooks\": \"$lib/hooks\",\n    \"lib\": \"$lib\"\n  },\n  \"registries\": {\n    \"default\": \"https://shadcn-svelte.com/registry/{name}.json\",\n    \"shadcn-ui\": {\n      \"url\": \"https://ui.shadcn.com/registry/{style}/{name}.json\",\n      \"params\": {\n        \"version\": \"latest\"\n      },\n      \"headers\": {\n        \"User-Agent\": \"uiget-cli\"\n      }\n    }\n  },\n  \"typescript\": {\n    \"config\": \"tsconfig.json\"\n  }\n}\n```\n\n### Advanced Registry Configuration\n\nuiget supports two registry configuration formats:\n\n#### Simple Format (String)\n\n```json\n{\n  \"registries\": {\n    \"my-registry\": \"https://api.mysite.com/components/{name}.json\"\n  }\n}\n```\n\n#### Advanced Format (Object)\n\n```json\n{\n  \"registries\": {\n    \"registry-auth\": {\n      \"url\": \"https://private-registry.com/api/{name}.json\",\n      \"params\": {\n        \"api_key\": \"your-api-key\",\n        \"version\": \"v2\"\n      },\n      \"headers\": {\n        \"Authorization\": \"Bearer your-token\",\n        \"Content-Type\": \"application/json\"\n      }\n    }\n  }\n}\n```\n\n### TypeScript Configuration\n\nuiget automatically resolves TypeScript paths:\n\n```json\n{\n  \"typescript\": true, // Uses default tsconfig.json\n  \"typescript\": {\n    // Or specifies custom file\n    \"config\": \"jsconfig.json\"\n  }\n}\n```\n\n### Key Differences from Original Schema\n\n- **`registry` → `registries`**: Support for multiple registries by namespace\n- **Advanced configuration**: Custom headers and parameters for authentication\n- **TypeScript resolution**: Automatic integration with tsconfig.json\n- **Smart placeholders**: Processing of $UTILS$, $COMPONENTS$, etc.\n- **Style support**: Compatibility with registries that use styles (new-york, default)\n\n## 🏗️ Project Structure\n\n```tree\nsrc/\n├── main.rs          # Main entry point\n├── cli.rs           # CLI command definitions\n├── config.rs        # Configuration structures\n├── registry.rs      # Registry client\n└── installer.rs     # Component installation logic\n```\n\n## 📚 Practical Examples\n\n### Multi-Registry Configuration\n\n```bash\n# Add different registries\nuiget registry add shadcn-ui https://ui.shadcn.com/registry/{style}/{name}.json\nuiget registry add my-components https://my-components.dev/api/{name}.json\n\n# Test registry connections\nuiget registry test shadcn-ui\nuiget registry test my-components\n\n# Install from specific registries\nuiget add button --registry shadcn-ui\nuiget add custom-card --registry my-components\n\n# Use @namespace/component format\nuiget add @shadcn-ui/button\nuiget add @my-components/custom-card\n```\n\n### Advanced Search and Information\n\n```bash\n# Search in all registries\nuiget search \"form\"\n\n# Search in specific registry\nuiget search \"table\" --registry shadcn-ui\n\n# View detailed information\nuiget info data-table\nuiget info button --registry shadcn-ui\n\n# List components by category\nuiget list --registry shadcn-ui\n```\n\n### Typical Development Workflow\n\n```bash\n# 1. Initialize project with custom configurations\nuiget init --base-color violet --css \"src/styles/globals.css\"\n\n# 2. Add custom registry with authentication\nuiget registry add company https://components.company.com/api/{name}.json\n\n# 3. Use interactive menu to install components\nuiget add\n# Select \"📦 Select ALL UI Components\" to install all at once\n\n# 4. Check status and updates\nuiget list                    # View all available components\nuiget outdated               # Check outdated components\nuiget add button --force     # Update specific component\n\n# 5. Debug and troubleshooting\nuiget --verbose add card     # Verbose mode for debugging\n```\n\n### Advanced Scenarios\n\n```bash\n# Working with TypeScript\n# uiget automatically resolves paths from tsconfig.json\nuiget add button  # Placeholders like $UTILS$ are resolved automatically\n\n# Configuration for Svelte projects\nuiget init --components \"$lib/components\" --utils \"$lib/utils\"\n\n# Configuration for React/Next.js projects\nuiget init --components \"./components\" --utils \"./lib/utils\"\n\n# Use registry with specific style\nuiget registry add shadcn-ny https://ui.shadcn.com/registry/new-york/{name}.json\nuiget add button --registry shadcn-ny\n\n# Install without dependencies (useful for development)\nuiget add complex-component --skip-deps\n```\n\n## 🔧 TypeScript Integration\n\nuiget offers full TypeScript support with advanced features:\n\n### Automatic Path Resolution\n\nuiget automatically reads your `tsconfig.json` and resolves path mappings:\n\n```json\n// tsconfig.json\n{\n  \"compilerOptions\": {\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"@/*\": [\"./src/*\"],\n      \"@/components/*\": [\"./src/components/*\"],\n      \"@/utils/*\": [\"./src/lib/utils/*\"]\n    }\n  }\n}\n```\n\n```json\n// uiget.json\n{\n  \"aliases\": {\n    \"components\": \"@/components\",\n    \"utils\": \"@/utils\",\n    \"ui\": \"@/components/ui\"\n  }\n}\n```\n\n### Intelligent Import Processing\n\nuiget automatically:\n\n1. **Removes .js extensions** in TypeScript projects\n2. **Resolves placeholders** based on configuration\n3. **Normalizes paths** for the local file system\n\n```typescript\n// Before (from registry)\nimport { cn } from \"$UTILS$.js\";\nimport Button from \"$COMPONENTS$/ui/button.js\";\n\n// After (processed by uiget)\nimport { cn } from \"@/utils\";\nimport Button from \"@/components/ui/button\";\n```\n\n### Extends Support\n\nuiget supports TypeScript configurations with `extends`:\n\n```json\n// tsconfig.json\n{\n  \"extends\": \"./tsconfig.base.json\",\n  \"compilerOptions\": {\n    \"paths\": {\n      \"@/*\": [\"./src/*\"]\n    }\n  }\n}\n```\n\n## 🔧 Registry API\n\nRegistries must implement the following structure to be compatible with uiget:\n\n### Supported Endpoints\n\n```bash\n# Component index (multiple formats supported)\nGET /registry/index.json                    # Array format (shadcn-svelte)\nGET /r/index.json                          # shadcn/ui format\nGET /{style}/index.json                    # With style support\n\n# Individual components\nGET /registry/{name}.json                  # Basic format\nGET /registry/{style}/{name}.json          # With style\nGET /api/components/{name}.json            # Custom API\n```\n\n### Index Format\n\nuiget supports two index formats:\n\n#### Array Format (shadcn-svelte)\n\n```json\n[\n  {\n    \"name\": \"button\",\n    \"type\": \"registry:ui\",\n    \"registryDependencies\": [\"utils\"],\n    \"devDependencies\": [\"@types/node\"]\n  }\n]\n```\n\n#### Object Format (shadcn/ui)\n\n```json\n{\n  \"button\": {\n    \"name\": \"button\",\n    \"type\": \"registry:ui\",\n    \"registryDependencies\": [\"utils\"]\n  }\n}\n```\n\n### Component Format\n\n```json\n{\n  \"name\": \"button\",\n  \"type\": \"registry:ui\",\n  \"registryDependencies\": [\"utils\", \"cn\"],\n  \"devDependencies\": [\"@types/react\"],\n  \"files\": [\n    {\n      \"target\": \"ui/button/button.tsx\",\n      \"content\": \"import { cn } from '$UTILS$';\\n\\n// Component...\",\n      \"type\": \"registry:ui\"\n    },\n    {\n      \"target\": \"ui/button/index.ts\",\n      \"content\": \"export { Button } from './button';\"\n    }\n  ]\n}\n```\n\n### Supported Placeholders\n\nuiget automatically processes the following placeholders:\n\n- **`$UTILS$`** - Resolved to the configured utils alias\n- **`$COMPONENTS$`** - Resolved to the configured components alias\n- **`$HOOKS$`** - Resolved to the configured hooks alias\n- **`$LIB$`** - Resolved to the configured lib alias\n\n### Style Support\n\nFor registries that support multiple styles (like shadcn/ui):\n\n```json\n{\n  \"registries\": {\n    \"shadcn-default\": \"https://ui.shadcn.com/registry/default/{name}.json\",\n    \"shadcn-ny\": \"https://ui.shadcn.com/registry/new-york/{name}.json\"\n  }\n}\n```\n\n### Authentication\n\nFor private registries, use the advanced format:\n\n```json\n{\n  \"registries\": {\n    \"private-registry\": {\n      \"url\": \"https://api.company.com/components/{name}.json\",\n      \"headers\": {\n        \"Authorization\": \"Bearer your-token-here\"\n      },\n      \"params\": {\n        \"version\": \"latest\"\n      }\n    }\n  }\n}\n```\n\n## 🧪 Development\n\n### Prerequisites\n\n- Rust 1.70+\n- Cargo\n\n### Development Commands\n\n```bash\n# Run in debug mode\ncargo run -- --help\n\n# Run tests\ncargo test\n\n# Run with debug logs\nRUST_LOG=debug cargo run -- --verbose list\n\n# Check linting\ncargo clippy\n\n# Format code\ncargo fmt\n\n# Optimized build\ncargo build --release\n```\n\n### Test Structure\n\n```bash\n# Run all tests\ncargo test\n\n# Specific tests with output\ncargo test test_config_loading -- --nocapture\n\n# Tests with logs\nRUST_LOG=debug cargo test\n```\n\n## 🤝 Contributing\n\n1. **Fork** the project\n2. **Create** a branch for your feature\n\n   ```bash\n   git checkout -b feature/new-feature\n   ```\n\n3. **Commit** your changes\n\n   ```bash\n   git commit -am 'feat: add new feature'\n   ```\n\n4. **Push** to the branch\n\n   ```bash\n   git push origin feature/new-feature\n   ```\n\n5. **Open** a Pull Request\n\n### Contribution Guidelines\n\n- Follow commit conventions ([Conventional Commits](https://www.conventionalcommits.org/))\n- Add tests for new features\n- Keep code formatted with `cargo fmt`\n- Run `cargo clippy` to check warnings\n\n## 📋 Implementation Status\n\n### ✅ Implemented Features\n\n- ✅ **Advanced interactive menu** with automatic categorization\n- ✅ **Multiple registries** with namespace support\n- ✅ **Automatic dependency resolution**\n- ✅ **Colorful interface** with status indicators\n- ✅ **Flexible configuration** of aliases and structure\n- ✅ **Smart search** across all registries\n- ✅ **Outdated component detection**\n- ✅ **Full TypeScript support** with path resolution\n- ✅ **Authenticated registries** (headers/params)\n- ✅ **Placeholder processing** ($UTILS$, $COMPONENTS$, etc.)\n- ✅ **Style support** (new-york, default)\n- ✅ **@namespace/component format**\n- ✅ **shadcn-svelte and shadcn/ui compatibility**\n- ✅ **Automatic .js extension removal** in TypeScript\n\n### 🚧 In Development\n\n- 🚧 **Update command** (currently uses `add --force`)\n- 🚧 **Remove command** (basic implementation)\n\n### 📋 Future Roadmap\n\n- [ ] Intelligent component caching\n- [ ] Project template support\n- [ ] Plugin system for extensions\n- [ ] Web interface for management\n- [ ] VS Code integration\n- [ ] Native React/Vue registry support\n- [ ] Configuration backup and restore\n- [ ] Component versioning\n- [ ] Visual update diff\n\n## 🐛 Reporting Bugs\n\nFound a bug? [Open an issue](https://github.com/devzolo/uiget/issues) with:\n\n- Detailed problem description\n- Steps to reproduce\n- uiget version (`uiget --version`)\n- Operating system\n- Configuration file (without sensitive data)\n\n## 📄 License\n\nThis project is licensed under the [MIT License](LICENSE) - see the LICENSE file for details.\n\n## 🙏 Acknowledgments\n\n- [shadcn/ui](https://ui.shadcn.com/) for inspiration\n- [shadcn-svelte](https://www.shadcn-svelte.com/) for schema reference\n- Rust community for excellent libraries\n\n---\n\n\u003cdiv align=\"center\"\u003e \nMade with ❤️ in Rust\n\u003c/div\u003e\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevzolo%2Fuiget","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevzolo%2Fuiget","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevzolo%2Fuiget/lists"}