1.3.5 (October 21, 2021)

  • Switch from Travis to GitHub Actions.

1.3.4 (December 11, 2019)

  • Add support for async handlers (per #13).

1.3.3 (November 29, 2019)

  • Fix #11: multiword optional args of any type other than bool couldn't be used.

1.3.2 (July 23, 2019)

  • Global args are now stored in self.global_args instead of self._root_args.
  • Global args are now available in nested commands. Read more.

1.3.1 (July 22, 2019) [Removed from PyPI]

  • Commands can now access root command args via self._root_args. Read more.

1.3.0 (July 21, 2019)

  • Add support for nested commands. Read more.
  • Fix incorrect mapping from handler params to optional CLI args.

1.2.5 (June 30, 2019)

  • Prepare for postponed annotation evaluation, which will be the default in Python 4.0 (see #2).

1.2.4 (June 27, 2019)

  • Add show_defaults param to set_help util. Read more.

1.2.3 (May 13, 2019)

  • Fix Python 3.7 incompatibility.
  • Add set_sharg_map to override or disable short arg names.

1.2.2 (June 3, 2018)

  • Make _root not an abstract method.

1.2.1 (June 2, 2018)

  • Fix critical bug that disallowed string params.

1.2.0 (June 1, 2018)

  • Boolean handler params are converted into store_true arguments. Before that, params with default value of True were much confusingly converted into store_false arguments.
  • Support List[int] and similar arg types. If the param type is a subclass of typing.Iterable and has a type specified in brackets, it's converted into multivalue arg of the type in the brackets.
  • Do not print help whenever _root command is invoked.
  • Convert the cliar module into a package.
  • Add tests.
  • Switch to Poetry.


  • Add the ability to set help messages for arguments.
  • Add the ability to set metavars for arguments.


  • [Breaks backward compatibility] Base CLI class renamed from CLI to Cliar.
  • Fixed a bug where commandline args with dashes weren't mapped to corresponding param names with underscores.


  • Add the ability to override mapping between commandline args and and handler params. By default, handler params correspond to args of the same name with underscores replaced with dashes.


  • Underscores in handler names are now replaced with dashes when the corresponding command name is generated.


  • Optional arguments are now prepended with '--', not '-'.
  • Short argument names are now generated from the long ones: name handler arg corresponds to -n and --name commandline args.
  • Python 2 support dropped. Python 3.5+ required.
  • Code refactored, type hints added.


  • Code improvements for API documentation.


  • Code cleanup.


  • Setup: Python version check improved.


  • Python 2: If only the _root handler was defined, a "too few agruments" error raised. Fixed.
  • If only the _root handler is defined, the commands subparser is not added anymore.
  • Packaging improved, the installation package now includes both Python 2 and 3 sources.


  • Command descriptions did not preserve line breaks from docstrings. Fixed.


  • Commands now use the first docstring line as help and the whole docstring as description.


  • Description and help texts now preserve line breaks from docstrings.


  • Support of multiple values for a single arg added.


  • Command-line args are now parsed by explicitly calling the .parse() method.


  • The ignore decorator added to exclude a method from being converted into a command.


  • Nested CLI methods would not override parent methods. Fixed.


  • Python 2 support added.


  • Docstring added to the add_aliases function.
  • The set_name function is now less hacky.


  • Alias support added with the "add_aliases" decorator.


  • First version. Changelog started.