NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1256 most downloaded on PyPI
Easy, practical library for making terminal apps, by providing an elegant, well-documented interface for Terminals.
Last release 4 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
12 years old
75 releases · first in 2014
enhancement: no longer depend on the '2to3' tool for python 3 support.
civis and cnorm (hide_cursor, normal_hide)
to work with terminal-type ansi by emulating support by proxy.workaround: ignore 'tparm() returned NULL', this occurs on win32 platforms using PDCurses_ where tparm() is not implemented.
keypad(), which enables keypad application keys such as the diagonal keys on the numpad.KEY_LL, KEY_LR, KEY_UL, KEY_LR, and KEY_CENTER.One column per quarter.
Nothing published for this version
Nothing published for this version
Nothing published for this version
enhancement: better support for detecting the length or sequences of externally-generated _ecma-48_ codes when using xterm or aixterm.
xterm or aixterm.enhancement: add rstrip() and lstrip(), strips both sequences and trailing or leading whitespace, respectively.
rstrip() and lstrip(), strips both sequences
and trailing or leading whitespace, respectively.length(), the
printable width of many kinds of CJK (Chinese, Japanese, Korean) ideographs
are more correctly determined.Nothing published for this version
Nothing published for this version
enhancement: allow inkey() and kbhit() to return early when interrupted by signal by passing argument _intr_continue=False.
inkey() and kbhit() to return early when
interrupted by signal by passing argument _intr_continue=False.this minor patch release resolves issues with pickling ParameterizingString and FormattingString
this minor patch release resolves issues with pickling ParameterizingString and FormattingString
Nothing published for this version
class attribute _keyboard_buf should always be available, even in custom derived classes that overload getch().
class attribute _keyboard_buf should always be available, even in custom derived classes that overload getch().
enhancement: export keyboard-read function as public method getch(), so that it may be overridden by custom terminal implementers (x/84 telnet bbs)
getch(), so
that it may be overridden by custom terminal implementers (x/84 telnet bbs)locale.getpreferredencoding() returns empty string or an
encoding that is not a valid codec for codecs.getincrementaldecoder,
fallback to ascii and emit a warning.enhancement: export keyboard-read function as public method getch() , so that it may be overridden by custom terminal implementers.
enhancement: allow inkey() and kbhit() to return early when interrupted by signal by passing argument _intr_continue=False .
enhancement: allow hpa and vpa ( move_x , move_y ) to work on tmux(1) or screen(1) by emulating support by proxy.
enhancement: add rstrip() and lstrip() , strips both sequences and trailing or leading whitespace, respectively.
enhancement: include wcwidth library support for length() : the printable width of many kinds of CJK (Chinese, Japanese, Korean) ideographs and various combining characters may now be determined.
enhancement: better support for detecting the length or sequences of externally-generated ecma-48 codes when using xterm or aixterm .
bugfix: when locale.getpreferredencoding() returns empty string or an encoding that is not valid for codecs.getincrementaldecoder , fallback to ASCII and emit a warning.
bugfix: ensure FormattingString and ParameterizingString may be pickled.
bugfix: allow ~.inkey and related to be called without a keyboard.
change : term.keyboard_fd is set None if stream or sys.stdout is not a tty, making term.inkey() , term.cbreak() , term.raw() , no-op.
bugfix: \x1bOH (KEY_HOME) was incorrectly mapped as KEY_LEFT.
deprecation: python2.5 is no longer supported (as tox does not supported).
cbreak() and raw(), which is equivalent
to tty.setcbreak() and tty.setraw(), allowing input from stdin to be
read as each key is pressed.inkey() and kbhit(), which will return 1 or more
characters as a unicode sequence, with attributes .code and .name
non-None when a multibyte sequence is received, allowing arrow keys and
such to be detected. Optional value timeout allows timed polling or
blocking.center(), rjust(), ljust(), strip(), and
strip_seqs() methods. Allows text containing sequences to be aligned
to screen, or width specified.wrap() method. allows text containing sequences to be
word-wrapped without breaking mid-sequence and honoring their printable
width.setupterm() more than once per process -- issue a
warning about what terminal kind subsequent calls will use.number_of_colors fails when
does_styling is False. resolves issue where piping tests
output would fail.does_styling to False when TERM is unknown.term.color(n) may
be called on terminals without color capabilities.term.underline('text'). would be u'text' + term.normal, now is
only u'text'.curses.error exceptions.@as_subprocess
decorator
are used to test a multitude of terminal types.@as_subprocess resolves various issues
with different terminal types that previously went untested.Forked github project erikrose/blessings to jquast/blessed , this project was previously known as blessings version 1.6 and prior.
introduced: context manager cbreak() , which is equivalent to entering terminal state by tty.setcbreak() and returning on exit, as well as the lesser recommended raw() , pairing from tty.setraw() .
introduced: inkey() , which will return one or more characters received by the keyboard as a unicode sequence, with additional attributes code and name . This allows application keys (such as the up arrow, or home key) to be detected. Optional value timeout allows for timed poll.
introduced: center() , rjust() , ljust() , allowing text containing sequences to be aligned to detected horizontal screen width, or by width specified.
introduced: wrap() method. Allows text containing sequences to be word-wrapped without breaking mid-sequence, honoring their printable width.
introduced: strip() , strips all sequences and whitespace.
introduced: strip_seqs() strip only sequences.
introduced: rstrip() and lstrip() strips both sequences and trailing or leading whitespace, respectively.
bugfix: cannot call curses.setupterm() more than once per process (from Terminal.init() ): Previously, blessed pretended to support several instances of different Terminal kind , but was actually using the kind specified by the first instantiation of Terminal . A warning is now issued. Although this misbehavior is still allowed, a warnings.WarningMessage is now emitted to notify about subsequent terminal misbehavior.
bugfix: resolved issue where number_of_colors fails when does_styling is False . Resolves issue where piping tests output would fail.
bugfix: warn and set does_styling to False when the given kind is not found in the terminal capability database.
bugfix: allow unsupported terminal capabilities to be callable just as supported capabilities, so that the return value of color (n) may be called on terminals without color capabilities.
bugfix: for terminals without underline, such as vt220, term.underline('text') would emit 'text' + term.normal . Now it emits only 'text' .
enhancement: some attributes are now properties, raise exceptions when assigned.
enhancement: pypy is now a supported python platform implementation.
enhancement: removed pokemon curses.error exceptions.
enhancement: do not ignore curses.error exceptions, unhandled curses errors are legitimate errors and should be reported as a bug.
enhancement: converted nose tests to pytest, merged travis and tox.
enhancement: pytest fixtures, paired with a new @as_subprocess decorator are used to test a multitude of terminal types.
enhancement: test accessories @as_subprocess resolves various issues with different terminal types that previously went untested.
deprecation: python2.5 is no longer supported (as tox does not supported).
Your coding agent can read these notes before it upgrades. Set up the MCP server →