RazorConsole v0.5.0
Released: March 8, 2026 | Milestone v0.5.0
RazorConsole v0.5.0 introduces powerful new layout and scrolling capabilities, including a CSS flexbox-inspired FlexBox component and a new ViewHeightScrollable component for line-by-line scrolling over arbitrary content. This release also expands Table column attributes, fixes a critical focus bug with @key, and adds macOS ARM64 to the CI test matrix.
Highlights
- FlexBox Layout Component: Added a new
FlexBoxcomponent that brings CSS-like flexbox semantics — direction, justify, align, wrap, and gap — to console layouts (#302, fixes #109) - ViewHeightScrollable Component: Added a new
ViewHeightScrollablecomponent that enables smooth line-by-line scrolling over any content with optional embedded scrollbar support forPanel,Border, andTable(#306) - Table Column Attribute Extensions: Added
Width,Padding, andNoWrapattributes to table columns, aligning theTablecomponent with Spectre.Console's native column API (#309) - Focus Fix with
@key: Resolved a critical bug whereFocusManager.FocusAsyncfailed to target components identified by@keywhen they were conditionally added to the render tree (#310, fixes #307) - CI: macOS ARM64 Testing: Added
macos-latestto the CI build-and-test matrix, ensuring cross-platform coverage includes Apple Silicon (#312, fixes #311)
Milestone Completion
All 8 items in the v0.5.0 milestone have been completed:
Issues
- #109 - Add a Box IRenderable to support flex-like layout
- #307 - Can't set focus to Panel with @key with FocusManager
- #311 - CI - enable test on macos-latest
Pull Requests
- #301 - Bump version prefix to 0.5.0
- #302 - Feat: Implement flex box layout
- #306 - feat: Add ViewHeightScrollable
- #309 - feat(components): Add Width, Padding and NoWrap attributes in Table columns
- #310 - Fix #307 by moving populate key to component upfront in render pipeline
- #312 - Enable CI tests on macos-latest
Detailed Changes
Components & Rendering
-
New FlexBox Component:
- Added
FlexBoxcomponent that lays out child items using a CSS flexbox model (#302) - Supports
Direction(Row/Column),Justify(Start,End,Center,SpaceBetween,SpaceAround,SpaceEvenly),Align(Start,End,Center,Stretch),Wrap(NoWrap,Wrap),Gap,Width, andHeightparameters (#302) - Backed by
FlexBoxRenderableandFlexBoxElementTranslatorfor accurate terminal cell-buffer rendering (#302) - Includes gallery examples for row layout, justify-center, space-between navigation, column direction, and wrapping layouts (#302)
- Added
-
New ViewHeightScrollable Component:
- Added
ViewHeightScrollablecomponent for line-by-line vertical scrolling over arbitrary content (#306) - Supports
LinesToRender,ScrollOffset(two-way bindable), and optionalScrollbarSettings— sharing the same scrollbar API as the existingScrollablecomponent (#306) - Embedded scrollbar mode (
IsScrollbarEmbedded = true) renders the scrollbar insidePanel,Border, andTablecontainers for a polished look (#306) - Keyboard support:
ArrowUp/ArrowDown(single line),PageUp/PageDown(page),Home/End(bounds) (#306) - Introduced
ScrollableLayoutCoordinatorsingleton service to coordinatemaxOffsetbetween the component andScrollableRenderable(#306) - Refactored
ScrollableWithBarRenderableinto a unifiedScrollableRenderableserving bothScrollableandViewHeightScrollable(#306) - Gallery examples updated across all components where code blocks are too large to fit the visible area (#306)
- Added
-
Table Column Attribute Extensions:
- Added
Width,Padding, andNoWrapattributes to table column elements, matching Spectre.Console's nativeTableColumnAPI (#309)
- Added
Focus & Input Reliability
- FocusManager @key Fix:
- Fixed
FocusManager.FocusAsync(key)failing to resolve focus targets identified by@keywhen the component was conditionally rendered (e.g., inside@if) (#310) - Root cause:
@keyattributes were not being applied to the component'sVNodeearly enough in the render pipeline, so the key was unavailable at focus resolution time (#310) - Fix: Key population now runs upfront in the render pipeline before focus resolution, ensuring
@keyis always present whenFocusAsyncis called afterStateHasChanged(#310) - Added gallery example (
/issue-307-focus) reproducing and verifying the fix with two cascadingSelectcomponents (#310)
- Fixed
Build & CI
-
macOS ARM64 CI Coverage:
- Added
macos-latestto theosmatrix in.github/workflows/ci.yml, enabling tests to run on macOS ARM64 in GitHub Actions (#312)
- Added
-
Version Bump:
- Updated
VersionPrefixto0.5.0innuget-package.props(#301)
- Updated
Acknowledgments
Special thanks to the contributors who made this release possible:
- Skoreyko Misha (TeseySTD) for implementing the
ViewHeightScrollablecomponent with embedded scrollbar support and refactoring the scrollable rendering pipeline, and for extendingTablecolumn attributes - LittleLittleCloud for implementing the
FlexBoxlayout component and fixing the critical@keyfocus resolution bug
Full Changelog: https://github.com/RazorConsole/RazorConsole/compare/v0.4.0...v0.5.0