# Module Dependency Analysis
## Core Dependencies (Most Imported)
```
console::Renderable <-- Used by 45+ modules (core trait)
style::Style <-- Used by 50+ modules (everywhere)
text::Text <-- Used by 40+ modules (core type)
segment::Segment <-- Used by 35+ modules (rendering)
console::Console <-- Used by 30+ modules (rendering)
measure::Measurement <-- Used by 25+ modules (layout)
```
## Module Groupings by Dependency
### Group 1: Core Types (No internal deps, foundation)
- `style` - Zero dependencies, used everywhere
- `color` - Only uses std
- `segment` - Uses style, color
- `measure` - Uses segment
- `cells` - Zero dependencies
- `box_chars` - Zero dependencies
- `control` - Uses segment
### Group 2: Text Processing (Depends on Group 1)
- `text` - Uses style, segment, measure
- `markup` - Uses text, style
- `wrap` - Uses text
- `ansi` - Uses color, style, text
### Group 3: Console System (Depends on Group 1-2)
- `console` - Uses text, style, segment, measure, markup
- `terminal_theme` - Uses color, style
- `theme` - Uses style, terminal_theme
- `color_env` - Uses color, terminal_theme
### Group 4: Widgets (Depend on Group 1-3)
- `panel` - Uses console, style, text, segment
- `table` - Uses console, style, text, segment
- `tree` - Uses console, style, text
- `columns` - Uses console, table, text
- `layout` - Uses console, text
- `rule` - Uses console, style, text
- `accordion` - Uses console, style, text
- `badge` - Uses console, style, segment
### Group 5: Progress System (Depend on Group 1-4)
- `progress` - Uses console, live, table, text, style
- `progress_bar` - Uses style
- `live` - Uses console, text
- `live_render` - Uses console, text
- `status` - Uses console, spinner
- `spinner` - Uses style
- `spinners` - Uses spinner
### Group 6: Interactive (Depend on Group 1-5)
- `prompt` - Uses console, style, text
- `pager` - Uses console, text
### Group 7: Advanced Features (Optional)
- `syntax` - Uses console, style, text
- `markdown` - Uses console, style, text
- `gradient` - Uses color, style
- `figlet` - Uses text
- `canvas` - Uses console
- `sparkline` - Uses console, style
- `diff` - Uses console, style, text
- `csv_table` - Uses console, table
### Group 8: Async/HTTP (Feature-gated)
- `async` - Uses progress, live, text
- `http` - Uses progress, async
### Group 9: Error Handling (Feature-gated)
- `errors` - Core errors
- `eyre_handler` - Uses console, errors
- `miette_handler` - Uses console, errors
- `logging_handler` - Uses console
- `tracing_layer` - Uses console
### Group 10: Utilities (Mixed dependencies)
- `highlighter` - Uses text, style
- `emoji` - Uses text
- `emoji_replace` - Uses emoji_codes
- `filesize` - Zero dependencies
- `json` - Uses console (feature)
- `inspect` - Uses console
- `pretty` - Uses console
- `gradient` - Uses color
## Circular Dependencies to Watch
None detected! The codebase has clean layering:
```
Group 1 (Foundation)
↓
Group 2 (Text)
↓
Group 3 (Console)
↓
Group 4-5 (Widgets/Progress)
↓
Group 6+ (Interactive/Advanced)
```
## Restructuring Safety
Because dependencies flow in one direction, we can safely:
1. ✅ Move files between groups at the same level
2. ✅ Split files within their group
3. ✅ Reorganize feature-gated modules
4. ⚠️ Be careful when splitting Group 1 (foundation) - many dependencies
## Recommended Module Organization
Based on dependencies, the optimal structure is:
```
src/
├── core/ # Group 1: style, color, segment, measure, cells
│ └── foundation/
├── text/ # Group 2: text, markup, wrap, ansi
├── console/ # Group 3: console, terminal_theme, theme
├── widgets/ # Group 4: panel, table, tree, etc.
├── progress/ # Group 5: progress, live, status
├── interactive/ # Group 6: prompt, pager
├── fancy/ # Group 7: syntax, markdown, gradient, etc.
├── async_rt/ # Group 8: async, http
├── error/ # Group 9: errors, handlers
└── utils/ # Group 10: utilities
```