- Windows Support: Add Windows platform support with Console API input for arrow keys and special keys
- Shift+Enter Newline: Support Shift+Enter for newline input via kitty keyboard protocol
- Benchmark Suite: Add benchmark suite with baseline comparison and CI workflow
- Smart Markdown Tables: Wrap markdown tables to fit terminal width
- Theme Colors: Soften onBackground/onSurface theme colors to match terminal defaults; use explicit theme colors for fg/bg
- Kitty Protocol: Restore 0x0A as Enter and fix kitty sub-parameter parsing; include kitty/modifyOtherKeys in EscapeCodes values lists
- Scroll Views: Guard against non-finite sizes in scroll views and improve error rendering
- Scrollbar: Prevent scrollbar thumb from overlapping arrows at start/end
- Terminal Exit: Flush stdout before exit to prevent broken terminal state on macOS
- Markdown: Trim trailing newlines from last markdown block element
- Element Comparison: Use
operator==instead ofidentical(matching Flutter)
- Inherited Element: Skip redundant rebuilds in inherited element updates
- InheritedElement: Make InheritedElement extend ProxyElement
- Improve pub.dev score (description, changelog, example, lint)
- Add community section to README
- SingleChildScrollView: Should shrink-wrap to child size instead of expanding
- Selection: Use screen position sorting for all viewports
- Render Object: Fix attach lifecycle
- Shutdown: Cancel pendingFrameTimer on shutdown to prevent dangling timers
- Text Selection: Full text selection support with mouse drag, copy to clipboard, and visual highlight
- TextField Mouse Interaction: Click to position cursor and drag to select text
- Selection Cleanup: Clean up drag state on unmount and exit
- Scrollbar Position: Fix scrollbar thumb positioning
- Backend Parameter: Add optional backend parameter to
runAppfor custom terminal backends
- Image Protocol Support: Implement image rendering in the terminal using the Kitty graphics protocol (experimental)
- Color Quantization: Quantize colors in environments without true color support for better compatibility
- Web Backend: Fix input handling and debug overlay stack fit issues
- Image Documentation: Add documentation for image support and mark as experimental
- Website: Add nocterm.dev website link to README
- Internal: Use built-in
getElementForInheritedComponentOfExactTypefor cleaner code
- CI Fix: Fix unicode block encoder tests for CI environment
- Refactor: Use built-in
getElementForInheritedComponentOfExactTypefor cleaner code
- Test cleanup: Remove unused variable in test
- DebugOverlay: New debug overlay toggled with
Ctrl+Gshowing real-time FPS, build/layout/paint timings, memory usage, and CPU usage - FrameRate presets: New
FrameRateclass with common presets (fps30, fps60, fps120, unlimited)
- keyboardScrollable: New property on
ListViewandSingleChildScrollViewto enable built-in arrow key scrolling - cacheExtent: New
cacheExtentproperty onListViewfor smoother scrolling with pre-rendered items - Offset caching: Performance optimization for variable-height ListView items
- Tint widget: New widget for applying color tints to children
- ModalBarrier.obscure: New property to control barrier visibility
- ColoredBox.obscure: Consistent obscure support across box widgets
- BoxConstraints equality: Added
==operator for constraint comparison
- ColorTween: New tween for animating between colors
- Color.lerp: Linear interpolation support for colors
- Paint phase optimization: Skip paint phase when nothing visual changed
- ListView cache optimization: Smarter cache invalidation to avoid excessive rebuilds
- Relayout on resize: Proper relayout when terminal constraints change
- Reduced idle CPU: Removed forced relayout hack
- ListView parent data: Refactored to use parent data for layout offsets
- Scroll bounds: Improved ListView scroll bounds clamping
- Wide character rendering: Fixed zero-width space handling
- Scroll lag: Resolved O(n) ListView performance issues
- Debug overflow indicator: Disabled by default
- Markdown tables: Use unicode display width for column calculations
- Analyzer warnings: Resolved various warnings and unused code
- GestureDetector: Fixed tap not working in ListView and with centered content
- Frame rate: Respect frame rate limiting in TerminalBinding
- BorderTitle rich text: Added rich text support to border titles
- Clipping: Implemented proper clipping in
RenderStackandContainer - New components: Added
ClipRect,OverflowBox, andSizedOverflowBox
- Input freeze: Fixed input freeze from rapid key sequences
- Mouse wheel: Fixed stacking order issues with mouse wheel events
- Package publishing: Include
lib/src/third_partyin published package
- Multi-child containers: Pass slot through ProxyElement to maintain child order
- Stack repaint: Implement
invokeLayoutCallbackto fix Stack repaint bug
- Flutter-like animations: Complete animation system with
AnimationController,Animation,Tween,Curves - Ticker system: Proper
TickerandTickerProviderfor frame-based animations - AnimatedBuilder: Widget that rebuilds on animation changes
- SingleTickerProviderStateMixin: Mixin for state classes that need animation support
- AsciiText: Large ASCII art text renderer with extensible font system
- Built-in fonts:
standard,banner,block,slim - Custom font support via
AsciiFontextension
- Built-in fonts:
- Builder: Simple component for inline building (like Flutter's Builder)
- onKeyEvent callback: Intercept key events before TextField processes them
- Overlay state: Prevent setState call on unmounted OverlayState
- Release workflow: Automated pub.dev publishing with OIDC
- Version management: Enhanced release workflow with custom version and README updates
This is a major release with 100+ commits introducing foundational changes for theming, performance, web support, and developer experience.
- 6 built-in themes: dark, light, nord, dracula, catppuccin, gruvbox
- Auto-detection: Terminal brightness detection via OSC 11, COLORFGBG, and macOS Dark Mode
- New
TuiThemeData,TuiColors, andTuiThemeInheritedComponent - Added
onSuccessandonWarningcolors for complete status color pairs
- Partial rendering that only updates cells that changed since previous frame
- Cell equality comparison (char + style) with previous frame buffer tracking
- Dramatically reduces terminal output for mostly static UIs
- New
WebBackendabstraction for running in browsers - Extracted Terminal backend architecture for platform flexibility
- xterm.dart integration experiments
- Melos for monorepo management with standardized scripts (test, analyze, format, clean)
- New
providerpackage for state management - New
nestedpackage for organization - SDK constraint updated to
>=3.5.0
- LayoutBuilder: Constraint-aware layouts (Flutter-like) for responsive designs
- ValueListenableBuilder: Reactive widget for
ValueListenable - Rectangle class: Exposed for geometry operations
- Border titles:
BoxDecorationnow supports title property - Opacity/Alpha blending: Proper transparency support
- Clipping: Implement clipping with riverpod provider assertions
- ensureVisible: Auto-scroll support for ScrollViews
- Soft-wrapping TextField: Text wrapping, selection, and clipboard support
- SIGINT handling: Proper Ctrl+C signal handling
- Terminal Color API: Get/set API with extended OSC handling
- Service extensions: Debugging tools including rainbow paint
- compile command: Compile and restore shell commands in CLI
- Args package: CLI argument parsing
- Hot reload debounce: Prevents rapid reload spam
- HTTP logging: Logs exposed via HTTP server instead of
log.txt - Pre-commit hook: Auto-format on commit
- Full documentation site at docs.nocterm.dev (Fumadocs + GitHub Pages)
- Updated README with proper badges and guides
- Differential rendering: Only redraws changed cells between frames
- No-flush optimization: Reduced unnecessary flushes
- Better frame scheduling: Smoother animations
- Center widget: Now properly expands within bounded constraints (was incorrectly shrinking)
- Ctrl+C in TextField: App is now properly quittable again
- Hot reload assertion: Fixed crashes during hot reload
- Fixed unconnected borders in BoxDecoration
- Fixed markdown rendering and nested list items
- Improved emoji handling (including FEOF emojis)
- Navigator test stale context (now uses GlobalKey)
- Stateful component inheritance
- TextField
onChangetext mutation issues - Shell command exceptions
- Frame buffer null assertion removal
- Hot reload architecture cleanup with shareable classes
- Code organization with proper command classes
- Extensive linting and formatting passes
- Added pubignore for cleaner publishing
- Third-party license notice for Flutter code
- BREAKING: Removed automatic keyboard navigation from ListView. Applications must now manually wrap ListView in Focusable for keyboard support:
// Before (0.0.1) ListView(children: [...]) // After (0.1.0) Focusable( onKeyEvent: (event) { /* handle navigation */ }, child: ListView(children: [...]), )
- BREAKING: Removed automatic tap-to-focus behavior. Manual focus management now required for tap interactions.
- Riverpod Integration: Complete Riverpod state management with ProviderScope, reactive widgets, and full provider API support
- Render Theater: New overlay management system with optimized paint ordering and hit testing
- Provider Dependencies: Sophisticated subscription management for reactive UI updates
- Stack Widget: Overlapping layout support with positioned/non-positioned children
- ConstrainedBox: Min/max width/height constraints for precise layout control
- Markdown Support: Rich text rendering with headers, lists, code blocks, tables, and links
- Overlay System: Complete navigator rewrite using overlay-based architecture
- Route Replacement: New pushReplacement methods for better navigation flow
- Navigator Improvements: Enhanced route management and lifecycle handling
- Terminal Output: Write buffering dramatically reduces system calls
- ListView CPU Fix: Fixed 100% CPU usage with proper change detection
- Event Processing: Eliminated keyboard event spam from unparseable mouse events
- Performance Tests: Added benchmark suite for regression testing
- RenderObject Scrolling: Moved scrolling logic to RenderObject layer for better performance
- Mouse Support: Full mouse wheel scrolling with SGR coordinate tracking
- Auto-Scroll: Smart auto-scrolling for chat/log interfaces
- Reverse Mode: ListView reverse option for chat-like UIs
- Improved Metrics: Better scroll extent calculation for variable-height items
- Modern Colors: Updated color palette with sophisticated muted tones
- Cursor Styles: Enhanced text field cursor customization
- Text Wrapping: Proper text wrapping in columns with cross-axis stretch
- Fixed multi-child rebuild layout issues
- Fixed column-in-column constraint handling
- Fixed render object handling for Expanded widgets
- Fixed ESC key handling
- Fixed ordering bugs with Row/Column non-RenderObject elements
- Fixed constraints in flexible layouts and Align widgets
- Improved error handling and hot reload logging
- Clean separation of display and input concerns
- Enhanced lifecycle management for components
- Improved render object system with better layout calculations
- Comprehensive test coverage with visual validation
- Initial version.