SharpConsoleUI is actively maintained and driven by real-world usage in production apps (ServerHub, LazyNuGet, LazyDotIDE).
- MVVM data binding —
INotifyPropertyChangedon all controls,Bind()/BindTwoWay()API - CanvasControl — retained and immediate mode drawing with full graphics API
- ImageControl — load and display PNG/JPEG/BMP/GIF/WebP/TIFF files in the terminal
- TableControl DataGrid — virtual data source, sorting, filtering, inline editing, compound filter expressions
- Gradient text and backgrounds with animation framework
- Project templates —
dotnet new tui-app,tui-dashboard,tui-multiwindow - .NET 8.0 + 9.0 multi-targeting
- SourceLink and symbol packages for debugging
- Compositor effects — PreBufferPaint/PostBufferPaint hooks for custom rendering
- DatePicker — locale-aware date selection with segmented editing and calendar popup
- TimePicker — locale-aware time selection with 12h/24h modes, optional seconds, AM/PM
- HorizontalSplitterControl — drag-to-resize horizontal bar between vertically stacked controls, mouse and keyboard support, auto-hide on invisible neighbors
- StatusBarControl — per-window status bar with left/center/right zones, clickable shortcut+label items, markup support, optional above line, theme integration
- LineGraphControl — multi-series line graphs with braille (2×4 pixel grid) and ASCII rendering modes, color gradients, Y-axis labels, live data updates
- SliderControl / RangeSliderControl — horizontal and vertical value sliders with keyboard, mouse drag, step/large-step, min/max labels, and dual-thumb range selection with MinRange enforcement
- VideoControl — terminal video playback via FFmpeg with half-block, ASCII and braille render modes, overlay status bar, dynamic resize, looping
- Instant input response — replace polling-based input loop with event-driven wake for zero-latency keypress handling
- Consolidate focus tracking — unify visual focus (
control.HasFocus) and coordinator routing (FocusCoord._focusPath) into a single source of truth; currently two independent writes that can drift and cause key routing to target the wrong control
- ListControl data virtualization — virtual data source for 100K+ item lists
- RadioButtonGroup — exclusive selection from a set
- NumericSpinner — increment/decrement with arrow keys
- ColorPicker — color selection dialog
- Accordion / CollapsiblePanel
- Custom control authoring SDK —
ControlBaseabstract class and guide for third-party control development
- Web terminal backend — run your TUI in a browser via WebSocket
- SSH remote session driver — dedicated driver for remote sessions
- Plugin ecosystem — community-contributed controls and themes
Have a feature request? Open a discussion or create an issue.