Expand description
§Envision
A ratatui framework for collaborative TUI development with headless testing support.
Envision provides a custom CaptureBackend that implements ratatui’s Backend trait,
enabling you to:
- Capture rendered frames as inspectable text or structured data
- Track frame history and compute diffs between renders
- Annotate widgets with semantic information
- Simulate user input for testing
- Run applications in headless mode for CI/testing
§Quick Start
use envision::backend::CaptureBackend;
use ratatui::Terminal;
use ratatui::widgets::Paragraph;
// Create a headless terminal
let backend = CaptureBackend::new(80, 24);
let mut terminal = Terminal::new(backend).unwrap();
// Render something
terminal.draw(|frame| {
frame.render_widget(Paragraph::new("Hello, Envision!"), frame.area());
}).unwrap();
// Capture the output
let output = terminal.backend().to_string();
println!("{}", output);§Input Simulation
use envision::input::{EventQueue, KeyCode};
let mut queue = EventQueue::new();
queue.type_str("hello");
queue.enter();
// Events can be consumed by your app's event loop
while let Some(event) = queue.pop() {
// handle event...
}Re-exports§
pub use adapter::DualBackend;pub use annotation::Annotate;pub use annotation::Annotation;pub use annotation::AnnotationRegistry;pub use annotation::WidgetType;pub use app::App;pub use app::AsyncCommandHandler;pub use app::AsyncRuntime;pub use app::AsyncRuntimeConfig;pub use app::Command;pub use app::DebounceSubscription;pub use app::FilterSubscription;pub use app::IntervalImmediateSubscription;pub use app::Runtime;pub use app::RuntimeConfig;pub use app::Subscription;pub use app::SubscriptionExt;pub use app::TakeSubscription;pub use app::TerminalEventSubscription;pub use app::ThrottleSubscription;pub use app::TickSubscription;pub use app::TimerSubscription;pub use backend::CaptureBackend;pub use backend::EnhancedCell;pub use backend::FrameSnapshot;pub use component::Accordion;pub use component::AccordionMessage;pub use component::AccordionOutput;pub use component::AccordionPanel;pub use component::AccordionState;pub use component::Breadcrumb;pub use component::BreadcrumbMessage;pub use component::BreadcrumbOutput;pub use component::BreadcrumbSegment;pub use component::BreadcrumbState;pub use component::Button;pub use component::ButtonMessage;pub use component::ButtonOutput;pub use component::ButtonState;pub use component::Checkbox;pub use component::CheckboxMessage;pub use component::CheckboxOutput;pub use component::CheckboxState;pub use component::Column;pub use component::Component;pub use component::Dialog;pub use component::DialogButton;pub use component::DialogMessage;pub use component::DialogOutput;pub use component::DialogState;pub use component::Dropdown;pub use component::DropdownMessage;pub use component::DropdownOutput;pub use component::DropdownState;pub use component::FocusManager;pub use component::Focusable;pub use component::InputField;pub use component::InputFieldState;pub use component::InputMessage;pub use component::InputOutput;pub use component::ListMessage;pub use component::ListOutput;pub use component::Menu;pub use component::MenuItem;pub use component::MenuMessage;pub use component::MenuOutput;pub use component::MenuState;pub use component::ProgressBar;pub use component::ProgressBarState;pub use component::ProgressMessage;pub use component::ProgressOutput;pub use component::RadioGroup;pub use component::RadioGroupState;pub use component::RadioMessage;pub use component::RadioOutput;pub use component::Select;pub use component::SelectMessage;pub use component::SelectOutput;pub use component::SelectState;pub use component::SelectableList;pub use component::SelectableListState;pub use component::SortDirection;pub use component::Spinner;pub use component::SpinnerMessage;pub use component::SpinnerState;pub use component::SpinnerStyle;pub use component::StatusBar;pub use component::StatusBarItem;pub use component::StatusBarMessage;pub use component::StatusBarOutput;pub use component::StatusBarState;pub use component::StatusBarStyle;pub use component::TabMessage;pub use component::TabOutput;pub use component::Table;pub use component::TableMessage;pub use component::TableOutput;pub use component::TableRow;pub use component::TableState;pub use component::Tabs;pub use component::TabsState;pub use component::TextArea;pub use component::TextAreaMessage;pub use component::TextAreaOutput;pub use component::TextAreaState;pub use component::Toast;pub use component::ToastItem;pub use component::ToastLevel;pub use component::ToastMessage;pub use component::ToastOutput;pub use component::ToastState;pub use component::Toggleable;pub use component::Tooltip;pub use component::TooltipMessage;pub use component::TooltipOutput;pub use component::TooltipPosition;pub use component::TooltipState;pub use component::Tree;pub use component::TreeMessage;pub use component::TreeNode;pub use component::TreeOutput;pub use component::TreeState;pub use harness::Assertion;pub use harness::AsyncTestHarness;pub use harness::Snapshot;pub use harness::TestHarness;pub use input::EventQueue;pub use input::SimulatedEvent;
Modules§
- adapter
- Dual adapter for simultaneous real and capture backends.
- annotation
- Widget annotation system for semantic UI understanding.
- app
- TEA (The Elm Architecture) application framework.
- backend
- Backend module providing the
CaptureBackendimplementation. - component
- Composable UI components for TUI applications.
- harness
- Test harness for headless TUI testing.
- input
- Input simulation module for programmatic event injection.
- prelude
- Prelude module for convenient imports