Rendering
Bunli’s rendering system bridges React components with OpenTUI’s terminal renderer, providing a declarative way to build terminal UIs.Renderer Lifecycle
The rendering lifecycle is managed by@bunli/runtime:
Key Lifecycle Events
- Component Creation -
command.render()returns JSX - Renderer Initialization - OpenTUI renderer created
- React Root Creation - React renderer attached
- Runtime Provider Wrap - Context providers injected
- Render Loop - React renders to terminal
- Destroy Event -
renderer.destroy()triggers exit - Cleanup - Renderer and React root disposed
Renderer API
useRenderer Hook
Access the renderer instance:Renderer Properties
Rendering React Components
Basic Component
With State
Async Data Loading
Terminal Dimensions
Get Current Dimensions
Handle Resize Events
OpenTUI Primitives
Bunli exposes OpenTUI’s primitive components:Box
Text
Input
Select
ScrollBox
Renderer Configuration
Global Configuration
Command-Level Configuration
Renderer Options (Runtime)
AppRuntimeProvider
The runtime provider wraps all rendered components:- FocusScopeProvider - Keyboard focus management
- OverlayHostProvider - Modal/overlay rendering
- DialogProvider - Dialog management
- CommandRegistryProvider - Command palette support
- RouteStoreProvider - Navigation state
Performance Considerations
Minimize Re-renders
Use useCallback for Event Handlers
Batch Updates
Error Boundaries
Next Steps
Components
Explore available UI components
Interactive UIs
Build full interactive interfaces