2.0.2
-----

Fixes:

* CLI parsing and terminal fixes: exact switch names win over abbreviations, clear errors for ``--flag=value`` on no-argument switches and for unknown ``requires``/``excludes`` names, ``Set`` no longer validates the unsplit CSV string, ``--helpall`` no longer corrupts later ``--help`` output, ``ask``/``choose``/``prompt`` no longer loop forever on closed stdin, and wide/tall images render with the right aspect (`#824 <https://github.com/tomerfiliba/plumbum/pull/824>`_)
* Subprocess and pipeline lifecycle fixes: ``bgrun`` kills and reaps the process when the body raises, pipeline call-time args bind to the source command, leaked pipeline pipes are closed, the async TEE handles long lines and multibyte characters and reaps on failure, equal timeout deadlines no longer kill the timeout thread, and daemon fixes (`#822 <https://github.com/tomerfiliba/plumbum/pull/822>`_)
* Path/fs edge cases: ``RemotePath.unlink`` no longer removes directories recursively and handles symlinks via lstat, ``RemotePath.access`` supports ``F_OK`` and requires every requested permission bit, ``LocalPath.chown`` leaves an unspecified owner/group unchanged, and ``AtomicFile.locked`` honors ``blocking=False`` for the in-process thread lock (`#825 <https://github.com/tomerfiliba/plumbum/pull/825>`_)
* Don't change the global ``SIGPIPE`` disposition in the CLI (`#834 <https://github.com/tomerfiliba/plumbum/pull/834>`_)
* Keep the return code off the last line of session output (`#830 <https://github.com/tomerfiliba/plumbum/pull/830>`_)
* ``Path.parent`` no longer raises ``IndexError`` on the filesystem root (`#827 <https://github.com/tomerfiliba/plumbum/pull/827>`_)
* Quote paths, cwd, and env names in remote shell command lines (`#821 <https://github.com/tomerfiliba/plumbum/pull/821>`_)
* ``colorlib`` correctness fixes: stdout guard, ``Color(0)``, ``from_ansi``, bold-off (`#823 <https://github.com/tomerfiliba/plumbum/pull/823>`_)

Docs:

* Update terminal color support link to its permanent home (`#829 <https://github.com/tomerfiliba/plumbum/pull/829>`_)
* Update example output to match the code (`#828 <https://github.com/tomerfiliba/plumbum/pull/828>`_)

Internal:

* Remove a redundant class definition and fix indentation (`#832 <https://github.com/tomerfiliba/plumbum/pull/832>`_)
* Bump ``actions/checkout`` and ``astral-sh/setup-uv`` (`#826 <https://github.com/tomerfiliba/plumbum/pull/826>`_, `#831 <https://github.com/tomerfiliba/plumbum/pull/831>`_, `#833 <https://github.com/tomerfiliba/plumbum/pull/833>`_)


2.0.1
-----

Fixes:

* Make ``SwitchInfo`` hashable again so ``requires=``/``excludes=`` work (`#818 <https://github.com/tomerfiliba/plumbum/pull/818>`_)

Internal:

* Drop unused ``conda.recipe`` (`#819 <https://github.com/tomerfiliba/plumbum/pull/819>`_)


2.0.0
-----

Features:

* Support async mode (`#768 <https://github.com/tomerfiliba/plumbum/pull/768>`_)
    * Support ``popen`` on async pipelines (`#795 <https://github.com/tomerfiliba/plumbum/pull/795>`_, `#804 <https://github.com/tomerfiliba/plumbum/pull/804>`_)
* More pathlib API supported (`#779 <https://github.com/tomerfiliba/plumbum/pull/779>`_)
* Support color string processing (`#774 <https://github.com/tomerfiliba/plumbum/pull/774>`_)
* Remove pywin32 dependency and replace WinAPI calls with a custom ctypes wrapper (`#766 <https://github.com/tomerfiliba/plumbum/pull/766>`_)
* Full static typing
    * Add paramiko machine typing (`#746 <https://github.com/tomerfiliba/plumbum/pull/746>`_)
    * Add remote typing (`#744 <https://github.com/tomerfiliba/plumbum/pull/744>`_)
    * Add sshmachine typing (`#745 <https://github.com/tomerfiliba/plumbum/pull/745>`_)
    * Add typing for color (`#730 <https://github.com/tomerfiliba/plumbum/pull/730>`_)
    * Add typing for fs (`#737 <https://github.com/tomerfiliba/plumbum/pull/737>`_)
    * Add typing for local machine (`#743 <https://github.com/tomerfiliba/plumbum/pull/743>`_)
    * Typing paths (`#733 <https://github.com/tomerfiliba/plumbum/pull/733>`_)
    * Adding rest of typing (`#739 <https://github.com/tomerfiliba/plumbum/pull/739>`_)
    * Enable tc ruff check (`#752 <https://github.com/tomerfiliba/plumbum/pull/752>`_)
    * More safe types (`#741 <https://github.com/tomerfiliba/plumbum/pull/741>`_)
    * Should be safe types (`#740 <https://github.com/tomerfiliba/plumbum/pull/740>`_)
    * Type only session (`#742 <https://github.com/tomerfiliba/plumbum/pull/742>`_)
    * Types for Application (`#735 <https://github.com/tomerfiliba/plumbum/pull/735>`_)
    * Typing for commands (`#738 <https://github.com/tomerfiliba/plumbum/pull/738>`_)
    * Type examples too (`#748 <https://github.com/tomerfiliba/plumbum/pull/748>`_)
    * Typing fixes from Ruff (`#749 <https://github.com/tomerfiliba/plumbum/pull/749>`_)
    * Minor typing updates (`#780 <https://github.com/tomerfiliba/plumbum/pull/780>`_)
