NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #97 most downloaded on PyPI
Modern Text User Interface framework
Last release 3 months ago
30 Jun 2026
Ships fairly regularly
a new release about every 2 weeks
Nearly every release is documented
notes for 60 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
5 years old
254 releases · first in 2021
One column per quarter.
## [0.24.1] - 2023-05-08 ### Fixed - Fix TypeError in code browser
https://textual.textualize.io/blog/2023/05/08/textual-0240-adds-a-select-control/
https://textual.textualize.io/blog/2023/05/08/textual-0240-adds-a-select-control/
DirectoryTree starting anywhere other than .Tree when Tree.show_root is True https://github.com/Textualize/textual/issues/2397Tree not marking branches as selected when first getting focus https://github.com/Textualize/textual/issues/2397False by default https://github.com/Textualize/textual/pull/2470always_update as an optional argument for reactive.var@on accepts arbitrary **kwargs to apply selectors to attributes of the message https://github.com/Textualize/textual/pull/2498control as alias for attribute tabs in Tabs messages https://github.com/Textualize/textual/pull/2483TabbedContent now takes kwargs id, name, classes, and disabled, upon initialization, like other widgets https://github.com/Textualize/textual/pull/2497DataTable.move_cursor https://github.com/Textualize/textual/issues/2472OptionList.add_options https://github.com/Textualize/textual/pull/2508TreeNode.is_root https://github.com/Textualize/textual/pull/2510TreeNode.remove_children https://github.com/Textualize/textual/pull/2510TreeNode.remove https://github.com/Textualize/textual/pull/2510Message.ALLOW_SELECTOR_MATCH https://github.com/Textualize/textual/pull/2498ALLOW_SELECTOR_MATCH to all built-in messages associated with widgets https://github.com/Textualize/textual/pull/2498control property to messages
DirectoryTree.FileSelectedListView
HighlightedSelectedMarkdown
TableOfContentsUpdatedTableOfContentsSelectedLinkClickedOptionList
OptionHighlightedOptionSelectedRadioSet.ChangedTabContent.TabActivatedTree
NodeSelectedNodeHighlightedNodeExpandedNodeCollapsedBreaking change: DirectoryTree.FileSelected.path is now always a Path https://github.com/Textualize/textual/issues/2448
https://textual.textualize.io/blog/2023/05/03/textual-0230-improves-message-handling/
outline top and bottom not handling alpha - https://github.com/Textualize/textual/issues/2371!important not applying to align https://github.com/Textualize/textual/issues/2420!important not applying to border https://github.com/Textualize/textual/issues/2420!important not applying to content-align https://github.com/Textualize/textual/issues/2420!important not applying to outline https://github.com/Textualize/textual/issues/2420!important not applying to overflow https://github.com/Textualize/textual/issues/2420!important not applying to scrollbar-size https://github.com/Textualize/textual/issues/2420outline-right not being recognised https://github.com/Textualize/textual/issues/2446compute_ method will now raise an AttributeError https://github.com/Textualize/textual/issues/2383DirectoryTree.FileSelected.path is now always a Path https://github.com/Textualize/textual/issues/2448Directorytree.load_directory renamed to Directorytree._load_directory https://github.com/Textualize/textual/issues/2448DirectoryTree.path reactive attribute https://github.com/Textualize/textual/issues/2448DirectoryTree.FileSelected.node https://github.com/Textualize/textual/pull/2463DirectoryTree.reload https://github.com/Textualize/textual/issues/2448Fixed textual run on Windows https://github.com/Textualize/textual/issues/2406
textual run on Windows https://github.com/Textualize/textual/issues/2406Added TreeNode.tree as a read-only public attribute https://github.com/Textualize/textual/issues/2413
TreeNode.tree as a read-only public attribute https://github.com/Textualize/textual/issues/2413Fixed timer issue https://github.com/Textualize/textual/issues/2416
textual run issue https://github.com/Textualize/textual/issues/2391textual run issue https://github.com/Textualize/textual/issues/2391Fixed broken fr units when there is a min or max dimension https://github.com/Textualize/textual/issues/2378
ProgressBar widget https://github.com/Textualize/textual/pull/2333textual.containers are now 1fr in relevant dimensions by default https://github.com/Textualize/textual/pull/2386Mostly fixes and enhancements, but there are some breaking changes in containers. See below for the details.
Mostly fixes and enhancements, but there are some breaking changes in containers. See below for the details.
textual run execs apps in a new context.Container no longer shows required scrollbars by default https://github.com/Textualize/textual/issues/2361VerticalScroll no longer shows a required horizontal scrollbar by defaultHorizontalScroll no longer shows a required vertical scrollbar by defaultApp.action_add_class_ to App.action_add_classApp.action_remove_class_ to App.action_remove_classRadioSet is now a single focusable widget https://github.com/Textualize/textual/pull/2372containers.Content (use containers.VerticalScroll now)-c switch to textual run which runs commands in a Textual dev environment.Widget and onto a new base class for scrollable containers (see also below addition) https://github.com/Textualize/textual/issues/2332ScrollView now inherits from ScrollableContainer rather than Widget https://github.com/Textualize/textual/issues/2332Widget https://github.com/Textualize/textual/issues/2331ScrollableContainer; a container class that binds the common navigation keys to scroll actions (see also above breaking change) https://github.com/Textualize/textual/issues/2332TabbedContent.active changes not changing the actual content https://github.com/Textualize/textual/issues/2352A fix for an issue where the underline on tabs widgets may occasionally get stuck.
A fix for an issue where the underline on tabs widgets may occasionally get stuck.
Changed signature of Driver. Technically a breaking change, but unlikely to affect anyone.
ButtonVariant is now exported from textual.widgets.button https://github.com/Textualize/textual/issues/2264HorizontalScroll and VerticalScroll are now focusable by default https://github.com/Textualize/textual/pull/2317DataTable.remove_row method https://github.com/Textualize/textual/pull/2253--port to the command textual console to specify which port the console should connect to https://github.com/Textualize/textual/pull/2258Widget.scroll_to_center method to scroll children to the center of container widget https://github.com/Textualize/textual/pull/2255 and https://github.com/Textualize/textual/pull/2276TabActivated message to TabbedContent https://github.com/Textualize/textual/pull/2260border-title-color, border-title-background, border-title-style rules https://github.com/Textualize/textual/issues/2289border-subtitle-color, border-subtitle-background, border-subtitle-style rules https://github.com/Textualize/textual/issues/2289get_component_styles returning incorrect values on first call when combined with pseudoclasses https://github.com/Textualize/textual/pull/2304active_message_pump.get sometimes resulting in a LookupError https://github.com/Textualize/textual/issues/2301Fix viewport units using wrong viewport size https://github.com/Textualize/textual/pull/2247
A bugfix release, see below...
Mostly a bugfix release. But we also have filtering on the DirectoryTree, and the DataTable page up / down now moves the cursor as well as the view.
Mostly a bugfix release. But we also have filtering on the DirectoryTree, and the DataTable page up / down now moves the cursor as well as the view.
DirectoryTree https://github.com/Textualize/textual/pull/2215Breaking change: Markdown.update is no longer a coroutine https://github.com/Textualize/textual/pull/2182
https://textual.textualize.io/blog/2023/04/04/textual-0180-adds-api-for-managing-concurrent-workers/
RadioSet is now far less likely to report pressed_button as None https://github.com/Textualize/textual/issues/2203Fixed scrollable area not taking in to account dock https://github.com/Textualize/textual/issues/2188
A few fixes related to the thew modal screens, and ordered Markdown lists.
A few fixes related to the thew modal screens, and ordered Markdown lists.
Markdown widget now auto-increments ordered lists https://github.com/Textualize/textual/issues/2002A bugfix release. See below for details.
A bugfix release. See below for details.
https://textual.textualize.io/blog/2023/03/29/textual-0170-adds-translucent-screens-and-option-list/
https://textual.textualize.io/blog/2023/03/29/textual-0170-adds-translucent-screens-and-option-list/
self instead of None https://github.com/Textualize/textual/pull/2102:
Widget: refresh, focus, reset_focusButton.pressDataTable: clear, refresh_coordinate, refresh_row, refresh_column, sortPlacehoder.cycle_variantSwitch.toggleTabs.clearTextLog: write, clearTreeNode: expand, expand_all, collapse, collapse_all, toggle, toggle_allTree: clear, resetWidget.get_pseudo_class_state https://github.com/Textualize/textual/pull/2155classes setter for Widget https://github.com/Textualize/textual/issues/1081OptionList https://github.com/Textualize/textual/pull/2154Breaking change: changed default behaviour of Vertical (see VerticalScroll) https://github.com/Textualize/textual/issues/1957
See blog post...
https://textual.textualize.io/blog/2023/03/22/textual-0160-adds-tabbedcontent-and-border-titles/
parser_factory argument to Markdown and MarkdownViewer constructors https://github.com/Textualize/textual/pull/2075HorizontalScroll https://github.com/Textualize/textual/issues/1957Center https://github.com/Textualize/textual/issues/1957Middle https://github.com/Textualize/textual/issues/1957VerticalScroll (mimicking the old behaviour of Vertical) https://github.com/Textualize/textual/issues/1957Widget.border_title and Widget.border_subtitle to set border (sub)title for a widget https://github.com/Textualize/textual/issues/1864border_title_align and border_subtitle_align.TabbedContent widget https://github.com/Textualize/textual/pull/2059get_child_by_type method to widgets / app https://github.com/Textualize/textual/pull/2059Widget.render_str method https://github.com/Textualize/textual/pull/2059Vertical (see VerticalScroll) https://github.com/Textualize/textual/issues/1957overflow style for Horizontal was changed to hidden hidden https://github.com/Textualize/textual/issues/1957DirectoryTree also accepts pathlib.Path objects as the path to list https://github.com/Textualize/textual/issues/1438sender attribute from messages. It's now just private (_sender). https://github.com/Textualize/textual/pull/2071Patch fix for broken Tab import
Patch fix for broken Tab import
Tab is now correctly made available from textual.widgets.Breaking change: Renamed Widget.action and App.action to Widget.run_action and App.run_action
https://textual.textualize.io/blog/2023/03/13/textual-0150-adds-a-tabs-widget/
Pilot.click not correctly creating the mouse events https://github.com/Textualize/textual/issues/2022shift, meta and control arguments to Pilot.click.There are a few breaking changes here, which we cover in the following blog post:
We've been busy!
There are a few breaking changes here, which we cover in the following blog post:
https://textual.textualize.io/blog/2023/03/09/textual-0140-shakes-up-posting-messages/
Here's the full release notes.
post_message to post events, which is non-async, post_message_no_wait was dropped. https://github.com/Textualize/textual/pull/1940Timer.stop which is non sync https://github.com/Textualize/textual/pull/1940sender in their constructor https://github.com/Textualize/textual/pull/1940control property which returns the control they relate to. https://github.com/Textualize/textual/pull/1940Checkbox character due to issues with Windows Terminal and Windows 10 https://github.com/Textualize/textual/issues/1934RadioButton character due to issues with Windows Terminal and Windows 10 and 11 https://github.com/Textualize/textual/issues/1934Markdown initial bullet character due to issues with Windows Terminal and Windows 10 and 11 https://github.com/Textualize/textual/issues/1982data_table attribute to DataTable events https://github.com/Textualize/textual/pull/1940list_view attribute to ListView events https://github.com/Textualize/textual/pull/1940radio_set attribute to RadioSet events https://github.com/Textualize/textual/pull/1940switch attribute to Switch events https://github.com/Textualize/textual/pull/1940hover and click methods to Pilot https://github.com/Textualize/textual/pull/1966toggle_button attribute to RadioButton and Checkbox events, replaces input https://github.com/Textualize/textual/pull/1940Color.multiply_alpha.ContentSwitcher https://github.com/Textualize/textual/issues/1945The highlight of this release is the new checkboxes / radiobuttons.
The highlight of this release is the new checkboxes / radiobuttons.
<img width="791" alt="Screenshot 2023-03-02 at 14 58 30" src="https://user-images.githubusercontent.com/554369/222465674-edbf57e9-d398-4481-8004-640d40f8a8e9.png"> <img width="791" alt="Screenshot 2023-03-02 at 14 58 17" src="https://user-images.githubusercontent.com/554369/222465680-69fe2bf7-09a4-455e-823f-5cac170ebc1c.png">
<img width="791" alt="Screenshot 2023-03-02 at 14 58 39" src="https://user-images.githubusercontent.com/554369/222465661-4b0e7700-7a34-4fae-b8ab-6005d52012e6.png">
Checkbox https://github.com/Textualize/textual/pull/1872RadioButton https://github.com/Textualize/textual/pull/1872RadioSet https://github.com/Textualize/textual/pull/1872Widget.scroll_home and Widget.scroll_end) now perform the scroll after the next refresh https://github.com/Textualize/textual/issues/1774Batch updates would occasionally leave a glitched screen until you moved the mouse.
Batch updates would occasionally leave a glitched screen until you moved the mouse.
Blog post: https://textual.textualize.io/blog/2023/02/24/textual-0120-adds-syntactical-sugar-and-batch-updates/
Blog post: https://textual.textualize.io/blog/2023/02/24/textual-0120-adds-syntactical-sugar-and-batch-updates/
Some additions to the API. Now all widgets may be disabled. There is a new batch_update context manager on App, and a prevent context manager to temporarily prevent message types from being sent. Plus usual fixes. Details below.
App.batch_update https://github.com/Textualize/textual/pull/1832Widget.disabled https://github.com/Textualize/textual/pull/1785DOMNode.notify_style_update to replace messages.StylesUpdated message https://github.com/Textualize/textual/pull/1861MessagePump.prevent context manager to temporarily suppress a given message type https://github.com/Textualize/textual/pull/1866screen.visible_widgets and screen.widgetsStylesUpdate message. https://github.com/Textualize/textual/pull/1861App.batch_update https://github.com/Textualize/textual/pull/1832Widget.disabled https://github.com/Textualize/textual/pull/1785DOMNode.notify_style_update to replace messages.StylesUpdated message https://github.com/Textualize/textual/pull/1861DataTable.show_row_labels reactive to show and hide row labels https://github.com/Textualize/textual/pull/1868DataTable.RowLabelSelected event, which is emitted when a row label is clicked https://github.com/Textualize/textual/pull/1868MessagePump.prevent context manager to temporarily suppress a given message type https://github.com/Textualize/textual/pull/1866label parameter to DataTable.add_row https://github.com/Textualize/textual/pull/1868DataTable component classes were renamed - see PR for details https://github.com/Textualize/textual/pull/1868screen.visible_widgets and screen.widgetsStylesUpdate message. https://github.com/Textualize/textual/pull/1861A few DataTable fixes. No API changes.
A few DataTable fixes. No API changes.
Breaking change: TreeNode can no longer be imported from textual.widgets; it is now available via from textual.widgets.tree import TreeNode. https://g…
This release adds an enhanced Markdown widget. See the blog post for details:
https://textual.textualize.io/blog/2023/02/15/textual-0110-adds-a-beautiful-markdown-widget/
TreeNode.expand_all https://github.com/Textualize/textual/issues/1430TreeNode.collapse_all https://github.com/Textualize/textual/issues/1430TreeNode.toggle_all https://github.com/Textualize/textual/issues/1430Animator.wait_until_complete and pilot.wait_for_scheduled_animations that allow waiting for all current and scheduled animations https://github.com/Textualize/textual/issues/1658Animator.is_being_animated that checks if an attribute of an object is being animated or is scheduled for animationInput https://github.com/Textualize/textual/pull/1676Tree.action_toggle_node to toggle a node without selecting, and bound it to <kbd>Space</kbd> https://github.com/Textualize/textual/issues/1433Tree.reset to fully reset a Tree https://github.com/Textualize/textual/issues/1437DataTable.sort to sort rows https://github.com/Textualize/textual/pull/1638DataTable.get_cell to retrieve a cell by column/row keys https://github.com/Textualize/textual/pull/1638DataTable.get_cell_at to retrieve a cell by coordinate https://github.com/Textualize/textual/pull/1638DataTable.update_cell to update a cell by column/row keys https://github.com/Textualize/textual/pull/1638DataTable.update_cell_at to update a cell at a coordinate https://github.com/Textualize/textual/pull/1638DataTable.ordered_rows property to retrieve Rows as they're currently ordered https://github.com/Textualize/textual/pull/1638DataTable.ordered_columns property to retrieve Columns as they're currently ordered https://github.com/Textualize/textual/pull/1638DataTable.coordinate_to_cell_key to find the key for the cell at a coordinate https://github.com/Textualize/textual/pull/1638DataTable.is_valid_coordinate https://github.com/Textualize/textual/pull/1638DataTable.is_valid_row_index https://github.com/Textualize/textual/pull/1638DataTable.is_valid_column_index https://github.com/Textualize/textual/pull/1638DataTable indicating row/column/cell keys https://github.com/Textualize/textual/pull/1638DataTable.get_row to retrieve the values from a row by key https://github.com/Textualize/textual/pull/1786DataTable.get_row_at to retrieve the values from a row by index https://github.com/Textualize/textual/pull/1786DataTable.get_column to retrieve the values from a column by key https://github.com/Textualize/textual/pull/1786DataTable.get_column_at to retrieve the values from a column by index https://github.com/Textualize/textual/pull/1786DataTable.HeaderSelected which is posted when header label clicked https://github.com/Textualize/textual/pull/1788DOMNode.watch and DOMNode.is_attached methods https://github.com/Textualize/textual/pull/1750DOMNode.css_tree which is a renderable that shows the DOM and CSS https://github.com/Textualize/textual/pull/1778DOMNode.children_view which is a view on to a nodes children list, use for querying https://github.com/Textualize/textual/pull/1778Markdown and MarkdownViewer widgets.--screenshot option to textual runTreeNode can no longer be imported from textual.widgets; it is now available via from textual.widgets.tree import TreeNode. https://github.com/Textualize/textual/pull/1637Tree now shows a (subdued) cursor for a highlighted node when focus has moved elsewhere https://github.com/Textualize/textual/issues/1471DataTable.add_row now accepts key argument to uniquely identify the row https://github.com/Textualize/textual/pull/1638DataTable.add_column now accepts key argument to uniquely identify the column https://github.com/Textualize/textual/pull/1638DataTable.add_row and DataTable.add_column now return lists of keys identifying the added rows/columns https://github.com/Textualize/textual/pull/1638DataTable.get_cell_value renamed to DataTable.get_value_at https://github.com/Textualize/textual/pull/1638DataTable.row_count is now a property https://github.com/Textualize/textual/pull/1638DataTable.cursor_cell renamed to DataTable.cursor_coordinate https://github.com/Textualize/textual/pull/1638
validate_cursor_cell was renamed to validate_cursor_coordinate.watch_cursor_cell was renamed to watch_cursor_coordinate.DataTable.hover_cell renamed to DataTable.hover_coordinate https://github.com/Textualize/textual/pull/1638
validate_hover_cell was renamed to validate_hover_coordinate.DataTable.data structure changed, and will be made private in upcoming release https://github.com/Textualize/textual/pull/1638DataTable.refresh_cell was renamed to DataTable.refresh_coordinate https://github.com/Textualize/textual/pull/1638DataTable.get_row_height now takes a RowKey argument instead of a row index https://github.com/Textualize/textual/pull/1638DataTable.data renamed to DataTable._data (it's now private) https://github.com/Textualize/textual/pull/1786_filter module was made public (now called filter) https://github.com/Textualize/textual/pull/1638Checkbox to Switch https://github.com/Textualize/textual/issues/1746App.install_screen name is no longer optional https://github.com/Textualize/textual/pull/1778App.query now only includes the current screen https://github.com/Textualize/textual/pull/1778DOMNode.tree now displays simple DOM structure only https://github.com/Textualize/textual/pull/1778App.install_screen now returns None rather than AwaitMount https://github.com/Textualize/textual/pull/1778DOMNode.children is now a simple sequence, the NodesList is exposed as DOMNode._nodes https://github.com/Textualize/textual/pull/1778DataTable cursor can now enter fixed columns https://github.com/Textualize/textual/pull/1799TreeNode.expand_all https://github.com/Textualize/textual/issues/1430TreeNode.collapse_all https://github.com/Textualize/textual/issues/1430TreeNode.toggle_all https://github.com/Textualize/textual/issues/1430Animator.wait_until_complete and pilot.wait_for_scheduled_animations that allow waiting for all current and scheduled animations https://github.com/Textualize/textual/issues/1658Animator.is_being_animated that checks if an attribute of an object is being animated or is scheduled for animationInput https://github.com/Textualize/textual/pull/1676Tree.action_toggle_node to toggle a node without selecting, and bound it to <kbd>Space</kbd> https://github.com/Textualize/textual/issues/1433Tree.reset to fully reset a Tree https://github.com/Textualize/textual/issues/1437DataTable.sort to sort rows https://github.com/Textualize/textual/pull/1638DataTable.get_cell to retrieve a cell by column/row keys https://github.com/Textualize/textual/pull/1638DataTable.get_cell_at to retrieve a cell by coordinate https://github.com/Textualize/textual/pull/1638DataTable.update_cell to update a cell by column/row keys https://github.com/Textualize/textual/pull/1638DataTable.update_cell_at to update a cell at a coordinate https://github.com/Textualize/textual/pull/1638DataTable.ordered_rows property to retrieve Rows as they're currently ordered https://github.com/Textualize/textual/pull/1638DataTable.ordered_columns property to retrieve Columns as they're currently ordered https://github.com/Textualize/textual/pull/1638DataTable.coordinate_to_cell_key to find the key for the cell at a coordinate https://github.com/Textualize/textual/pull/1638DataTable.is_valid_coordinate https://github.com/Textualize/textual/pull/1638DataTable.is_valid_row_index https://github.com/Textualize/textual/pull/1638DataTable.is_valid_column_index https://github.com/Textualize/textual/pull/1638DataTable indicating row/column/cell keys https://github.com/Textualize/textual/pull/1638DataTable.get_row to retrieve the values from a row by key https://github.com/Textualize/textual/pull/1786DataTable.get_row_at to retrieve the values from a row by index https://github.com/Textualize/textual/pull/1786DataTable.get_column to retrieve the values from a column by key https://github.com/Textualize/textual/pull/1786DataTable.get_column_at to retrieve the values from a column by index https://github.com/Textualize/textual/pull/1786DataTable.HeaderSelected which is posted when header label clicked https://github.com/Textualize/textual/pull/1788DOMNode.watch and DOMNode.is_attached methods https://github.com/Textualize/textual/pull/1750DOMNode.css_tree which is a renderable that shows the DOM and CSS https://github.com/Textualize/textual/pull/1778DOMNode.children_view which is a view on to a nodes children list, use for querying https://github.com/Textualize/textual/pull/1778Markdown and MarkdownViewer widgets.--screenshot option to textual runTreeNode can no longer be imported from textual.widgets; it is now available via from textual.widgets.tree import TreeNode. https://github.com/Textualize/textual/pull/1637Tree now shows a (subdued) cursor for a highlighted node when focus has moved elsewhere https://github.com/Textualize/textual/issues/1471DataTable.add_row now accepts key argument to uniquely identify the row https://github.com/Textualize/textual/pull/1638DataTable.add_column now accepts key argument to uniquely identify the column https://github.com/Textualize/textual/pull/1638DataTable.add_row and DataTable.add_column now return lists of keys identifying the added rows/columns https://github.com/Textualize/textual/pull/1638DataTable.get_cell_value renamed to DataTable.get_value_at https://github.com/Textualize/textual/pull/1638DataTable.row_count is now a property https://github.com/Textualize/textual/pull/1638DataTable.cursor_cell renamed to DataTable.cursor_coordinate https://github.com/Textualize/textual/pull/1638
validate_cursor_cell was renamed to validate_cursor_coordinate.watch_cursor_cell was renamed to watch_cursor_coordinate.DataTable.hover_cell renamed to DataTable.hover_coordinate https://github.com/Textualize/textual/pull/1638
validate_hover_cell was renamed to validate_hover_coordinate.DataTable.data structure changed, and will be made private in upcoming release https://github.com/Textualize/textual/pull/1638DataTable.refresh_cell was renamed to DataTable.refresh_coordinate https://github.com/Textualize/textual/pull/1638DataTable.get_row_height now takes a RowKey argument instead of a row index https://github.com/Textualize/textual/pull/1638DataTable.data renamed to DataTable._data (it's now private) https://github.com/Textualize/textual/pull/1786_filter module was made public (now called filter) https://github.com/Textualize/textual/pull/1638Checkbox to Switch https://github.com/Textualize/textual/issues/1746App.install_screen name is no longer optional https://github.com/Textualize/textual/pull/1778App.query now only includes the current screen https://github.com/Textualize/textual/pull/1778DOMNode.tree now displays simple DOM structure only https://github.com/Textualize/textual/pull/1778App.install_screen now returns None rather than AwaitMount https://github.com/Textualize/textual/pull/1778DOMNode.children is now a simple sequence, the NodesList is exposed as DOMNode._nodes https://github.com/Textualize/textual/pull/1778DataTable cursor can now enter fixed columns https://github.com/Textualize/textual/pull/1799grid-rows and grid-columns being computed with respect to the wrong dimension https://github.com/Textualize/textual/issues/1406overflow_x/overflow_y refreshes the layout correctly https://github.com/Textualize/textual/issues/1616Input https://github.com/Textualize/textual/issues/1657DataTable "selected" events containing wrong coordinates when mouse was used https://github.com/Textualize/textual/issues/1723MessagePump.emit and MessagePump.emit_no_wait https://github.com/Textualize/textual/pull/1738reactive.watch in favor of DOMNode.watch.A hotfix release for the textual diagnose command which didn't run on Python 3.7
A hotfix release for the textual diagnose command which didn't run on Python 3.7
textual diagnose crash on older supported Python versions. https://github.com/Textualize/textual/issues/1622Version 0.10.0 sees new cursor types on the DataTable to select rows and column, and corresponding events.
Version 0.10.0 sees new cursor types on the DataTable to select rows and column, and corresponding events.
https://user-images.githubusercontent.com/554369/213471017-4c69fa5c-4d76-48dd-b202-08281bf8eeb8.mov
There are also a number of fixes and optimizations. See below for details.
TreeNode.parent -- a read-only property for accessing a node's parent https://github.com/Textualize/textual/issues/1397TreeNode label access via TreeNode.label https://github.com/Textualize/textual/issues/1396TreeNode via TreeNode.children https://github.com/Textualize/textual/issues/1398Tree.get_node_by_id to allow getting a node by its ID https://github.com/Textualize/textual/pull/1535Tree.NodeHighlighted message, giving a on_tree_node_highlighted event handler https://github.com/Textualize/textual/issues/1400inherit_component_classes subclassing parameter to control whether component classes are inherited from base classes https://github.com/Textualize/textual/issues/1399diagnose as a textual command https://github.com/Textualize/textual/issues/1542row and column cursors to DataTable https://github.com/Textualize/textual/pull/1547selector to the methods Screen.focus_next and Screen.focus_previous that enable using a CSS selector to narrow down which widgets can get focus https://github.com/Textualize/textual/issues/1196MouseScrollUp and MouseScrollDown now inherit from MouseEvent and have attached modifier keys. https://github.com/Textualize/textual/pull/1458events.Paste now bubbles https://github.com/Textualize/textual/issues/1434none is mixed with other flags (e.g., when setting text-style) https://github.com/Textualize/textual/issues/1420Header widget now matches the header color https://github.com/Textualize/textual/issues/1459force parameter to all the scroll_* methods) https://github.com/Textualize/textual/issues/1201COMPONENT_CLASSES are now inherited from base classes https://github.com/Textualize/textual/issues/1399compute parameter to reactiveTypeError raised during compose now carries the full tracebackNodeMessage from which all node-related Tree events inheritedscrollbar-background-active and scrollbar-color-hover are no longer ignored https://github.com/Textualize/textual/pull/1480Placeholder can now have its width set to auto https://github.com/Textualize/textual/pull/1508Input when rendering after programmatic value change and related scenarios https://github.com/Textualize/textual/issues/1477 https://github.com/Textualize/textual/issues/1443DataTable.show_cursor now correctly allows cursor toggling https://github.com/Textualize/textual/pull/1547DataTable mount when fixed_columns were used https://github.com/Textualize/textual/pull/1547DataTable cursors not resetting to origin on clear() https://github.com/Textualize/textual/pull/1601ListView purely from compose https://github.com/Textualize/textual/issues/1588Only Python 3.11 has a high resolution sleep by default. This adds a more accurate sleep for windows on Python < 3.11
Only Python 3.11 has a high resolution sleep by default. This adds a more accurate sleep for windows on Python < 3.11
No new functionality so speak of, but performance has improved over the 0.8.x version. A change to how rendered content is stored has made updates fas
No new functionality so speak of, but performance has improved over the 0.8.x version. A change to how rendered content is stored has made updates faster.
There is also a fix for slow updates on Windows. See this blog post for details.
This is likely the last release of the year, so I would like to share this music video which seems strangely appropriate.
https://www.youtube.com/watch?v=kAFxLXqP8UM&ab_channel=Nightwish
Fixed issue with TextLog.clear() https://github.com/Textualize/textual/issues/1447
I really should be pealing potatoes.
I really should be pealing potatoes.
There are a few minor breaking changes in this release. See below for details.
Version 0.8.0 adds a new textual keys command which you can use to preview key events.
There are a few minor breaking changes in this release. See below for details.
<img width="1167" alt="Screenshot 2022-12-22 at 13 08 11" src="https://user-images.githubusercontent.com/554369/209141073-d420ac59-ce43-4e64-a164-728f9a167f90.png">
App.dark can now be set from App.on_load without an error being raised https://github.com/Textualize/textual/issues/1369visibility changes needing a refresh https://github.com/Textualize/textual/issues/1355textual.actions.SkipAction exception which can be raised from an action to allow parents to process bindings.textual keys preview.PRIORITY_BINDINGS class variable.char to character on Key event.key_name to name on Key event.walk_children no longer includes self in results by default https://github.com/Textualize/textual/pull/1416Added PRIORITY_BINDINGS class variable, which can be used to control if a widget's bindings have priority by default. https://github.com/Textualize/te
Mostly fixes in this release.
PRIORITY_BINDINGS class variable, which can be used to control if a widget's bindings have priority by default. https://github.com/Textualize/textual/issues/1343Binding argument universal to priority. https://github.com/Textualize/textual/issues/1343App downwards. https://github.com/Textualize/textual/issues/1343BINDINGS on an App-derived class have priority by default. https://github.com/Textualize/textual/issues/1343BINDINGS on a Screen-derived class have priority by default. https://github.com/Textualize/textual/issues/1343See the blog post for the low down on this release.
See the blog post for the low down on this release.
Tree widget which replaces TreeControl.Placeholder https://github.com/Textualize/textual/issues/1200.DirectoryTree with new Tree control."auto" will now collapse instead of filling up the available space.1fr.width of a Label is now auto.https://textual.textualize.io/blog/2022/12/11/version-060
Tree widget which replaces TreeControl.Placeholder https://github.com/Textualize/textual/issues/1200.ListView and ListItem widgets https://github.com/Textualize/textual/pull/1143DirectoryTree with new Tree control."auto" will now collapse instead of filling up the available space.1fr.width of a Label is now auto.DEFAULT_CSS that inherited from widgets with DEFAULT_CSS https://github.com/Textualize/textual/issues/1335BINDINGS when binding inheritance is set to None https://github.com/Textualize/textual/issues/1351Add get_child_by_id and get_widget_by_id, remove get_child https://github.com/Textualize/textual/pull/1146
DOMNode.ancestors no longer includes self.DOMNode.ancestors_with_self, which retains the old behaviour of
DOMNode.ancestors.DOMQuery.remove.textual.walk methods.await a Widget.remove.
https://github.com/Textualize/textual/issues/1094await a DOMQuery.remove. Note that this changes
the return value of DOMQuery.remove, which used to return self.
https://github.com/Textualize/textual/issues/1094Widget.move_child https://github.com/Textualize/textual/issues/1121Label widget https://github.com/Textualize/textual/issues/1190Read the blog post: https://textual.textualize.io/blog/2022/11/08/version-040/#version-040
Read the blog post: https://textual.textualize.io/blog/2022/11/08/version-040/#version-040
App.mount and Widget.mount. Both methods now simply take one or more
widgets as positional arguments.DOMNode.query_one now raises a TooManyMatches exception if there is
more than one matching node.
https://github.com/Textualize/textual/issues/1096App.mount and Widget.mount have new before and after parameters https://github.com/Textualize/textual/issues/778init param to reactive.watchCSS_PATH can now be a list of CSS files https://github.com/Textualize/textual/pull/1079DOMQuery.only_one https://github.com/Textualize/textual/issues/1096Nothing published for this version
Nothing published for this version
A number of fixes, and internal enhancements.
A number of fixes, and internal enhancements.
We have a new API for running textual apps asynchronously, and a much better way of running integration tests. Testing is important and we will be documenting this in a future release.
Also in this release, we've made fr units more useful. These CSS units can be used to easily create flexible layouts. See the video below:
https://user-images.githubusercontent.com/554369/199053126-e16c7047-11ae-4f97-95e7-ca264247184a.mov
Here's the full changelog
textual run breaking sys.argv https://github.com/Textualize/textual/issues/1064Header is centred https://github.com/Textualize/textual/issues/1060textual run so that it patches argv in more situationsUpdated metadata, and some assets for readme.
Updated metadata, and some assets for readme.
This is a merge of the CSS branch with a whole load of amazing features. Hope you enjoy.
This is a merge of the CSS branch with a whole load of amazing features. Hope you enjoy.
We are now returning to regular releases and working in the open. Thanks for being patient.
layout as specified in CSS by @darrenburns in https://github.com/Textualize/textual/pull/225display: none by @olivierphi in https://github.com/Textualize/textual/pull/436ansi_ by @olivierphi in https://github.com/Textualize/textual/pull/443overflow CSS rule by @darrenburns in https://github.com/Textualize/textual/pull/467align: center top; by @olivierphi in https://github.com/Textualize/textual/pull/482Widget#scroll_to_widget() by @olivierphi in https://github.com/Textualize/textual/pull/494scrollbar-gutter: stable CSS property by @olivierphi in https://github.com/Textualize/textual/pull/501scrollbar-size properties by @olivierphi in https://github.com/Textualize/textual/pull/529textual.widget.__init__.py are now lazy-loaded by @olivierphi in https://github.com/Textualize/textual/pull/584text-align CSS support by @darrenburns in https://github.com/Textualize/textual/pull/704docks references & other tidying by @darrenburns in https://github.com/Textualize/textual/pull/795Styles.css, update "Grid" styles doc page by @darrenburns in https://github.com/Textualize/textual/pull/854styles belong to a widget by @davep in https://github.com/Textualize/textual/pull/859:focus-within pseudo-selector by @darrenburns in https://github.com/Textualize/textual/pull/885Input + add title to App constructor by @darrenburns in https://github.com/Textualize/textual/pull/934Full Changelog: https://github.com/Textualize/textual/compare/v0.1.18...v0.2.0
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Bump typing extensions and Rich
Bumps Rich to latest release ## [0.1.17] - 2022-03-10 ### Changed - Bumped Rich dependency
Bumps Rich to latest release
Fixed escape key hanging on Windows
Windows support has landed. Still experimental -- let us know if you run in to any problems!
Windows support has landed. Still experimental -- let us know if you run in to any problems!
Updated Rich dependency to 11.X
Your coding agent can read these notes before it upgrades. Set up the MCP server →