Releases: Textualize/textual
The one word command release
Some fixes and a change to the command palette to use shorter commands, which look better in a list and are more memorable.
There is also a optimization which you may notice if you have complex widgets.
[6.4.0] - 2025-10-22
Fixed
- Fixed type hint aliasing for App under TYPE_CHECKING #6152
- Fixed circular dependency effecting
bazel
users #6163 - Fixed for text selection with double width characters #6186
Changed
- Simplified system commands (command palette) to a single word #6183
The Pithonic release
Version 6.3.0 adds support for Python 3.14, but drops support for Python3.8.
If you are updating, you may also want to update textual-dev
.
There is also a new CSS rule, and a fix for code highlighting.
Enjoy!
[6.3.0] - 2025-10-11
Added
- Added scrollbar-visibility rule #6156
Fixed
- Fixed highlight not auto-detecting lexer #6167
Changed
The Copy release
The Eager release
A mixed back of features and fixes.
See the changelog for details!
[6.2.0] - 2025-09-30
Changed
- Eager tasks are now enabled On Python3.12 and above #6102
Widget._arrange
is now public (asWidget.arrange
) #6108- Reduced number of layout operations required to update the screen #6108
- The :hover pseudo-class no applies to the first widget under the mouse with a hover style set #6132
- The footer key hover background is more visible #6132
- Made
App.delay_update
public #6137 - Pilot.click will return True if the initial mouse down is on the specified target #6139
Added
- Added
DOMNode.displayed_and_visible_children
#6102 - Added
Widget.process_layout
#6105 - Added
App.viewport_size
#6105 - Added
Screen.size
#6105 - Added
compact
to Binding.Group #6132 - Added
Screen.get_hover_widgets_at
#6132 - Added
Content.wrap
#6138 - Added support to allow support for manual keys in add_columns as well. #5923
Fixed
- Fixed issue where Segments with a style of
None
aren't rendered #6109 - Fixed visual glitches and crash when changing
DataTable.header_height
#6128 - Fixed TextArea.placeholder not handling multi-lines #6138
- Fixed issue with RichLog when App.theme is set early #6141
- Fixed children of collapsible not being focusable after collapsible is expanded #6143
The Flat release
The Anniversary Release
This is a fairly large update, with some new features and optimizations.
There are a few breaking changes, which are unlikely to impact many apps. Unless you have build custom line-API widgets. See below for the details.
You may have to regenerate your snapshot tests, mostly as a result of the optimizations. I wouldn't expect the changes result in any material changes.
Thanks to all contributors!
[6.0.0] - 2025-08-31
Fixed
- Fix type hint for SelectType: only hashable types are allowed. #6034
- Fixed
Content.expand_tabs
#6038 - Fixed return value for
Pilot.double_click
andPilot.triple_click
#6035 - Fixed sizing issue with
Pretty
widget #6040 #6041 - Fixed garbled inline app output when
inline_no_clear=True
#6080
Added
- Added
bar_renderable
toProgressBar
widget #5963 - Added
OptionList.set_options
#6048 - Added
TextArea.suggestion
#6048 - Added
TextArea.placeholder
#6048 - Added
Header.format_title
andApp.format_title
for easier customization of title in the Header #6051 - Added
Widget.get_line_filters
andApp.get_line_filters
#6057 - Added
Binding.Group
#6070 - Added
DOMNode.displayed_children
#6070 - Added
TextArea.hide_suggestion_on_blur
boolean #6070 - Added
OptionList.highlighted_option
property #6090 - Added
TextArea.update_suggestion
method #6090 - Added
textual.getters.app
#6089
Changed
- Breaking change: The
renderable
property on theStatic
widget has been changed tocontent
. #6041 - Breaking change:
HeaderTitle
widget is now a static, with notext
andsub_text
reactives #6051 - Breaking change: Renamed
Label
constructor argumentrenderable
tocontent
for consistency #6045 - Breaking change: Optimization to line API to avoid applying background styles to widget content. In practice this means that you can no longer rely on blank Segments automatically getting the background color.
The Initialized Release
The Streamed Layout
This release adds a new "stream" layout. It's a little experimental at the moment, and undocumented. For the brave only!
[5.2.0] - 2025-08-01
Added
- Added a 'stream' layout, which is a lot like vertical but with fewer supported rules (which is why it is faster), will remain undocumented for now. #6013
The skinny release
For some reason I still don't understand, poetry included pycache files in the last PyPi release. After updating Poetry, the build is a more sensible size. There are no code changes in this release.
The empty inside release
This release adds an :empty
pseudo-class which matches widgets with no children. You could use this to hide a container that doesn't have any children, for example:
.container:empty {
display: none;
}
Also in this release, support for scrolling left and right via the trackpad or a mouse that supports it. This was a contribution from @fancidev
Full changes below:
[5.1.0] - 2025-07-31
Added
- Added
empty
pseudo class, which applies when a widget has no displayed children #5999 - Added
Screen.action_focus
#5999 - Added support for left and right mouse scroll for terminals and input devices which support it #5995