* New daemon implementation avoiding fork in certain code paths to improve portability (`#783 <https://github.com/tomerfiliba/plumbum/pull/783>`_)
    * Make the daemon launcher private to avoid exposing internals (`#794 <https://github.com/tomerfiliba/plumbum/pull/794>`_)
* Application instances now provide bash and fish completions out of the box (`#782 <https://github.com/tomerfiliba/plumbum/pull/782>`_)
* Drop use of ``atexit`` for color handling to avoid teardown issues (`#785 <https://github.com/tomerfiliba/plumbum/pull/785>`_)

Removed:

* Removed the long-deprecated path aliases ``.basename``, ``.isdir()``, ``.isfile()``, and ``.islink()``; use ``.name``, ``.is_dir()``, ``.is_file()``, and ``.is_symlink()`` instead.
* Removed the deprecated ``SshMachine.nohup()`` method; use the command ``.nohup`` modifier or ``daemonic_popen()`` instead.

Deprecated:

* ``Style.print_`` (a Python 2 era shortcut) now emits a ``FutureWarning``; use ``.print`` instead.

Fixes:

* HTMLStyle should respect the color setting (`#776 <https://github.com/tomerfiliba/plumbum/pull/776>`_)
* Make cache clear abstract (`#747 <https://github.com/tomerfiliba/plumbum/pull/747>`_)
* Use ``perf_counter`` instead of datetime for Progress (`#754 <https://github.com/tomerfiliba/plumbum/pull/754>`_)
* ``BrokenPipeError`` when piping CLI help output to head (`#727 <https://github.com/tomerfiliba/plumbum/pull/727>`_)
* Fill out ``all`` and ``dir`` for modules to improve introspection (`#793 <https://github.com/tomerfiliba/plumbum/pull/793>`_)
* Fix quoting inconsistency between standalone commands and pipelines (`#792 <https://github.com/tomerfiliba/plumbum/pull/792>`_)
* Only register shutdown if a timeout was requested to avoid spurious handlers (`#784 <https://github.com/tomerfiliba/plumbum/pull/784>`_)
* Reduce various warnings reported by linters and at runtime (`#781 <https://github.com/tomerfiliba/plumbum/pull/781>`_)
* Fix O(n^2) performance in ``StdinDataRedirection.popen`` (`#798 <https://github.com/tomerfiliba/plumbum/pull/798>`_)
* Correct async remote streaming, pipeline TEE, and command binding (`#806 <https://github.com/tomerfiliba/plumbum/pull/806>`_)
* Fix a sweep of pre-2.0 bugs across cli, paths, and commands (`#808 <https://github.com/tomerfiliba/plumbum/pull/808>`_)
* Fix assorted pre-2.0 correctness issues, including ``stem``, the SSH tunnel timeout, and ``Set`` completion (`#809 <https://github.com/tomerfiliba/plumbum/pull/809>`_)
* Make ``**`` glob recursively like pathlib (`#628 <https://github.com/tomerfiliba/plumbum/pull/628>`_, `#812 <https://github.com/tomerfiliba/plumbum/pull/812>`_)
* Fix SSH drive-letter path handling on Windows (`#762 <https://github.com/tomerfiliba/plumbum/pull/762>`_)

Tests:

* Need ``ImportError`` for ``plumbum.cmd`` (`#769 <https://github.com/tomerfiliba/plumbum/pull/769>`_)
* Set ``LANG=C`` in pytest to fix locale-dependent test failures (`#772 <https://github.com/tomerfiliba/plumbum/pull/772>`_)
* Support pytest 9 (`#757 <https://github.com/tomerfiliba/plumbum/pull/757>`_)
* pytest ``log_level`` is better than ``log_cli_level`` (`#756 <https://github.com/tomerfiliba/plumbum/pull/756>`_)
* Increased test coverage and related test improvements (`#789 <https://github.com/tomerfiliba/plumbum/pull/789>`_)

Internal:

