Envision
A ratatui framework for collaborative TUI development with headless testing support.
Features
- Headless Testing - Render your TUI without a terminal using
CaptureBackend - TEA Architecture - The Elm Architecture pattern with
App,Runtime, andCommand - Async Runtime - Full async support with subscriptions, timers, and async commands
- Widget Annotations - Attach semantic metadata to widgets for testing and accessibility
- Test Harness - Fluent assertions and snapshot testing for TUI applications
- Input Simulation - Programmatically simulate keyboard and mouse events
- Multiple Output Formats - Plain text, ANSI-colored, and JSON output
Quick Start
Add envision to your project:
Basic Capture Backend
use CaptureBackend;
use Terminal;
use Paragraph;
// Create a headless terminal
let backend = new;
let mut terminal = new?;
// Render something
terminal.draw?;
// Capture the output
println!;
TEA Architecture
use *;
;
Testing with Runtime
use *;
Test Harness for Custom Rendering
use TestHarness;
use Paragraph;
let mut harness = new;
harness.render;
harness.assert_contains;
Examples
Run the examples to see envision in action:
# Basic capture backend usage
# TEA architecture with sync runtime
# Async runtime with subscriptions
# Test harness and assertions
# Widget annotations
Architecture
Envision follows The Elm Architecture (TEA) pattern:
┌─────────────────────────────────────────────────────────┐
│ Application │
│ │
│ ┌─────────┐ ┌────────┐ ┌──────────────────┐ │
│ │ State │────▶│ View │────▶│ Terminal/Frame │ │
│ └─────────┘ └────────┘ └──────────────────┘ │
│ ▲ │
│ │ │
│ ┌─────────┐ ┌────────────────────┐ │
│ │ Update │◀────│ Message/Events │ │
│ └─────────┘ └────────────────────┘ │
│ │ ▲ │
│ ▼ │ │
│ ┌─────────┐ ┌────────────────────┐ │
│ │ Command │────▶│ Effect Handler │ │
│ └─────────┘ └────────────────────┘ │
└─────────────────────────────────────────────────────────┘
Modules
| Module | Description |
|---|---|
backend |
CaptureBackend for headless rendering |
app |
TEA architecture: App, Runtime, Command, subscriptions |
harness |
TestHarness and AsyncTestHarness for testing |
annotation |
Widget annotations with Annotate and AnnotationRegistry |
input |
Input simulation with EventQueue |
adapter |
DualBackend for simultaneous real + capture rendering |
Minimum Supported Rust Version
The minimum supported Rust version is 1.81.
License
This project is licensed under the MIT License - see the LICENSE file for details.