Skip to content

Releases: Textualize/textual

The one word command release

22 Oct 17:31
3427dba

Choose a tag to compare

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

11 Oct 11:19
eed9aa0

Choose a tag to compare

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

  • Dropped support for Python3.8 #6121
  • Added support for Python3.14 #6121

The Copy release

01 Oct 16:12
a77700c

Choose a tag to compare

Hot fix for 2 copy related issues

[6.2.1] - 2025-10-01

  • Fix inability to copy text outside of an input/textarea when it was focused #6148
  • Fix issue when copying text after a double click #6148

The Eager release

30 Sep 14:25
c0e7fe3

Choose a tag to compare

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 (as Widget.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

02 Sep 11:44
667dcea

Choose a tag to compare

In this release we have a new "block" border style, and new flat style buttons.

Screen.Recording.2025-09-02.at.08.21.16.mov

[6.1.0] - 2025-08-01

Added

  • Added Button.flat boolean to enable flat button style #6094
  • Added namespaces parameter to run_action #6094
  • Added "block" border style #6094

The Anniversary Release

31 Aug 16:24

Choose a tag to compare

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 and Pilot.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 to ProgressBar widget #5963
  • Added OptionList.set_options #6048
  • Added TextArea.suggestion #6048
  • Added TextArea.placeholder #6048
  • Added Header.format_title and App.format_title for easier customization of title in the Header #6051
  • Added Widget.get_line_filters and App.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 the Static widget has been changed to content. #6041
  • Breaking change: HeaderTitle widget is now a static, with no text and sub_text reactives #6051
  • Breaking change: Renamed Label constructor argument renderable to content 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

07 Aug 12:40
da3f608

Choose a tag to compare

A fix for Markdown IDs, a method to optimize Content, and an addition to reactives to initialize from a method.

Release notes below:

[5.3.0] - 2025-08-07

Added

  • Added Content.simplify #6023
  • Added textual.reactive.Initialize #6023

Fixed

The Streamed Layout

01 Aug 18:50
d4740a1

Choose a tag to compare

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

31 Jul 19:10
7c2b65f

Choose a tag to compare

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

31 Jul 09:00
c1c94cc

Choose a tag to compare

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

Changed

  • last-child, last-of-type, first-child, and first-of-type apply to displayed children only #5999
  • textual.compose is now public #5999