* Adding more slots (`#750 <https://github.com/tomerfiliba/plumbum/pull/750>`_)
* Even more slots (`#751 <https://github.com/tomerfiliba/plumbum/pull/751>`_)
* tid imports (`#753 <https://github.com/tomerfiliba/plumbum/pull/753>`_)
* Fix badge showing wrong branch (`#736 <https://github.com/tomerfiliba/plumbum/pull/736>`_)
* Fix links in changelog (`#732 <https://github.com/tomerfiliba/plumbum/pull/732>`_)
* Add ``AGENTS.md`` and avoid extra files (`#803 <https://github.com/tomerfiliba/plumbum/pull/803>`_)
* Remove dead code and simplify a few spots (`#811 <https://github.com/tomerfiliba/plumbum/pull/811>`_)
* Tighten loose type annotations across the public API (`#810 <https://github.com/tomerfiliba/plumbum/pull/810>`_)
* Make module import lazy (`#814 <https://github.com/tomerfiliba/plumbum/pull/814>`_)

Docs:

* Converted docs and changelog formatting, moved to Furo theme and fixed local build issues and links (`#787 <https://github.com/tomerfiliba/plumbum/pull/787>`_, `#786 <https://github.com/tomerfiliba/plumbum/pull/786>`_)
* Fixed various documentation warnings and added missing API docs (`#791 <https://github.com/tomerfiliba/plumbum/pull/791>`_)
* Filled out older NEWS/changes entries and added a couple of missing docs files (`#790 <https://github.com/tomerfiliba/plumbum/pull/790>`_, `#788 <https://github.com/tomerfiliba/plumbum/pull/788>`_)

CI:

* Test on prerelease of 3.15 (`#771 <https://github.com/tomerfiliba/plumbum/pull/771>`_)
* Update versions (`#763 <https://github.com/tomerfiliba/plumbum/pull/763>`_)
* Updating ssh script (`#764 <https://github.com/tomerfiliba/plumbum/pull/764>`_)
* Use PyPy 3.11 (`#770 <https://github.com/tomerfiliba/plumbum/pull/770>`_)
* Bump ``setup-uv`` to maintained tag scheme (`#799 <https://github.com/tomerfiliba/plumbum/pull/799>`_)


1.10.0
------

* Add Python π, drop Python 3.8 (`#705 <https://github.com/tomerfiliba/plumbum/pull/705>`_)
* CLI: Fix flag invoke behavior to respect ``False`` values (`#724 <https://github.com/tomerfiliba/plumbum/pull/724>`_)
* CLI: Allow subapplication registration under multiple subcommand names (`#725 <https://github.com/tomerfiliba/plumbum/pull/725>`_)
* CLI: Better support for future annotations on 3.9 (`#723 <https://github.com/tomerfiliba/plumbum/pull/723>`_)
* CLI: Termsize determination fixed on Linux Python 3.14, broken due to wrong struct size (`#721 <https://github.com/tomerfiliba/plumbum/pull/721>`_)
* Drop some unused variables (`#700 <https://github.com/tomerfiliba/plumbum/pull/700>`_)
* Simpler urljoin (`#707 <https://github.com/tomerfiliba/plumbum/pull/707>`_)
* Use SPDX license identifier (`#702 <https://github.com/tomerfiliba/plumbum/pull/702>`_)

1.9.0
-----

* Drop Python <3.8 (`#683 <https://github.com/tomerfiliba/plumbum/pull/683>`_)
* Add 3.13 testing and classifiers (`#690 <https://github.com/tomerfiliba/plumbum/pull/690>`_)
* setuptools-less installs couldn't translate, add test (`#373 <https://github.com/tomerfiliba/plumbum/pull/373>`_)
* Use importlib resources (`#680 <https://github.com/tomerfiliba/plumbum/pull/680>`_)
* Replaced ``NotImplementedError`` by ``NotImplemented`` (`#667 <https://github.com/tomerfiliba/plumbum/pull/667>`_)

1.8.3
-----

* Fix StdinDataRedirection's formulate() method (`#629 <https://github.com/tomerfiliba/plumbum/pull/629>`_)
* Missing non-zero return code from TEE'd pipe (`661 <https://github.com/tomerfiliba/plumbum/pull/661>`_)
* Fix stalling in Pipeline command (`#632 <https://github.com/tomerfiliba/plumbum/pull/632>`_)
* Use high-speed method for C locale too (`#691 <https://github.com/tomerfiliba/plumbum/pull/681>`_)
* Update index.rst - fix broken link for sh project (`#658 <https://github.com/tomerfiliba/plumbum/pull/658>`_)

1.8.2
-----

* Fix author metadata on PyPI package and add static check (`#648 <https://github.com/tomerfiliba/plumbum/pull/648>`_)
* Add testing for Python 3.12 beta 1 (`#650 <https://github.com/tomerfiliba/plumbum/pull/650>`_)
* Use Ruff for linting (`#643 <https://github.com/tomerfiliba/plumbum/pull/643>`_)
* Paths: Add type hinting for Path (`#646 <https://github.com/tomerfiliba/plumbum/pull/646>`_)

1.8.1
-----

* Accept path-like objects (`#627 <https://github.com/tomerfiliba/plumbum/pull/627>`_)
* Move the build backend to hatchling and hatch-vcs. Users should be unaffected. Third-party packaging may need to adapt to the new build system. (`#607 <https://github.com/tomerfiliba/plumbum/pull/607>`_)

