Package Exports
- ruch
- ruch/dist/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (ruch) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
๐ Ruch CLI
Revolutionary React Development with Hexagonal Architecture & AI-Powered Assistance
Ruch CLI is a revolutionary command-line tool that transforms React TypeScript development by implementing clean hexagonal architecture principles while providing unprecedented AI-powered assistance for consistent, maintainable code generation.
โจ Key Features
๐๏ธ Hexagonal Architecture Made Simple
- Complete domain structure generation with entities, ports, services, adapters, hooks, and UI
- Dependency inversion patterns built-in
- Domain isolation with clear boundaries
- Co-located testing strategy
๐ค AI-Powered Development (Flagship Feature)
- Revolutionary guide-ai command that teaches AI assistants your architecture
- Tool-specific configurations for Cursor, GitHub Copilot, Windsurf, and Juni
- Consistent code generation that respects hexagonal boundaries
- Architecture-aware suggestions from AI tools
๐งช Advanced Testing with MSW
- Realistic API simulation with Mock Service Worker
- Automatic handler generation for all domains
- Domain-isolated testing strategies
- Co-located test patterns
๐ Project Visualization
- Interactive dependency graphs with circular dependency detection
- Architecture health insights and metrics
- Real-time visualization of domain relationships
๐ Quick Start
Installation
Using npx (Recommended)
npx ruch create userGlobal Installation
# Using Bun (Recommended)
bun install -g ruch
# Using npm
npm install -g ruch
# Using yarn
yarn global add ruch
# Using pnpm
pnpm install -g ruch5-Minute Setup
# 1. Create your first domain
npx ruch create user
# 2. Generate service context with dependency injection
npx ruch context generate
# 3. Set up realistic testing with MSW
npx ruch msw init
npx ruch msw handlers
npx ruch msw mocks
# 4. Enable AI-powered development (FLAGSHIP)
npx ruch guide-ai
# 5. Visualize your architecture
npx ruch visualizeResult: Complete React application with hexagonal architecture, comprehensive testing setup, and AI documentation ready for development.
๐ Core Concepts
๐๏ธ Hexagonal Architecture Layers
Ruch CLI implements a simplified hexagonal architecture specifically designed for React applications:
graph TD
A[UI Components] --> B[Hooks]
B --> C[Services]
C --> D[Ports]
D --> E[Adapters]
E --> F[External APIs]
G[Entities] --> C
H[Tests] --> C
H --> E| Layer | Description | Location | Responsibilities |
|---|---|---|---|
| ๐๏ธ Entities | Business models | entities/ |
Data structures, domain types, validation rules |
| โ๏ธ Services | Business logic | services/ |
Pure business logic, domain operations, validation |
| ๐ Ports | Abstractions | ports/ |
Interfaces for external dependencies |
| ๐ง Adapters | Implementations | adapters/ |
API calls, external service implementations |
| โ๏ธ Hooks | React integration | hooks/ |
React Query hooks, state management |
| ๐จ UI | Presentation | ui/ |
React components, user interactions |
๐ฏ Architecture Principles
- Business Logic Isolation - ALL business logic MUST be in domain services
- No Direct Service Imports - Components ALWAYS use domain hooks
- Cross-Domain Communication - Only via ports/adapters patterns
- Co-Located Tests - Tests alongside implementation files
- Dependency Inversion - High-level modules don't depend on low-level modules
๐ ๏ธ CLI Commands Reference
๐๏ธ Domain Management
create <domain> - Create New Domain
# Create complete domain with hexagonal structure
npx ruch create user
# Create domain without UI components
npx ruch create analytics --without-ui
# Create API-only domain
npx ruch create notification --without-ui --without-storelist - List All Domains
npx ruch list
# or
npx ruch lsdelete <domain> - Delete Domain
# Safe delete with confirmation
npx ruch delete user
# Force delete without confirmation
npx ruch delete user --forceโ๏ธ Service Context Management
context generate - Generate Service Context
# Generate complete service context with dependency injection
npx ruch context generateCreates src/context/ServiceContext.tsx with:
- Service instantiation for all domains
- React Context Provider
useServiceshook- TypeScript interfaces
- Complete test coverage
context update - Update Context
# Add missing domains to existing context
npx ruch context update๐งช Mock Service Worker (MSW)
msw init - Initialize MSW
npx ruch msw initCreates:
src/mocks/browser.ts- Browser MSW setupsrc/mocks/server.ts- Node.js MSW setupsrc/setupTests.ts- Test configurationpublic/mockServiceWorker.js- Service worker
msw handlers - Generate Handlers
# Generate MSW handlers for all domains
npx ruch msw handlersmsw mocks - Generate Mock Data
# Generate realistic mock data templates
npx ruch msw mocksmsw update - Update MSW Configuration
# Update MSW for new domains
npx ruch msw update
# Update specific domain
npx ruch msw update user๐ค AI-Powered Development
guide-ai - Generate AI Documentation โญ FLAGSHIP FEATURE
Transform your development workflow by teaching AI assistants to understand and respect your hexagonal architecture.
# Generate complete AI documentation
npx ruch guide-ai
# Configure specific AI tools
npx ruch guide-ai --tools cursor,copilot,windsurf,juni
# Configure single tool
npx ruch guide-ai --tools cursorWhat guide-ai Creates:
| File | Purpose | AI Tool |
|---|---|---|
ruch-guide.json |
Complete project mapping | All tools |
GUIDE.md |
Human-readable documentation | All tools |
.cursorrules |
Cursor-specific configuration | Cursor |
.windsurfrules |
Windsurf configuration | Windsurf |
.juni/config.json |
Juni integration | Juni |
Before guide-ai:
// AI generates this (WRONG)
import { UserService } from '../domains/user/services';
function MyComponent() {
const userService = new UserService(); // โ Direct instantiation
const users = userService.getUsers(); // โ Blocking call
return <div>{users.map(...)}</div>;
}After guide-ai:
// AI generates this (CORRECT)
import { useUsers } from '../domains/user/hooks';
function MyComponent() {
const { data: users, isLoading, error } = useUsers(); // โ
Proper hook usage
if (isLoading) return <LoadingSpinner />;
if (error) return <ErrorMessage error={error} />;
return <div>{users?.map(...)}</div>;
}๐ Visualization & Analysis
visualize - Interactive Dependency Visualization
# Launch interactive visualization app
npx ruch visualize
# Custom port
npx ruch visualize --port 4000
# Export to JSON
npx ruch visualize --format json --output architecture.json
# Console output
npx ruch visualize --format console
# Don't auto-open browser
npx ruch visualize --no-openhttp-client - Generate HTTP Client
# Generate configured HTTP client with interceptors
npx ruch http-client๐๏ธ Generated Project Structure
When you create a domain, Ruch generates a complete hexagonal structure:
src/domains/user/
โโโ entities/
โ โโโ User.ts # Business models and types
โ โโโ UserProfile.ts # Related entities
โ โโโ index.ts # Barrel exports
โ โโโ User.test.ts # Entity tests
โโโ ports/
โ โโโ UserRepository.ts # Abstraction interfaces
โ โโโ index.ts # Port exports
โ โโโ UserRepository.test.ts
โโโ services/
โ โโโ UserService.ts # Pure business logic
โ โโโ index.ts # Service exports
โ โโโ UserService.test.ts # Service tests (with mocked ports)
โโโ adapters/
โ โโโ UserApiAdapter.ts # API implementation
โ โโโ index.ts # Adapter exports
โ โโโ UserApiAdapter.test.ts # Adapter tests (with MSW)
โโโ hooks/
โ โโโ useUsers.ts # React Query hooks
โ โโโ useCreateUser.ts # Mutation hooks
โ โโโ index.ts # Hook exports
โ โโโ useUsers.test.ts # Hook tests (with MSW)
โโโ ui/
โ โโโ UserList.tsx # Domain components
โ โโโ UserCard.tsx # Related components
โ โโโ index.ts # UI exports
โ โโโ UserList.test.tsx # Component tests (integration)
โโโ index.ts # Domain entry point๐ฏ Usage Workflows
๐ New Project Setup
# 1. Create core domains
npx ruch create user
npx ruch create product
npx ruch create order
# 2. Generate service context with dependency injection
npx ruch context generate
# 3. Set up comprehensive testing
npx ruch msw init
npx ruch msw handlers
npx ruch msw mocks
# 4. Enable AI-powered development (FLAGSHIP)
npx ruch guide-ai
# 5. Visualize architecture
npx ruch visualize๐ Incremental Development
# Add new domain
npx ruch create payment
# Update existing configurations
npx ruch context update
npx ruch msw update
# Refresh AI documentation
npx ruch guide-ai
# Verify architecture
npx ruch visualize๐ข Enterprise Development Workflow
# Create multiple business domains
npx ruch create user
npx ruch create product
npx ruch create inventory
npx ruch create order
npx ruch create payment
npx ruch create notification
# Generate complete infrastructure
npx ruch context generate
npx ruch msw init
npx ruch msw handlers
npx ruch msw mocks
npx ruch http-client
# Enable AI assistance for team development
npx ruch guide-ai --tools cursor,copilot,windsurf,juni
# Monitor architecture health
npx ruch visualize --format console๐งช Testing Strategy
Ruch CLI implements a comprehensive testing strategy across all architectural layers:
๐๏ธ Entity Testing (Pure)
describe('User Entity', () => {
it('should create valid user', () => {
const user = User.create({
email: 'john@example.com',
name: 'John Doe',
});
expect(user.id).toBeDefined();
expect(user.email).toBe('john@example.com');
});
});โ๏ธ Service Testing (With Mock Ports)
describe('UserService', () => {
it('should create user with valid data', async () => {
const mockRepository = createMockUserRepository();
const userService = new UserService(mockRepository);
const result = await userService.createUser(userData);
expect(result.email).toBe(userData.email);
expect(mockRepository.save).toHaveBeenCalled();
});
});๐ง Adapter Testing (With MSW)
describe('UserApiAdapter', () => {
it('should save user via API', async () => {
server.use(
http.post('/api/users', () => {
return HttpResponse.json(mockUser);
})
);
const result = await adapter.save(userData);
expect(result.id).toBe('generated-id');
});
});โ๏ธ Hook Testing (With MSW)
describe('useUsers', () => {
it('should fetch users successfully', async () => {
const { result } = renderHook(() => useUsers(), {
wrapper: createTestWrapper(),
});
await waitFor(() => {
expect(result.current.isSuccess).toBe(true);
});
});
});๐จ Component Testing (Integration)
describe('UserList', () => {
it('should display list of users', async () => {
render(<UserList />, { wrapper: createTestWrapper() });
await waitFor(() => {
expect(screen.getByText('Users')).toBeInTheDocument();
});
});
});๐ ๏ธ Development
System Requirements
- Node.js: 18.0 or higher
- Package Manager: Bun (recommended), npm, yarn, or pnpm
- Operating System: Windows, macOS, or Linux
- TypeScript: 4.9 or higher
Local Development Setup
# Clone the repository
git clone https://github.com/yourusername/ruch.git
cd ruch
# Install dependencies with Bun (recommended)
bun install
# Build the project
bun run build
# Make executable for local testing
chmod +x dist/index.js
# Test local installation
./dist/index.js --versionAvailable Scripts
# Build the project
bun run build
# Run comprehensive test suite
bun test
# Run tests in watch mode
bun test --watch
# Lint code with ESLint
bun run lint
# Format code with Prettier
bun run format
# Type checking
bun run type-check
# Run all quality checks
bun run qualityProject Structure
ruch/
โโโ src/
โ โโโ commands/ # CLI command implementations
โ โ โโโ create.ts # Domain creation
โ โ โโโ context.ts # Service context management
โ โ โโโ msw.ts # MSW configuration
โ โ โโโ guide-ai.ts # AI documentation (flagship)
โ โ โโโ visualize.ts # Architecture visualization
โ โโโ services/ # Internal CLI services
โ โโโ templates/ # Code generation templates
โ โโโ utils/ # Shared utilities
โ โโโ index.ts # CLI entry point
โโโ tests/ # Comprehensive test suite
โโโ templates/ # Domain templates
โโโ docs/ # Additional documentation๐ฏ Best Practices
๐๏ธ Domain Design
- Keep domains focused and cohesive around business capabilities
- Avoid domain dependencies - use events for cross-domain communication
- Define clear boundaries - each domain should be independently deployable
- Use consistent naming - follow established conventions across domains
๐ง Code Organization
- Co-locate tests with implementation files
- Use barrel exports (
index.ts) for clean imports - Follow naming conventions - consistent across all domains
- Separate concerns between architectural layers
๐งช Testing Philosophy
- Test each layer in isolation with appropriate mocking strategies
- Use MSW for realistic API testing instead of basic mocks
- Write integration tests for complete user flows
- Mock external dependencies at the adapter layer
๐ค AI Development Workflow
- Always regenerate guide-ai after creating new domains
- Keep AI documentation current with architectural changes
- Use consistent patterns that AI can learn and replicate
- Leverage AI for boilerplate generation while maintaining quality
๐ Real-World Examples
E-Commerce Application
# Create complete e-commerce domain structure
npx ruch create user # User authentication & management
npx ruch create product # Product catalog & inventory
npx ruch create cart # Shopping cart functionality
npx ruch create order # Order processing & tracking
npx ruch create payment # Payment processing
npx ruch create notification # Email & SMS notifications
# Generate infrastructure
npx ruch context generate
npx ruch msw init
npx ruch msw handlers
npx ruch msw mocks
# Enable AI-powered development for team
npx ruch guide-ai --tools cursor,copilot,windsurf,juni
# Verify architecture integrity
npx ruch visualizeSaaS Platform
# Create multi-tenant SaaS domains
npx ruch create tenant # Multi-tenancy management
npx ruch create user # User & role management
npx ruch create subscription # Billing & subscriptions
npx ruch create analytics # Usage analytics
npx ruch create support # Customer support
npx ruch create integration # Third-party integrations
# Full setup
npx ruch context generate
npx ruch msw init && npx ruch msw handlers && npx ruch msw mocks
npx ruch guide-ai
npx ruch visualize --format console๐ง Advanced Configuration
Custom Templates (Coming Soon)
# Use custom domain templates
npx ruch create user --template enterprise
# Generate with custom configurations
npx ruch create product --config ./ruch.config.jsCI/CD Integration
# .github/workflows/architecture-check.yml
name: Architecture Health Check
on: [push, pull_request]
jobs:
architecture-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: oven-sh/setup-bun@v1
- run: bun install -g ruch
- run: ruch visualize --format console
- run: ruch guide-ai --tools cursor # Keep AI docs updated๐จ Important Considerations
MSW Customization Required
โ ๏ธ CRITICAL: All generated MSW handlers and mock data are templates and MUST be customized for your specific API and business logic.
Recommended MSW Workflow:
- Initialize:
npx ruch msw init - Generate templates:
npx ruch msw handlers && npx ruch msw mocks - ๐ฅ CUSTOMIZE: Adapt endpoints, authentication, validation, business data
- Test thoroughly: Verify MSW setup with your application
- Maintain: Use
npx ruch msw updatewhen domains change
Architecture Rules (Enforced by guide-ai)
- Business Logic Isolation: ALL business logic MUST be in domain services
- No Direct Service Imports: Components ALWAYS use domain hooks
- Cross-Domain Communication: Only via ports/adapters or events
- Co-Located Tests: Tests MUST be alongside implementation files
- Dependency Direction: Inner layers never depend on outer layers
๐ค Contributing
We welcome contributions! Please see our Contributing Guide for details.
Development Workflow
- Fork & Clone: Fork the repository and clone your fork
- Create Branch:
git checkout -b feature/your-feature-name - Develop: Make your changes with tests
- Test:
bun test- ensure all tests pass - Quality Check:
bun run quality- linting, formatting, type checking - Commit: Use conventional commits
- Push & PR: Push to your fork and create a pull request
Reporting Issues
- Bug Reports: Use the bug report template
- Feature Requests: Use the feature request template
- Security Issues: Email security@ruch.dev
๐ License
MIT License - see LICENSE for details.
๐ Recognition
Built with โค๏ธ for the React community by developers who believe in clean architecture and AI-assisted development.
Star โญ this repository if you find it helpful!
๐ Transform Your React Development Today
Get Started โข Documentation โข Examples โข Community