Releases: Textualize/textual
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._arrangeis 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_updatepublic #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
compactto 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
Nonearen'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_clickandPilot.triple_click#6035 - Fixed sizing issue with
Prettywidget #6040 #6041 - Fixed garbled inline app output when
inline_no_clear=True#6080
Added
- Added
bar_renderabletoProgressBarwidget #5963 - Added
OptionList.set_options#6048 - Added
TextArea.suggestion#6048 - Added
TextArea.placeholder#6048 - Added
Header.format_titleandApp.format_titlefor easier customization of title in the Header #6051 - Added
Widget.get_line_filtersandApp.get_line_filters#6057 - Added
Binding.Group#6070 - Added
DOMNode.displayed_children#6070 - Added
TextArea.hide_suggestion_on_blurboolean #6070 - Added
OptionList.highlighted_optionproperty #6090 - Added
TextArea.update_suggestionmethod #6090 - Added
textual.getters.app#6089
Changed
- Breaking change: The
renderableproperty on theStaticwidget has been changed tocontent. #6041 - Breaking change:
HeaderTitlewidget is now a static, with notextandsub_textreactives #6051 - Breaking change: Renamed
Labelconstructor argumentrenderabletocontentfor 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
emptypseudo 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
Changed
The appended release
A hotfix. See below for details.
[5.0.1] - 2025-07-25
Fixed
- Fixed appending to Markdown widgets that were constructed with an existing document #5990
The Tabled release.
This is quite a large release! Fueled in part by my work on Toad
Markdown rendering has been improved, with full text selection, prettier code blocks and tables. Plus streaming support.
Plenty of other fixes and additions. Thats to everyone who contributed code and issues!
There are two breaking changes (see below). These are unlikely to affect anyone, but Semver requires bumping the major version number.
[5.0.0] - 2025-07-25
Added
- Added get_minimal_width to Visual protocol #5962
- Added
expandandshrinkattributes to GridLayout #5962 - Added
Markdown.get_stream#5966 - Added
textual.highlightmodule for syntax highlighting #5966 - Added
MessagePump.wait_for_refreshmethod #5966 - Added
Widget.container_scroll_offsete84600c - Added
Markdown.sourceattribute to MarkdownBlocks e84600c - Added extension mechanism to Markdown e84600c
- Added
indextoListView.Selectedevent #5973 - Added
layoutswitch to Static.update #5973
Fixed
- Fixed
TextAreaissue with thecsstheme, where the background color was stuck from the previous theme #5964
Changed
- Improved rendering of Markdown tables (replace Rich table with grid) which allows text selection #5962
- Change look of command palette, to drop accented borders #5966
- Some style tweaks to Markdown e84600c
- Content markup can now accept component classes when preceded by a dot, e.g. "Hello [.my_custo_style]World[/]!" #5981
- Breaking change:
Visual.render_stripshas a new signature. If you aren't explicitly building Visuals then this won't effect you. #5981 - Breaking change: The component classes on Markdown have been moved to MarkdownBlock. This won't affect you unless you have customize the Markdown CSS #5981
- The textual-speedups library will now be imported automatically if it is installed. Set
TEXTUAL_SPEEDUPS=0to disable.
The Streaming Release
The highlight of this release is the new Markdown.append method which can be used to efficiently stream markdown content (like you might get from an LLM).
Screen.Recording.2025-07-12.at.10.46.30.mov
The Widget.anchor method has changed semantics (and also works much better), which is the reason for the major version bump. This will only impact you if you are actually using that method.
And there are a few fixes and additions. Thanks to the community for these contributions.
[4.0.0] - 2025-07-12
Fixed
- Fixed
query_oneandquery_exactly_onenot raising documentedWrongTypeexception. #5945 - Fixed logging to a file on Windows #5941
- Fixed eight bit colors crashing when applying dim style #5957
Changed
- Breaking change:
Widget.anchornow has different semantics. It should be applied to a container and anchors to the bottom of the scroll position. #5950