Releases: Textualize/textual
The so-long zero-ver Release
This release updates the tree-sitter dependency to add support for syntax highlighting in Python 3.13
See below for the full update
Note
This release will probably be the last before 1.0! Consider it a Release Candidate.
[0.89.0] - 2024-11-05
Added
- Added "tab" border style #5335
- Added support for XML syntax highlighting #5320
- Added
TextArea.update_highlight_query
#5320
Fixed
- Fixed Select not scrolling highlight in to view when clicked #5255
- Upgraded tree-sitter to 0.23+ (
syntax
extras) #5320 - Some syntax highlighting changes due to tree-sitter updates #5320
- Breaking change:
Document.query_syntax_tree
signature changed #5320 - Breaking change:
TextArea.register_language
signature changed #5320 - Breaking change:
SyntaxAwareDocument.language_name
property removed #5320 - Breaking change: Kotlin syntax highlighting removed from
TextArea
#5320 - Fixed selection list wrapping #5331
- Fixed CSS encoding issue on Windows #5324
The make fists with your toes Release
The Yippee Ki‐Yay Release
Mostly a bugfix release, as we prepare for 1.0. Some minor API change, that is unlikely to impact anyone.
[0.88.0] - 2024-11-29
Fixed
- Fixed infinite loop in
Widget.anchor
#5290 - Restores the ability to supply console markup to command list #5294
- Fixed delayed App Resize event #5296
- Fixed
ListView
not updating its index or highlighting after removing items #5114 - Fixed ListView focus styling rule being too broad #5304
- Fixed issue with auto-generated tab IDs #5298
Changed
The Absolute hotfix
The Absolute Unit of a Release
This version adds support for position:absolute
in the CSS.
Also in this release is a game added to the demo.
Play the game by running the following command:
python -m textual.demo.game

[0.87.0] - 2024-11-24
Added
- Added Styles.has_any_rules #5264
- Added
position
CSS rule. #5278 - Added
Widget.set_scroll
#5278 - Added
Select.selection
#5278
Fixed
The Quickening tutorial update
The Quickening fix part 2
The Quickening fix release
Just a tweak to the demo.
[0.86.1] - 2024-11-16
Fixed
- Tweaks to demo
The Quickening Release
This is a large release!
v0.86.0 Adds an entirely new theming system and an updated demo (Run python -m textual
).
The new theming system standardizes the look-and-feel of widgets. This should mean they will look pretty when used in combination, and you will need less tweaking of your UI. If your app already has a customized look and feel, you may need to make a few style changes. Let us know if you need any help with that (jump on the Discord server).
Here's what the demo looks like now:

Screen.Recording.2024-11-16.at.19.08.15.mov
Use the command palette to switch themes...
[0.86.0] - 2024-11-16
Fixed
- Fixed duplicated key displays in the help panel #5037
- Fixed
TextArea
mouse selection with tab characters #5212 - Fixed
Tabs
not updating the highlighting after removing a tab #5218
Added
- Added
App.theme
reactive attribute #5087 - Added various starter themes #5087
- Added "Change theme" command to command palette #5087
- Added
variant
parameter toLabel
widget for quick access to common styles #5087 - Added
App.get_theme
which returns a theme by name #5087 - Added
App.register_theme
andApp.unregister_theme
#5087 - Added
App.theme_changed_signal
#5087 - Added
App.available_themes
property which returns a mapping of theme names toTheme
instances #5087 - Added
App.current_theme
property which returns the currently active theme object #5087 - Added
App.get_theme_variable_defaults
which returns a mapping of theme variables to their default values #5087 - Added
App.search
which allows bringing up a fuzzy search list of commands on-demand #5087 - Added
App.search_themes
which allows bringing up a fuzzy search list of themes on-demand #5087 - Added
textual.theme.ThemeProvider
, a command palette provider which returns all registered themes #5087 - Added several new built-in CSS variables #5087
- Added support for in-band terminal resize protocol #5217
- Added TEXTUAL_THEME environment var, which should be a comma separated list of desired themes #5238
- Added
Widget.is_scrolling
#5238 - Added
Tree.add_json
#5238
Changed
Driver.process_event
is nowDriver.process_message
#5217Driver.send_event
is nowDriver.send_message
#5217- Added
can_focus
andcan_focus_children
parameters to scrollable container types. #5226 - Added
textual.lazy.Reveal
#5226 - Added
Screen.action_blur
#5226 Click
events can now be used with the on decorator to match the originally clicked widget #5238- Breaking change: Removed
App.dark
reactive attribute #5087 - Breaking change: To improve consistency, several changes have been made to default widget CSS and the CSS variables which ship with Textual. On upgrading, your app will likely look different. All of these changes can be overidden with your own CSS. #5087
Removed
- Removed
App.HOVER_EFFECTS_SCROLL_PAUSE
#5238
The Focus, Will, Focus! Release
An interim fix, for broken focus-within pseudo-selector
[0.85.2] - 2024-11-02
- Fixed broken focus-within #5190