1.8.0
-----

* Drop Python 2.7 and 3.5 support, add 3.11 support (`#573 <https://github.com/tomerfiliba/plumbum/pull/573>`_)
* Lots of extended checks and fixes for problems exposed.
* Color: support ``NO_COLOR``/``FORCE_COLOR`` (`#575 <https://github.com/tomerfiliba/plumbum/pull/575>`_)
* Commands: New ``iter_lines`` ``buffer_size`` parameter  (`#582 <https://github.com/tomerfiliba/plumbum/pull/582>`_)
* Commands: cache remote commands (`#583 <https://github.com/tomerfiliba/plumbum/pull/583>`_)
* SSH: Support reverse tunnels and dynamically allocated ports (`#608 <https://github.com/tomerfiliba/plumbum/pull/608>`_)
* CLI: add ``Set(..., all_markers={"*", "all"})`` and fix support for other separators (`#619 <https://github.com/tomerfiliba/plumbum/pull/619>`_)
* CLI: support future annotations (`#621 <https://github.com/tomerfiliba/plumbum/pull/621>`_)
* Color: fix the ABC (`#617 <https://github.com/tomerfiliba/plumbum/pull/617>`_)
* Exceptions: fix for exception pickling (`#586 <https://github.com/tomerfiliba/plumbum/pull/586>`_)
* Fix for StdinDataRedirection and modifiers (`#605 <https://github.com/tomerfiliba/plumbum/pull/605>`_)


1.7.2
-----

* Commands: avoid issue mktemp issue on some BSD variants (`#571 <https://github.com/tomerfiliba/plumbum/pull/571>`_)
* Better specification of dependency on pywin32 (`#568 <https://github.com/tomerfiliba/plumbum/pull/568>`_)
* Some DeprecationWarnings changed to FutureWarnings (`#567 <https://github.com/tomerfiliba/plumbum/pull/567>`_)


1.7.1
-----

* Paths: glob with local paths no longer expands the existing path too (`#552 <https://github.com/tomerfiliba/plumbum/pull/552>`_)
* Paramiko: support reverse tunnels (`#562 <https://github.com/tomerfiliba/plumbum/pull/562>`_)
* SSHMachine: support forwarding Unix sockets in ``.tunnel()`` (`#550 <https://github.com/tomerfiliba/plumbum/pull/550>`_)
* CLI: Support ``COLOR_GROUP_TITLES`` (`#553 <https://github.com/tomerfiliba/plumbum/pull/553>`_)
* Fix a deprecated in Python 3.10 warning (`#563 <https://github.com/tomerfiliba/plumbum/pull/563>`_)
* Extended testing and checking on Python 3.10 and various PyPy versions. Nox is supported for easier new-user development.

1.7.0
-----

* Commands: support ``.with_cwd()`` (`#513 <https://github.com/tomerfiliba/plumbum/pull/513>`_)
* Commands:  make ``iter_lines`` deal with decoding errors during iteration (`#525 <https://github.com/tomerfiliba/plumbum/pull/525>`_)
* Commands: fix handling of env-vars passed to plumbum BoundEnvCommands  (`#513 <https://github.com/tomerfiliba/plumbum/pull/513>`_)
* Commands: fix support for win32 in ``iter_lines`` (`#500 <https://github.com/tomerfiliba/plumbum/pull/500>`_)
* Paths: fix incorrect ``__getitem__`` method in Path (`#506 <https://github.com/tomerfiliba/plumbum/pull/506>`_)
* Paths: Remote path stat had odd OSError  (`#505 <https://github.com/tomerfiliba/plumbum/pull/505>`_)
* Paths: Fix ``RemotePath.copy()`` (`#527 <https://github.com/tomerfiliba/plumbum/pull/527>`_)
* Paths: missing ``__fspath__`` added (`#498 <https://github.com/tomerfiliba/plumbum/pull/498>`_)
* SSH: better error reporting on SshSession error (`#515 <https://github.com/tomerfiliba/plumbum/pull/515>`_)
* Internal: redesigned CI, major cleanup to setuptools distribution, Black formatting, style checking throughout.


1.6.9
-----

* Last version to support Python 2.6; added python_requires for future versions (`#507 <https://github.com/tomerfiliba/plumbum/pull/507>`_)
* Paths: Fix bug with subscription operations (`#498 <https://github.com/tomerfiliba/plumbum/pull/498>`_), (`#506 <https://github.com/tomerfiliba/plumbum/pull/506>`_)
* Paths: Fix resolve (`#492 <https://github.com/tomerfiliba/plumbum/pull/492>`_)
* Commands: Fix resolve (`#491 <https://github.com/tomerfiliba/plumbum/pull/491>`_)
* Commands: Add context manager on popen (`#495 <https://github.com/tomerfiliba/plumbum/pull/495>`_)
* Several smaller fixes (`#500 <https://github.com/tomerfiliba/plumbum/pull/500>`_), (`#505 <https://github.com/tomerfiliba/plumbum/pull/505>`_)


