Skip to content

Releases: Textualize/textual

The Flat release

02 Sep 11:44
667dcea
Compare
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
Compare
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
Compare
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
Compare
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
Compare
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
Compare
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

The appended release

25 Jul 19:51
e3bae00
Compare
Choose a tag to compare

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.

25 Jul 07:50
9a1cda5
Compare
Choose a tag to compare

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.

Screenshot 2025-07-25 at 08 37 30

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 expand and shrink attributes to GridLayout #5962
  • Added Markdown.get_stream #5966
  • Added textual.highlight module for syntax highlighting #5966
  • Added MessagePump.wait_for_refresh method #5966
  • Added Widget.container_scroll_offset e84600c
  • Added Markdown.source attribute to MarkdownBlocks e84600c
  • Added extension mechanism to Markdown e84600c
  • Added index to ListView.Selected event #5973
  • Added layout switch to Static.update #5973

Fixed

  • Fixed TextArea issue with the css theme, 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_strips has 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=0 to disable.

The Streaming Release

12 Jul 09:51
e22a213
Compare
Choose a tag to compare

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_one and query_exactly_one not raising documented WrongType exception. #5945
  • Fixed logging to a file on Windows #5941
  • Fixed eight bit colors crashing when applying dim style #5957

Changed

  • Breaking change: Widget.anchor now has different semantics. It should be applied to a container and anchors to the bottom of the scroll position. #5950

Added

  • Added Markdown.append #5950
  • Added Widget.release_anchor #5950
  • Added compact parameter to MaskedInput #5952

The Selective Release

09 Jul 09:06
3339d67
Compare
Choose a tag to compare

A hotfix for text selection with soft wrapping in the TextArea widget

[3.7.1] - 2025-07-09

Fixed

  • Fixed broken text selection with soft_wrap=False #5940