Based on the comprehensive library audit performed on 2026-03-01 against version 0.5.0 (commit 8b55b07).
Overall Audit Grade: B (3.13 weighted GPA)
These are the top 5 highest-ROI improvements identified by the audit.
Category: Consistency & Symmetry (4) -- from B- toward B+
Problem: Five different naming patterns for the same concept across components:
selected()returns item: RadioGroup, Tabsselected_item()returns item: SelectableList, Menu, LoadingListselected_value()returns&str: Dropdown, Selectselected_row()returns item: Tableselected_node()returns item: Tree
selected_index() is consistent across all components (returns Option<usize>).
Fix: Standardize on selected_item() as the universal item accessor. Keep component-specific variants as aliases for domain clarity (e.g., selected_row() on Table, selected_node() on Tree) but ensure selected_item() exists on every component with a selection concept.
Category: Consistency & Symmetry (4) -- from B- toward A-
Problem: 8 of 17 Focusable components lack is_disabled()/set_disabled():
- Dialog
- InputField
- Menu
- MultiProgress
- SelectableList
- StatusLog
- TextArea
- Tree
Meanwhile 9 components have it: Accordion, Breadcrumb, Button, Checkbox, Dropdown, RadioGroup, Select, Table, Tabs.
Fix: Add is_disabled(), set_disabled(bool), and with_disabled(bool) to all 8 missing components. Add disabled state guards to handle_event() and disabled rendering to view(). Add tests for disabled behavior.
Category: Consistency & Symmetry (4) -- from B- toward A-
Problem: 5 Focusable components lack handle_event()/dispatch_event()/update() instance methods on their State types:
- LoadingList
- Menu
- MultiProgress
- RadioGroup
- StatusLog
These force users to use the Component::handle_event() turbofish pattern instead of the ergonomic state.component.dispatch_event(&event) pattern available on the other 12 components.
Fix: Add instance methods to all 5 State types, following the existing pattern from components like SelectableList and Tabs.
Category: Feature Flags (18) -- from D toward B
Problem: Cargo.toml has no [features] section. Users compile all 26 components, tokio, serde, and 217 transitive dependencies with no way to opt out.
Fix: Add feature flags:
default = ["full"]full-- all components + all optional features- Individual component features or component group features
serde-- serialization support (currently hard dependency)- Consider tokio feature gating if feasible
Category: Guides & Migration (21) -- from C- toward B
Problem: CHANGELOG.md only covers 0.1.0 through 0.3.0. Current version is 0.5.0, meaning two releases are undocumented.
Fix: Reconstruct changelog entries from git history for 0.4.0 and 0.5.0. Add CONTRIBUTING.md.
- Category: Integration & E2E Testing (13) -- from C+ toward B+
- Add multi-component workflow tests
- Add AppHarness-based integration tests
- Target: 20+ integration tests covering realistic user scenarios
- Category: Integration & E2E Testing (13)
- Add proptest for event handler invariants
- Focus on: SelectableList, Table, Tree, InputField, TextArea
- Verify: navigation never panics, indices stay in bounds, state invariants hold
- Category: Integration & E2E Testing (13)
- Table with 10,000+ rows
- Tree with deeply nested hierarchies (100+ depth)
- SelectableList with 100,000 items
- Category: Doc Test Coverage (14) -- from B toward A-
- Reduce 40 ignored doc tests, especially in runtime and command modules
- Add explanatory comments where ignore is truly necessary
- Category: Performance & Benchmarking (11) -- from B toward A-
- Benchmark view() for all components at multiple sizes
- Benchmark with 1000+ item lists/tables/trees
- Add CI benchmark regression detection
- Category: Error Infrastructure (19) -- from C- toward B+
- Create EnvisionError enum with meaningful variants
- Replace BoxedError where possible
- Add error handling documentation
- Category: Logging & Debugging (20) -- from C toward B+
- Optional tracing behind a feature flag
- Instrument event->message->update flow
- Add debug mode for runtime loop visibility
- Categories: Guides (21), Security (24)
- CONTRIBUTING.md with development setup, testing, PR process
- SECURITY.md with security model documentation
- Category: Advanced Features (22)
- Add search/filter to SelectableList, Table, Tree (Dropdown already has it)
- Category: Advanced Features (22)
- Copy/paste for InputField and TextArea
- Category: Advanced Features (22)
- Undo/redo stack for InputField and TextArea
- Category: Serialization (23) -- from C- toward B
- Add Serialize/Deserialize derives to component State types
- Enable session persistence
- Category: Ecosystem Integration (25)
- Abstract backend to support termion, termwiz alternatives
- Consider async runtime abstraction (tokio vs async-std)
| # | Category | Current Grade | Target After Iter 1 |
|---|---|---|---|
| 1 | Getting Started | A- | A- |
| 2 | Examples | B | B |
| 3 | Documentation | A- | A- |
| 4 | Consistency & Symmetry | B- | A- |
| 5 | Modularity & Composability | C+ | B- |
| 6 | Usability & Ergonomics | A- | A |
| 7 | Complexity Hiding | B+ | B+ |
| 8 | Type Safety & Errors | B | B |
| 9 | Algorithms & Data Structures | A- | A- |
| 10 | Smart Library Usage | A- | A- |
| 11 | Performance & Benchmarking | B | B |
| 12 | Unit Testing | A | A |
| 13 | Integration & E2E Testing | C+ | C+ |
| 14 | Doc Test Coverage | B | B |
| 15 | Solving Pain Points | A- | A- |
| 16 | Code Organization | A- | A- |
| 17 | Extensibility | B+ | A- |
| 18 | Feature Flags | D | B |
| 19 | Error Infrastructure | C- | C- |
| 20 | Logging & Debugging | C | C |
| 21 | Guides & Migration | C- | B |
| 22 | Advanced Features | C | C |
| 23 | Serialization | C- | C- |
| 24 | Security | C | C |
| 25 | Ecosystem Integration | B- | B- |