1.6.8
-----
* Exceptions: Changed ProcessExecutionError's formatting to be more user-friendly (`#456 <https://github.com/tomerfiliba/plumbum/issues/456>`_)
* Commands: support for per-line timeout with iter_lines (`#454 <https://github.com/tomerfiliba/plumbum/pull/454>`_)
* Commands: support for piping stdout/stderr to a logger (`#454 <https://github.com/tomerfiliba/plumbum/pull/454>`_)
* Paths: support composing paths using subscription operations (`#455 <https://github.com/tomerfiliba/plumbum/pull/455>`_)
* CLI: Improved 'Set' validator to allow non-string types, and CSV params (`#452 <https://github.com/tomerfiliba/plumbum/pull/452>`_)
* TypedEnv: Facility for modeling environment-variables into python data types (`#451 <https://github.com/tomerfiliba/plumbum/pull/451>`_)
* Commands: execute local/remote commands via a magic ``.cmd`` attribute (`#450 <https://github.com/tomerfiliba/plumbum/pull/450>`_)

1.6.7
-----
* Commands: Added ``run_*`` methods as an alternative to modifiers (`#386 <https://github.com/tomerfiliba/plumbum/pull/386>`_)
* CLI: Added support for ``ALLOW_ABREV`` (`#401 <https://github.com/tomerfiliba/plumbum/pull/401>`_)
* CLI: Added ``DESCRIPTION_MORE``, preserves spacing (`#378 <https://github.com/tomerfiliba/plumbum/pull/378>`_)
* Color: Avoid throwing error in atexit in special cases (like pytest) (`#393 <https://github.com/tomerfiliba/plumbum/pull/393>`_)
* Including Python 3.7 in testing matrix.
* Smaller bugfixes and other testing improvements.

1.6.6
-----
* Critical Bugfix: High-speed (English) translations could break the CLI module (`#371 <https://github.com/tomerfiliba/plumbum/issues/371>`_)
* Small improvement to wheels packaging

1.6.5
-----

* Critical Bugfix: Syntax error in image script could break pip installs (`#366 <https://github.com/tomerfiliba/plumbum/pull/366>`_)
* CLI: Regression fix: English apps now load as fast as in 1.6.3 (`#364 <https://github.com/tomerfiliba/plumbum/issues/364>`_)
* CLI: Missing colon restored in group names
* Regression fix: Restored non-setuptools installs (but really, why would you not have setuptools?) (`#367 <https://github.com/tomerfiliba/plumbum/pull/367>`_)

1.6.4
-----
* CLI: Support for localization (`#339 <https://github.com/tomerfiliba/plumbum/pull/339>`_), with:

  - Russian by Pavel Pletenev (`#339 <https://github.com/tomerfiliba/plumbum/pull/339>`_) 🇷🇺
  - Dutch by Roel Aaij (`#351 <https://github.com/tomerfiliba/plumbum/pull/351>`_) 🇳🇱
  - French by Joel Closier (`#352 <https://github.com/tomerfiliba/plumbum/pull/352>`_) 🇫🇷
  - German by Christoph Hasse (`#353 <https://github.com/tomerfiliba/plumbum/pull/353>`_) 🇩🇪
  - Pulls with more languages welcome!
* CLI: Support for ``MakeDirectory`` (`#339 <https://github.com/tomerfiliba/plumbum/pull/339>`_)
* Commands: Fixed unicode input/output on Python 2 (`#341 <https://github.com/tomerfiliba/plumbum/pull/341>`_)
* Paths: More updates for pathlib compatibility (`#325 <https://github.com/tomerfiliba/plumbum/pull/325>`_)
* Terminal: Changed ``prompt()``'s default value for ``type`` parameter from ``int`` to ``str`` to match existing docs (`#327 <https://github.com/tomerfiliba/plumbum/issues/327>`_)
* Remote: Support ``~`` in PATH for a remote (`#293 <https://github.com/tomerfiliba/plumbum/issues/293>`_)
* Remote: Fixes for globbing with spaces in filename on a remote server (`#322 <https://github.com/tomerfiliba/plumbum/issues/322>`_)
* Color: Fixes to image plots, better separation (`#324 <https://github.com/tomerfiliba/plumbum/pull/324>`_)
* Python 3.3 has been removed from Travis and Appveyor.
* Several bugs fixed

1.6.3
-----
* Python 3.6 is now supported, critical bug fixed  (`#302 <https://github.com/tomerfiliba/plumbum/issues/302>`_)
* Commands: Better handling of return codes for pipelines (`#288 <https://github.com/tomerfiliba/plumbum/pull/288>`_)
* Paths: Return split support (regression) (`#286 <https://github.com/tomerfiliba/plumbum/issues/286>`_) - also supports dummy args for better ``str`` compatibility
* Paths: Added support for Python 3.6 path protocol
* Paths: Support Python's ``in`` syntax
* CLI: Added Config parser (provisional) (`#304 <https://github.com/tomerfiliba/plumbum/pull/304>`_)
* Color: image plots with ``python -m plumbum.cli.image`` (`#304 <https://github.com/tomerfiliba/plumbum/pull/304>`_)
* SSH: No longer hangs for ``timeout`` seconds on failure (`#306 <https://github.com/tomerfiliba/plumbum/issues/306>`_)
* Test improvements, especially on non-linux systems

