Releases: python-cmd2/cmd2
3.0.0rc1 Release Candidate (2025-09-26)
Summary
cmd2 now has a dependency on rich for rich text and pretty
formatting in the terminal. Previously, cmd2 had a large amount of custom code for this purpose
that predated the existence of rich. This opens the door to even more beautiful cmd2
applications. To get the most out of the new capabilities, we encourage you to spend a little bit of
time reading the rich documentation.
Details
-
Breaking Changes
- Refactored and modernized styling and utility modules:
- Removed the legacy
table_creator.pymodule in favor ofrichtables (see the
rich_tables.py
example for more info) - Moved all string-related functions from
utils.pyto a newstring_utils.pymodule - Consolidated all string styling functions from
ansi.pyintostring_utils.py - Replaced all text style enums from
ansi.pywith modernrichstyles - Renamed
ansi.pytoterminal_utils.pyto better reflect its purpose
- Removed the legacy
- Dropped support for Python 3.9.
cmd2now requires Python 3.10 or later - Replaced
Settable.get_value()andSettable.set_value()methods with a more Pythonic
valueproperty - Removed redundant setting of a parser's
progvalue in thewith_argparser()decorator, as
this is now handled centrally inCmd._build_parser() - The
auto_load_commandsargument tocmd2.Cmd.__init__now defaults toFalse
- Refactored and modernized styling and utility modules:
-
Enhancements
- Enhanced all print methods (
poutput(),perror(),ppaged(), etc.) to natively render
richobjects, enabling beautiful and complex output - Simplified the process for setting a custom parser for
cmd2's built-in commands. See the
custom_parser.py
example for an updated guide - Introduced
Cmd.macro_arg_complete()for tab-completing macro arguments, with default path
completion that can be easily customized - Added
colors.pyandstyles.pyto provide easy access torichcolor names and manage
cmd2-specific style definitions usingStrEnum(see the
colors.py example for a
demonstration of all colors available to yourcmd2application) - Added ability to create a custom theme for a
cmd2application usingrich_utils.set_theme
(see the rich_theme.py
example for more info) - Consolidated multiple redundant examples into a few more comprehensive ones, see:
- Optimized performance of terminal fixup during command finalization by replacing
stty sane
withtermios.tcsetattr
- Enhanced all print methods (
-
Bug Fixes
- Fixed a redirection bug where
cmd2could unintentionally overwrite an application's
sys.stdout
- Fixed a redirection bug where
-
Migration Aids - these will help you iteratively migrate to
cmd23.x in stages- Published new cmd2-ansi module which is a backport of
thecmd2.ansimodule present incmd22.7.0 - Published new cmd2-table module which is a backport of
thecmd2.table_creatormodule present incmd22.7.0
- Published new cmd2-ansi module which is a backport of
3.0.0b2 (2025-09-17)
Same as 3.0.0b1 other than:
- Breaking Changes
- The
auto_load_commandsargument tocmd2.Cmd.__init__now defaults toFalse
- The
3.0.0b1 (2025-09-16)
Summary
cmd2 now has a dependency on rich for rich text and pretty formatting in the terminal. Previously, cmd2 had a large amount of custom code for this purpose that predated the existence of rich. This opens the door to even more beautiful cmd2 applications. To get the most out of the new capabilities, we encourage you to spend a little bit of time reading the rich documentation.
Details
-
Breaking Changes
- Refactored and modernized styling and utility modules:
- Removed the legacy
table_creator.pymodule in favor ofrichtables (see the rich_tables.py example for more info) - Moved all string-related functions from
utils.pyto a newstring_utils.pymodule - Consolidated all string styling functions from
ansi.pyintostring_utils.py - Replaced all text style enums from
ansi.pywith modernrichstyles - Renamed
ansi.pytoterminal_utils.pyto better reflect its purpose
- Removed the legacy
- Dropped support for Python 3.9.
cmd2now requires Python 3.10 or later - Replaced
Settable.get_value()andSettable.set_value()methods with a more Pythonicvalueproperty - Removed redundant setting of a parser's
progvalue in thewith_argparser()decorator, as this is now handled centrally inCmd._build_parser()
- Refactored and modernized styling and utility modules:
-
Enhancements
- Enhanced all print methods (
poutput(),perror(),ppaged(), etc.) to natively renderrichobjects, enabling beautiful and complex output - Simplified the process for setting a custom parser for
cmd2's built-in commands. See the custom_parser.py example for an updated guide - Introduced
Cmd.macro_arg_complete()for tab-completing macro arguments, with default path completion that can be easily customized - Added
colors.pyandstyles.pyto provide easy access torichcolor names and managecmd2-specific style definitions usingStrEnum(see the colors.py example for a demonstration of all colors available to yourcmd2application) - Added ability to create a custom theme for a
cmd2application usingrich_utils.set_theme(see the rich_theme.py example for more info) - Consolidated multiple redundant examples into a few more comprehensive ones, see:
- Optimized performance of terminal fixup during command finalization by replacing
stty sanewithtermios.tcsetattr
- Enhanced all print methods (
-
Bug Fixes
- Fixed a redirection bug where
cmd2could unintentionally overwrite an application'ssys.stdout
- Fixed a redirection bug where
2.7.0 (June 30, 2025)
- Enhancements
- Integrated rich-argparse with cmd2's default argparse help formatter (
Cmd2HelpFormatter).
- Integrated rich-argparse with cmd2's default argparse help formatter (
2.6.2 (June 26, 2025)
-
Enhancements
- Added explicit support for free-threaded versions of Python, starting with version 3.14
-
Bug Fixes
- Restored code to set a parser's
progvalue in thewith_argparserdecorator. This is to
preserve backward compatibility in thecmd22.0 family. This functionality will be removed
incmd23.0.0.
- Restored code to set a parser's
2.6.1 (June 8, 2025)
- Bug Fixes
- Fixed bug that prevented
cmd2from working withfrom __future__ import annotations
- Fixed bug that prevented
2.6.0 (May 31, 2025)
- Breaking Change
cmd22.6 supports Python 3.9+ (removed support for Python 3.8)
- Enhancements
- Added support for Python 3.14
- Added new
Cmd.ppretty()method for pretty printing arbitrary Python data structures - Clarified help text for
-t/--transcriptargument to thehistorycommand
2.5.11 (January 25, 2025)
- Bug Fixes
- Fixed duplicated parameter tables in API documentation.
2.5.10 (January 25, 2025)
- Bug Fixes
- Fixed docstring style for MkDocs API documentation so parameters are displayed properly.
2.5.9 (January 17, 2025)
- Bug Fixes
- Fixed 'index out of range' error when passing no arguments to an argparse-based command function.