NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1273 most downloaded on PyPI
Easy, practical library for making terminal apps, by providing an elegant, well-documented interface for Terminals.
Last release 20 days ago
14 Sep 2026
Ships fairly regularly
a new release about every 4 weeks
Some releases are documented
notes for 26 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
13 years old
75 releases · first in 2014
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
One column per quarter.
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
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
Performance improved in Terminal.Length and Sequence.padd by @grayjk and @avylove, #286, #287, #289, and #291
Terminal.Length and Sequence.padd by @grayjk and @avylove, #286, #287, #289, and #291Full Changelog: https://github.com/jquast/blessed/compare/1.21.0...1.22.0
bugfix infinite loop in method Terminal.wrap() when "Wide" characters of width 2 (East-Asian or Emoji) are used with a wrap width of 1, and a small pe
Terminal.wrap() when "Wide" characters of
width 2 (East-Asian or Emoji) are used with a wrap width of 1, and a small
performance enhancement, #273 and #274 by @grayjk, merged as #275introduced Terminal.get_fgcolor() and Terminal.get_bgcolor() to query the terminal for the currently set colors. #237 by @stefanholek
Terminal.get_fgcolor() and Terminal.get_bgcolor() to query
the terminal for the currently set colors. #237 by @stefanholek
RuntimeError in multithreaded
applications, #248 by @adamnovakenhancement: Terminal.rjust(), Terminal.ljust(), and Terminal.center() now accept `SupportsIndex`types, #234
Terminal.rjust(), Terminal.ljust(),
and Terminal.center() now accept SupportsIndextypes, #234
AssertionError, #235introduced: Terminal.truncate(), #212 by @fishermans-friend
bugfix: Terminal.split_seqs() for some sequences like term.move_left(3), #197
introduced: type annotations, #192 by @dlax.
end='', and document about it in location.rst, #188 by @pyfischenhancement: Instantiate SequenceTextWrapper only once in method Terminal.wrap(), #184
enhancement: Instantiate SequenceTextWrapper only once in method Terminal.wrap(), #184
From @stanislavlevin Make the actual version consistent with the pypi/tag one #181 by bumping to 1.17.11 and re-releasing, commit 5a8219087b51c183cf34
From @stanislavlevin Make the actual version consistent with the pypi/tag one #181 by bumping to 1.17.11 and re-releasing, commit 5a8219087b51c183cf34952cdbcf1794d0c7ce59
bugfix: Fix detection of shift+arrow keys when using tmux. 178.
178.* bugfix: Now imports on 3.10+
remove _build and __pycache__ and other such folders/files from sdist, #173, a regression from #161
_build and __pycache__ and other such folders/files from sdist, #173, a regression from #161Introduced: formatter() which returns callable formatters for valid text formatters such as ‘red’ or ‘bold_on_red’, returning a NullCallableString if
formatter() which returns callable formatters for valid text formatters such as ‘red’ or ‘bold_on_red’, returning a NullCallableString if passed an invalid text formatter.bugfix: Use UTF-8 for keyboard if input encoding cannot be determined.
bugfix: Use UTF-8 for keyboard if input encoding cannot be determined.
Nothing published for this version
Nothing published for this version
add pixel_height and pixel_width, for libsixel support or general curiosity, it actually works on most of the terminals I tested! This wasn't the case
pixel_height and pixel_width, for libsixel support or general curiosity, it actually works on most of the terminals I tested! This wasn't the case several years ago, closes #155__getnewargs__, with tests.Nothing published for this version
Documentation overhaul, to include plenty of examples and animated screenshots.
deprecated: the direct curses move() capability is no longer recommended, suggest to use move_xy(), which matches the return value of .get_location.
color foreground method color_rgb and background method on_color_rgb, as well as 676 common X11 color attribute names are now possible, such as term.aquamarine_on_wheat, #60.
positional arguments, (x, y) match the return value of get_location, and all other common graphics library calls, #65. values over the b``term.move``.
move_right which are strings that move the cursor one cell in the respective direction, are now also callables for moving n cells to the given direction, such as term.move_right(9), .
conditions where sys.__stdout__ has been detached in test frameworks, #126.
cursor_report, #94.
was greater than 15, #101.
keypad now flush the stream after writing their sequences.
match, term.BACKSPACE, #115 by @jwezel.
move_xy(), which matches the return value of .get_location.
with colors, such as in phrase Terminal.blue_subscript('a'). These attributes are not typically supported, anyway. Use Unicode text or 256 or 24-bit color codes instead.
module namespace.
deprecated: curses.setupterm is now called with os.devnull as the file descriptor, let us know if this causes any issues! 59.
is not a terminal, programs using Terminal.inkey may block indefinitely if a keyboard is not attached, #69.
though such value is always True since 1.9.
merge #112 to resolve locale issues on windows with python2
Nothing published for this version
Nothing published for this version
bugfix: TypeError when using PYTHONOPTIMIZE=2 environment variable, issue #84.
PYTHONOPTIMIZE=2 environment variable, issue #84.
blessed.__version__ value, issue #92.\x1b[0K and \x1b2K, issue #95.bugfix: TypeError when using PYTHONOPTIMIZE=2 environment variable, issue #84.
PYTHONOPTIMIZE=2 environment variable, issue #84.bugfix: term.wrap misbehaved for text containing newlines, #74
deprecated: function blessed.sequences.measure_length superseded by blessed.sequences.iter_parse if necessary.
Terminal.split_seqs introduced, and 4x cost reduction in related sequence-aware functions, #29.blessed.sequences.measure_length superseded by blessed.sequences.iter_parse if necessary.enhancement: method Terminal.get_locationreturns the(row, col)`` position of the cursor at the time of call for attached terminal.
returns the(row, col)`` position of the cursor at the time of call for attached terminal.stream is sys.stderr.enhancement: Terminal.inkey method can return more quickly for combinations such as Alt + Z when MetaSendsEscape is enabled, #30
enhancement: Terminal.inkey method can return more quickly for combinations such as Alt + Z when MetaSendsEscape is enabled, #30
enhancement: ~.FormattingString may now be nested, such as t.red('red', t.underline('rum')), #61
deprecated: _intr_continue arguments introduced in 1.8 are now marked deprecated in 1.10: beginning with python 3.5, the default behavior is as though…
sc and rc for Terminals of kind='ansi',
repairing Terminal class method location, #44\x1b[m was not correctly
determined on all terminal types, #45_intr_continue arguments introduced in 1.8 are now marked
deprecated in 1.10: beginning with python 3.5, the default behavior is as
though this argument is always True, blessed does the same.Nothing published for this version
enhancement: allow move_x() and like to work with 'screen-256color'.
move_x() and like to work with 'screen-256color'.kind.Your coding agent can read these notes before it upgrades. Set up the MCP server →