1.6.2
-----
* CLI: ``Progress`` now has a clear keyword that hides the bar on completion
* CLI: ``Progress`` without clear now starts on next line without having to manually add ``\n``.
* Commands: modifiers now accept a timeout parameter (`#281 <https://github.com/tomerfiliba/plumbum/pull/281>`_)
* Commands: ``BG`` modifier now allows ``stdout``/``stderr`` redirection (to screen, for example) (`#258 <https://github.com/tomerfiliba/plumbum/pull/258>`_)
* Commands: Modifiers no longer crash on repr (see `#262 <https://github.com/tomerfiliba/plumbum/issues/262>`_)
* Remote: ``nohup`` works again, typo fixed (`#261 <https://github.com/tomerfiliba/plumbum/issues/261>`_)
* Added better support for SunOS and other OS's. (`#260 <https://github.com/tomerfiliba/plumbum/pull/260>`_)
* Colors: Context manager flushes stream now, provides more consistent results
* Other smaller bugfixes, better support for Python 3.6+

1.6.1
-----

* CLI: ``Application`` subclasses can now be run directly, instead of calling ``.run()``, to facilitate using as entry points (`#237 <https://github.com/tomerfiliba/plumbum/pull/237>`_)
* CLI: ``gui_open`` added to allow easy opening of paths in default gui editor (`#239 <https://github.com/tomerfiliba/plumbum/pull/239>`_)
* CLI: More control over help message (`#233 <https://github.com/tomerfiliba/plumbum/pull/233>`_)
* Remote: ``cwd`` is now stashed to reduce network usage (similar to Plumbum <1.6 behavior), and absolute paths are faster, (`#238 <https://github.com/tomerfiliba/plumbum/pull/238>`_)
* Bugfix: Pipelined return codes now give correct attribution (`#243 <https://github.com/tomerfiliba/plumbum/pull/243>`_)
* Bugfix: ``Progress`` works on Python 2.6 (`#230 <https://github.com/tomerfiliba/plumbum/issues/230>`_)
* Bugfix: Colors now work with more terminals (`#231 <https://github.com/tomerfiliba/plumbum/issues/231>`_)
* Bugfix: Getting an executable no longer returns a directory  (`#234 <https://github.com/tomerfiliba/plumbum/issues/234>`_)
* Bugfix: Iterdir now works on Python <3.5
* Testing is now expanded and fully written in Pytest, with coverage reporting.
* Added support for Conda ( as of 1.6.2, use the ``-c conda-forge`` channel)

1.6.0
-----
* Added support for Python 3.5, PyPy, and better Windows and Mac support, with CI testing (`#218 <https://github.com/tomerfiliba/plumbum/pull/218>`_, `#217 <https://github.com/tomerfiliba/plumbum/pull/217>`_, `#226 <https://github.com/tomerfiliba/plumbum/pull/226>`_)
* Colors: Added colors module, support for colors added to cli (`#213 <https://github.com/tomerfiliba/plumbum/pull/213>`_)
* Machines: Added ``.get()`` method for checking several commands. (`#205 <https://github.com/tomerfiliba/plumbum/pull/205>`_)
* Machines: ``local.cwd`` now is the current directory even if you change the directory with non-Plumbum methods (fixes unexpected behavior). (`#207 <https://github.com/tomerfiliba/plumbum/pull/207>`_)
* SSHMachine: Better error message for SSH (`#211 <https://github.com/tomerfiliba/plumbum/pull/211>`_)
* SSHMachine: Support for FreeBSD remote (`#220 <https://github.com/tomerfiliba/plumbum/pull/220>`_)
* Paths: Now a subclass of ``str``, can be opened directly (`#228 <https://github.com/tomerfiliba/plumbum/pull/228>`_)
* Paths: Improved pathlib compatibility with several additions and renames (`#223 <https://github.com/tomerfiliba/plumbum/pull/223>`_)
* Paths: Added globbing multiple patterns at once  (`#221 <https://github.com/tomerfiliba/plumbum/pull/221>`_)
* Commands: added ``NOHUP`` modifier (`#221 <https://github.com/tomerfiliba/plumbum/pull/221>`_)
* CLI: added positional argument validation (`#225 <https://github.com/tomerfiliba/plumbum/pull/225>`_)
* CLI: added ``envname``, which allows you specify an environment variable for a ``SwitchAttr`` (`#216 <https://github.com/tomerfiliba/plumbum/pull/216>`_)
* CLI terminal: added ``Progress``, a command line progress bar for iterators and ranges (`#214 <https://github.com/tomerfiliba/plumbum/pull/214>`_)
* Continued to clean out Python 2.5 hacks

