Skip to content

Releases: Textualize/textual

The Quickening tutorial update

19 Nov 15:53
532a6b0

Choose a tag to compare

[0.86.3] - 2024-11-19

Changed

  • Updated the tutorial (text and code) #5257

Fixed

  • Fixed a glitch with the scrollbar that occurs when you hold a to add stopwatches in the tutorial app #5257

The Quickening fix part 2

18 Nov 16:23
8d99130

Choose a tag to compare

A couple of hot-fixes.

[0.86.2] - 2024-11-18

Fixed

  • Fixed visibility glitch for widgets with an offset #5253
  • Fixed theme variables being unavailable in code until refresh_css was called #5254

The Quickening fix release

16 Nov 18:54

Choose a tag to compare

Just a tweak to the demo.

[0.86.1] - 2024-11-16

Fixed

  • Tweaks to demo

The Quickening Release

16 Nov 18:35

Choose a tag to compare

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:

Screenshot 2024-11-16 at 18 52 01
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 to Label widget for quick access to common styles #5087
  • Added App.get_theme which returns a theme by name #5087
  • Added App.register_theme and App.unregister_theme #5087
  • Added App.theme_changed_signal #5087
  • Added App.available_themes property which returns a mapping of theme names to Theme 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 now Driver.process_message #5217
  • Driver.send_event is now Driver.send_message #5217
  • Added can_focus and can_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

02 Nov 18:19
2413818

Choose a tag to compare

An interim fix, for broken focus-within pseudo-selector

[0.85.2] - 2024-11-02

  • Fixed broken focus-within #5190

The Freddy's hotfix Release

26 Oct 18:39

Choose a tag to compare

Hotfix to fix saving screenshots on Windows

[0.85.1] - 2024-10-26

Fixed

  • Fixed encoding issue when saving files such as screenshots on Windows #5182

The Freddy's Revenge Release

25 Oct 15:06

Choose a tag to compare

This versions updates the demo app. The previous demo was written quite a while ago and needed a refresh. It's not quite finished (there are plenty more widgets to cover), but it is still a bug improvement over the old one.

python -m textual

Give it a shot, we think it is pretty fun to play with.

Screen.Recording.2024-10-25.at.16.02.46.mov

There are a number of other updates in this release, and some under-the-hood changes for even smoother updates and optimizations. See below for the full list...

Enjoy!

[0.85.0] - 2024-10-25

Changed

  • Grid will now size children to the maximum height of a row #5113
  • Markdown links will be opened with App.open_url automatically #5113
  • The universal selector (*) will now not match widgets with the class -textual-system (scrollbars, notifications etc) #5113
  • Renamed Screen.can_view and Widget.can_view to Screen.can_view_entire and Widget.can_view_entire #5174

Added

  • Added Link widget #5113
  • Added open_links to Markdown and MarkdownViewer widgets #5113
  • Added App.DEFAULT_MODE #5113
  • Added Containers.HorizontalGroup and Containers.VerticalGroup #5113
  • Added $, £, , (, ) symbols to Digits #5113
  • Added Button.action parameter to invoke action when clicked #5113
  • Added immediate parameter to scroll methods #5164
  • Added textual._loop.loop_from_index #5164
  • Added min_color and max_color to Sparklines constructor, which take precedence over CSS #5174
  • Added new demo python -m textual, not quite finished but better than the old one #5174
  • Added Screen.can_view_partial and Widget.can_view_partial #5174
  • Added App.is_web property to indicate if the app is running via a web browser #5128
  • Enter and Leave events can now be used with the on decorator #5159

Fixed

  • Fixed glitchy ListView #5163

The Who You Gonna Call Release

22 Oct 13:20
3d65f2b

Choose a tag to compare

This was mainly a hotfix for a potential infinite loop in the TextArea, although there are a few fun additions: see below

[0.84.0] - 2024-10-22

Fixed

  • Fixed RadioSet not being scrollable #5100
  • Fixed infinite loop in TextArea #5154

Added

  • Added background-tint CSS rule #5117
  • Added :first-of-type, :last-of-type, :odd, and :even pseudo classes #5139

The Enhanced AF Release

10 Oct 13:55
afc310a

Choose a tag to compare

The Digits widget can now display A-F, so you can use hex!

Screenshot 2024-10-10 at 17 51 02

See below for the full changes.

[0.83.0] - 2024-10-10

Added

  • Added support for A-F to Digits widget #5094
  • Added Region.constrain #5097

Changed

  • Screen.ALLOW_IN_MAXIMIZED_VIEW will now default to App.ALLOW_IN_MAXIMIZED_VIEW #5088
  • Widgets matching .-textual-system will now be included in the maximize view by default #5088
  • Digits are now thin by default, style with text-style: bold to get bold digits #5094
  • Made Widget.absolute_offset public #5097
  • Tooltips are now displayed directly below the mouse cursor #5097
  • Region.inflect will now assume that margins overlap #5097
  • Pilot.click and friends will now accept a widget, in addition to a selector #5095

The Are you the Keymaster Release?

03 Oct 10:12
d76000d

Choose a tag to compare

The highlight of this release is the new keymap support, which enables dynamic configuration of keys -- so you can now provide a way for users of your app to customize key bindings.

Keymaps aren't documented beyond the API level at the moment. That will happen in a few releases. In the meantime, @darrenburns has written up this new feature (which he also implemented) on his blog. Check it out:

https://darren.codes/posts/textual-keymaps/

See below for the full changes:

[0.82.0] - 2024-10-03

Fixed

  • Fixed issue with screen not updating when auto_refresh was enabled #5063
  • Fixed issues regarding loading indicator #5079
  • Fixed issues with inspecting the lazy loaded widgets module #5080

Added

  • Added DOMNode.is_on_screen property #5063
  • Added support for keymaps (user configurable key bindings) #5038
  • Added descriptions to bindings for all internal widgets, and updated casing to be consistent #5062

Changed

  • Breaking change: Widget.set_loading no longer return an awaitable #5079