Releases: Textualize/textual
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
Added
The Selective Release
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
The Lucky number Sevens release
A few enhancements, including a handy getters module for creating properties to get widgets.
Also a potentially breaking change, see below for the details...
[3.7.0] - 2025-07-07
Added
Changed
- Potential breaking change: Changed default
query_oneandquery_exactly_onesearch to breadth first #5930 - Cursor is now visible by default when in read only mode (restoring pre 3.6.0 behavior) #5934
Fixed
- Fixed issue with Keylines not scrolling #5936
The belated birthday release
Some substantial optimizations and tweaks for the TextArea widget, and the usual fixes.
[3.6.0] - 2025-07-06
Fixed
- Fixed issue with the "transparent" CSS value not being transparent when set using python #5890
- Fixed issue with pushing screens when Input has mouse captured #5900
- Implemented workaround for Ghostty bug which produces negative mouse coordinates #5926
Changed
- Widget.release_mouse will now only release the mouse, if it was captured by self #5900
- Some optimizations to TextArea, which may be noticeable during scrolling (note: may break snapshots with a TextArea) #5925
- Selecting in the TextArea now hides the cursor until you release the mouse #5925
- Read only TextAreas will no longer display a cursor #5925
Added
- Added
TextArea.highlight_cursor_linetoggle #5924
The faster startup release
This release contains some optimizations to startup time, which may be significant if you create a lot of widgets. There are also some visual updates to Markdown.
This release will break your snapshots, although I don't expect any visual changes. If you are using the snapshot plugin, you will need to regenerate those snapshots. Even if you give them a quick scan, this should only take a few minutes.
[3.5.0] - 2025-06-20
Changed
The lenient release
Mostly fixes, although there is a notable change to markup.
Previously anything in square brackets was considered a tag, which resulted in markup errors with Python list literals. i.e. [1,2,3] would be interpreted as a tag. The Content markup parser has been made more lenient in these cases, and treats them as literal text.
[3.4.0] - 2025-06-14
Fixed
- Fixed issues with initial flicker in
TextArearendering https://github.com/Textualize/textual/issues/5841vcomm - Fixed issue with workers that have large parameter lists breaking dev tools #5850
- Fixed post_message failing on 3.8 #5848
- Fixed log not working from threads #5863
Added
- Added experimental opt-in support for https://github.com/willmcgugan/textual-speedups
Changed
- Content markup is now more lenient; if a 'tag' doesn't contain a valid style it will be included verbatim. #5851
The Community Supported Release
The first community supported release.
Mostly fixes and a few helpful additions. See below for details...
[3.3.0] - 2025-06-01
Fixed
- Fixed
VERTICAL_BREAKPOINTSdoesn't work #5785 - Fixed
Buttonallowing text selection #5770 - Fixed running
App.runafterasyncio.run#5799 - Fixed triggering a deprecation warning in py >= 3.10 #5799
- Fixed
Inputinvalid cursor position after updating the value #5811 - Fixed
DEFAULT_CLASSESwhen applied to App #5827 - Fixed order of implicit content tag closing #5823
Added
- Exposed
CollapsibleTitle#5810 - Added
Color.hsvproperty andColor.from_hsvclass method #5803 - Added
cursor_at_startandcursor_at_endproperties to theInputwidget #5830
Changed
- Added a few features to
python -m textual.markupplayground #5823