1.5.0
-----
* Removed support for Python 2.5. (Travis CI does not support it anymore)
* CLI: add ``invoke``, which allows you to programmatically run applications (`#149 <https://github.com/tomerfiliba/plumbum/pull/149>`_)
* CLI: add ``--help-all`` and various cosmetic fixes: (`#125 <https://github.com/tomerfiliba/plumbum/pull/125>`_),
  (`#126 <https://github.com/tomerfiliba/plumbum/pull/126>`_), (`#127 <https://github.com/tomerfiliba/plumbum/pull/127>`_)
* CLI: add ``root_app`` property (`#141 <https://github.com/tomerfiliba/plumbum/pull/141>`_)
* Machines: ``getattr`` now raises ``AttributeError`` instead of ``CommandNotFound`` (`#135 <https://github.com/tomerfiliba/plumbum/pull/135>`_)
* Paramiko: ``keep_alive`` support (`#186 <https://github.com/tomerfiliba/plumbum/pull/186>`_)
* Paramiko: does not support piping explicitly now (`#160 <https://github.com/tomerfiliba/plumbum/pull/160>`_)
* Parmaiko: Added pure SFTP backend, gives STFP v4+ support (`#188 <https://github.com/tomerfiliba/plumbum/pull/188>`_)
* Paths: bugfix to ``cwd`` interaction with ``Path`` (`#142 <https://github.com/tomerfiliba/plumbum/pull/142>`_)
* Paths: read/write now accept an optional encoding parameter (`#148 <https://github.com/tomerfiliba/plumbum/issues/148>`_)
* Paths: Suffix support similar to the Python 3.4 standard library ``pathlib`` (`#198 <https://github.com/tomerfiliba/plumbum/pull/198>`_)
* Commands: renamed ``setenv`` to ``with_env`` (`#143 <https://github.com/tomerfiliba/plumbum/pull/143>`_)
* Commands: pipelines will now fail with ``ProcessExecutionError`` if the source process fails (`#145 <https://github.com/tomerfiliba/plumbum/issues/145>`_)
* Commands: added ``TF`` and ``RETCODE`` modifiers (`#202 <https://github.com/tomerfiliba/plumbum/pull/202>`_)
* Experimental concurrent machine support in ``experimental/parallel.py``
* Several minor bug fixes, including Windows and Python 3 fixes (`#199 <https://github.com/tomerfiliba/plumbum/pull/199>`_,  `#195 <https://github.com/tomerfiliba/plumbum/pull/195>`_)

1.4.2
-----
* Paramiko now supports Python 3, enabled support in Plumbum
* Terminal: added ``prompt()``, bugfix to ``get_terminal_size()`` (`#113 <https://github.com/tomerfiliba/plumbum/pull/113>`_)
* CLI: added ``cleanup()``, which is called after ``main()`` returns
* CLI: bugfix to ``CountOf`` (`#118 <https://github.com/tomerfiliba/plumbum/issues/118>`_)
* Commands: Add a TEE modifier (`#117 <https://github.com/tomerfiliba/plumbum/pull/117>`_)
* Remote machines: bugfix to ``which``, bugfix to remote environment variables (`#122 <https://github.com/tomerfiliba/plumbum/pull/122>`_)
* Path: ``read()``/``write()`` now operate on bytes

1.4.1
-----
* Force ``/bin/sh`` to be the shell in ``SshMachine.session()`` (`#111 <https://github.com/tomerfiliba/plumbum/issues/111>`_)
* Added ``islink()`` and ``unlink()`` to path objects (`#100 <https://github.com/tomerfiliba/plumbum/pull/100>`_,
  `#103 <https://github.com/tomerfiliba/plumbum/pull/103>`_)
* Added ``access`` to path objects
* Faster ``which`` implementation (`#98 <https://github.com/tomerfiliba/plumbum/pull/98>`_)
* Several minor bug fixes

1.4
---
* Moved ``atomic`` and ``unixutils`` into the new ``fs`` package (file-system related utilities)
* Dropped ``plumbum.utils`` legacy shortcut in favor of ``plumbum.path.utils``
* Bugfix: the left-hand-side process of a pipe wasn't waited on, leading to zombies (`#89 <https://github.com/tomerfiliba/plumbum/issues/89>`_)
* Added ``RelativePath`` (the result of ``Path.relative_to``)
* Fixed more text alignment issues in ``cli.Application.help()``
* Introduced ``ask()`` and ``choose`` to ``cli.terminal``
* Bugfix: Path comparison operators were wrong
* Added connection timeout to ``RemoteMachine``

1.3
---
* ``Command.popen``: a new argument, ``new_session`` may be passed to ``Command.popen``, which runs the given
  in a new session (``setsid`` on POSIX, ``CREATE_NEW_PROCESS_GROUP`` on Windows)
* ``Command.Popen``: args can now also be a list (previously, it was required to be a tuple). See
* ``local.daemonize``: run commands as full daemons (double-fork and ``setsid``) on POSIX systems, or
  detached from their controlling console and parent (on Windows).
* ``list_processes``: return a list of running process (local/remote machines)
* ``SshMachine.nohup``: "daemonize" remote commands via ``nohup`` (not really a daemon, but good enough)
* ``atomic``: Atomic file operations (``AtomicFile``, ``AtomicCounterFile`` and ``PidFile``)
* ``copy`` and ``move``: the ``src`` argument can now be a list of files to move, e.g., ``copy(["foo", "bar"], "/usr/bin")``
* list local and remote processes
* cli: better handling of text wrapping in the generated help message
* cli: add a default ``main()`` method that checks for unknown subcommands
* terminal: initial commit (``get_terminal_size``)
* packaging: the package was split into subpackages; it grew too big for a flat namespace.
  imports are not expected to be broken by this change
* SshMachine: added ``password`` parameter, which relies on `sshpass <https://manpages.ubuntu.com/manpages/focal/man1/sshpass.1.html>`_ to feed the
  password to ``ssh``. This is a security risk, but it's occasionally necessary. Use this with caution!
* Commands now have a ``machine`` attribute that points to the machine they run on
* Commands gained ``setenv``, which creates a command with a bound environment
* Remote path: several fixes to ``stat`` (``StatRes``)
* cli: add lazily-loaded subcommands (e.g., ``MainApp.subcommand("foo", "my.package.foo.FooApp")``), which are imported
  on demand
* Paths: added `relative_to and split <https://github.com/tomerfiliba/plumbum/blob/master/tests/test_local.py>`_,
  which (respectively) computes the difference between two paths and splits paths into lists of nodes
* cli: ``Predicate`` became a class decorator (it exists solely for pretty-printing anyway)
* PuttyMachine: `bugfix <https://github.com/tomerfiliba/plumbum/issues/85>`_

1.2
---
* Path: added `chmod <https://github.com/tomerfiliba/plumbum/pull/49>`_
* Path: added `link and symlink <https://github.com/tomerfiliba/plumbum/issues/65>`_
* Path: ``walk()`` now applies filter recursively (`#64 <https://github.com/tomerfiliba/plumbum/issues/64>`_)
* Commands: added `Append redirect <https://github.com/tomerfiliba/plumbum/pull/54>`_
* Commands: fix ``_subprocess`` issue (`#59 <https://github.com/tomerfiliba/plumbum/issues/59>`_)
* Commands: add ``__file__`` to module hack (`#66 <https://github.com/tomerfiliba/plumbum/issues/66>`_)
* Paramiko: add `'username' and 'password' <https://github.com/tomerfiliba/plumbum/pull/52>`_
* Paramiko: add `'timeout' and 'look_for_keys' <https://github.com/tomerfiliba/plumbum/pull/67>`_
* Python 3: fix `#56 <https://github.com/tomerfiliba/plumbum/issues/56>`_ and `#55 <https://github.com/tomerfiliba/plumbum/pull/55>`_

1.1
---
* `Paramiko <https://pypi.org/project/paramiko/>`_ integration
  (`#10 <https://github.com/tomerfiliba/plumbum/issues/10>`_)
* CLI: now with built-in support for `sub-commands <https://plumbum.readthedocs.io/en/latest/cli.html#sub-commands>`_.
  See also: `#43 <https://github.com/tomerfiliba/plumbum/issues/43>`_
* The "import hack" has moved to the package's ``__init__.py``, to make it importable directly
  (`#45 <https://github.com/tomerfiliba/plumbum/pull/45>`_)
* Paths now support ``chmod`` (on POSIX platform) (`#49 <https://github.com/tomerfiliba/plumbum/pull/49>`_)
* The argument name of a ``SwitchAttr`` can now be given to it (defaults to ``VALUE``)
  (`#46 <https://github.com/tomerfiliba/plumbum/pull/46>`_)

1.0.1
-----
* Windows: path are no longer converted to lower-case, but ``__eq__`` and ``__hash__`` operate on
  the lower-cased result (`#38 <https://github.com/tomerfiliba/plumbum/issues/38>`_)
* Properly handle empty strings in the argument list (`#41 <https://github.com/tomerfiliba/plumbum/issues/41>`_)
* Relaxed type-checking of ``LocalPath`` and ``RemotePath`` (`#35 <https://github.com/tomerfiliba/plumbum/pull/35>`_)
* Added ``PuttyMachine`` for Windows users that relies on ``plink`` and ``pscp``
  (instead of ``ssh`` and ``scp``) `(#37 <https://github.com/tomerfiliba/plumbum/issues/37>`_)

1.0.0
-----
* Rename ``cli.CountingAttr`` to ``cli.CountOf``
* Moved to Travis continuous integration
* Added ``unixutils``
* Added ``chown`` and ``uid``/``gid``
* Lots of fixes and updates to the doc
* Full list of `issues <https://github.com/tomerfiliba/plumbum/issues?labels=V1.0&page=1&state=closed>`_

0.9.0
-----
Initial release
