NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #1371 most downloaded on PyPI
Typed library that provides an ORM wrapper for tmux, a terminal multiplexer.
Last release 2 months ago
12 Jul 2026
Release timing varies
gaps range from 8 days to 5 months
Nearly every release is documented
notes for 58 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
10 years old
166 releases · first in 2016
Deprecated individual item lookups
Deprecated individual item lookups (#390)
Removed key lookups from libtmux.common.EnvironmentMixin.show_environment()
Only EnvironmentMixin.show_environment() (without an argument) exists, and it still returns a dict.
Add key lookups via libtmux.common.EnvironmentMixin.getenv()
Before:
server.show_environment('DISPLAY')
After:
server.getenv('DISPLAY')
Before:
session.show_environment('DISPLAY')
After:
session.getenv('DISPLAY')
Removed key lookups from Session.show_options()
session.show_options() # still returns dict, without an argument
Old:
session.show_options('DISPLAY')
Now:
session.show_option('DISPLAY')
Removed key lookups from Window.show_window_options()
window.show_window_options() # still returns dict, without an argument
Old:
window.show_window_options('DISPLAY')
window.show_window_option('DISPLAY')
Improved typings
Now mypy --strict compliant (#383)
findWhere() (#391)findWhere -> find_where by @tony in https://github.com/tmux-python/libtmux/pull/391EnvironmentMixin by @tony in https://github.com/tmux-python/libtmux/pull/390Full Changelog: https://github.com/tmux-python/libtmux/compare/v0.12.0...v0.13.0a0
One column per quarter.
v0.13.0 (or v0.14.0) will be the one that's fully typed
v0.13.0 (or v0.14.0) will be the one that's fully typed
Compatibility
TMUX_MAX_VERSION, add 3.3a to CI #387Testing
retry() to take a callable and enforce the timeout by @categulario in #372Typings
Server, Session, Window, Pane #385Chores
Full Changelog: https://github.com/tmux-python/libtmux/compare/v0.11.0...v0.12.0
libtmux 0.12.0 restores Python 3.7/3.8 support, expands tmux compatibility, and adds the retry helper that replaced the old test retry API.
tmux 3.3a was added to CI, and TMUX_MAX_VERSION moved from 2.4 to 3.3.
retry_until() replaces the old retry helper (#368, #372){func}libtmux.test.retry.retry_until polls a callback until it succeeds or
times out, raising {exc}~libtmux.exc.WaitTimeout by default. Thanks
@categulario.
The docs gained a renewed logo, split API pages for utilities, exceptions, and test helpers, and new Reference sections for server, session, window, and pane objects.
Support for Python 3.7 and 3.8 was restored, tox was removed, and core object relations gained type annotations (#385).
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Drop python 3.7 and 3.8 by @tony in https://github.com/tmux-python/libtmux/pull/363
Full Changelog: https://github.com/tmux-python/libtmux/compare/v0.11.0...v0.12.0a1
Nothing published for this version
[pre-commit.ci] pre-commit autoupdate by @pre-commit-ci in https://github.com/tmux-python/libtmux/pull/353
Full Changelog: https://github.com/tmux-python/libtmux/compare/v0.10.3...v0.11.0
libtmux 0.11.0 adds early typing work and documents the format-separator escape hatch.
This release originally marked Python 3.7/3.8 as ending, but 0.12.0 restored support.
The internal separator used to split tmux format output is configurable through
LIBTMUX_TMUX_FORMAT_SEPARATOR. Thanks @JonathanRaiman and @jagguli.
The docs gained sectioned navigation and instructions for installing developmental releases.
Early annotations, cleanup, and one-time Black formatting landed. Thanks @otherJL0.
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
libtmux 0.10.3 is the first experimental Poetry-built release.
libtmux 0.10.3 is the first experimental Poetry-built release.
Python 3.10 metadata was added, with a note that version constraints still needed more compatibility work.
The project started using poetry build, moved Poetry to 1.1.12, and added
pre-commit configuration. Packagers were directed to #346 for issues.
libtmux 0.10.2 updates Poetry-era CI and attached-session handling.
libtmux 0.10.2 updates Poetry-era CI and attached-session handling.
Server.attached_sessions() no longer assumes only one attached client. Thanks
@timoses.
CI uses Poetry 1.1.7, Python was locked at 3.9 to avoid the dataclasses
issue, and docs publishing was repaired.
Update Window.select_window() for #271
Update Window.select_window() for #271
libtmux 0.10.1 updates a window-selection compatibility path.
Window.select_window() was updated for #271The compatibility method picked up the session-target fix.
- #321: Convert to markdown - #271: Fix select_window() by providing the session ID as argument to -t. Thanks @Flowdalic - Drop python 3.5 support
select_window() by providing the session ID as argument to -t. Thanks @Flowdaliclibtmux 0.10.0 moves the changelog to Markdown, fixes window selection, and drops Python 3.5.
The supported Python range moved forward.
select_window() targets the session ID (#271)Window selection now passes the session ID to tmux's -t argument. Thanks
@Flowdalic.
The changelog moved from reStructuredText to Markdown.
libtmux 0.9.0 drops Python 2.7 and updates the Python 3 toolchain.
libtmux 0.9.0 drops Python 2.7 and updates the Python 3 toolchain.
The codebase moved fully to Python 3 syntax. The CI matrix added tmux 3.2a, and Black moved to 21.6b0 (#312, #314).
select_window() targets the session ID (#271)The session-target fix also appears in this release line.
- #297: Enchance subprocess interaction std[in|out|err]. Needed for interact with big buffer, fixes 251, thank you @gil-obradors! - #303: Add common.g
251, thank you @gil-obradors!libtmux 0.8.5 improves subprocess interaction, version reporting, and environment tests.
stdin/stdout/stderr handling was improved for large buffer interaction, fixing #251. Thanks @gil-obradors.
get_libtmux_version() reports tmux-compatible versions (#303)common.get_libtmux_version was added, docs links were repaired, and duplicate
Sphinx module descriptions were removed.
Local environment variables no longer cause show-environment tests to pause
indefinitely.
- #234: Window.split_window: Allow passing percent, Thank you @jinankjain! - #289: Fix warning due to invalid escape sequences, Thank you @tirkarthi!
libtmux 0.8.4 updates split-window support, packaging, docs, and CI.
Window.split_window accepts percentages (#234)Window.split_window can pass percentage sizing. Thanks @jinankjain.
Warnings from invalid escape sequences were fixed. Thanks @tirkarthi.
docs/ (#295)Docs publishing moved to the project's own action, development instructions
were refreshed, and the old doc/ tree moved to docs/.
More packaging moved to Poetry while retaining setup.py, and CI was updated
for Python 2.7 caching and internal PR behavior.
Also thanks @FlowDalic for a similar PR at #294
#278 Fix Python deprecation warnings, thanks @d1618033
Also thanks @FlowDalic for a similar PR at #294
Add project_urls to setup.py
#293 Move from Pipfile to poetry
Fix show_option test in tmux 3.0
Clean up handle_option_error comments
Move CI to a GitHub action
libtmux 0.8.3 is a Python warning, packaging, and CI cleanup release.
Deprecation warnings were cleaned up. Thanks @d1618033 and Flowdalic.
project_urls were added, the project moved from Pipfile to Poetry, tmux 3.0
option tests were fixed, option-error comments were cleaned up, and CI moved to
GitHub Actions.
CHANGES updated to plain reStructuredText
project_urls to setup.py for pypi.libtmux 0.8.2 is a packaging and changelog-format release.
The changelog was converted to plain reStructuredText.
project_urls were added to setup.py, Pipfile constraints were loosened, and
Pipfile.lock was added.
Add sphinxcontrib-napoleon package for documentation
literal=True (-l) in Pane.send_keys
from @ritiekcapture_pane support for Panedisplay_message support for Panelibtmux 0.8.1 fixes several tmux compatibility gaps and moves docs toward NumPy-style docstrings.
{meth}~libtmux.Pane.capture_pane,
{meth}~libtmux.Pane.display_message, and literal=True support for
{meth}~libtmux.Pane.send_keys were added. Thanks @ritiek.
Renaming clients on BSD/macOS with tmux 2.7 was repaired.
Unicode command handling was fixed for Python 2 thanks to @myw, and next-X.Y version parsing gained support thanks to @sloria.
Imports were sorted, sphinxcontrib-napoleon was added, and docstrings moved to NumPy style.
Move to new organization, tmux-python
Server.new_session learned how to run commands in
window on session start, thanks @grimpy!has_session more robust.libtmux 0.8.0 moves the project to the tmux-python organization and broadens session-start support.
The license changed from BSD to MIT, and the project moved into the tmux-python organization.
Server.new_session() can run commands at startup (#103){meth}~libtmux.Server.new_session learned how to run commands in the new
window on session start. Thanks @grimpy.
Server.has_session() uses tmux return codes (#68){meth}~libtmux.Server.has_session became more robust by checking tmux's return
code. Thanks @jlargentaye.
pytest, Sphinx, Travis, PyPy, and supported Python versions were updated.
- Port retry function from tmuxp
retry function from tmuxp
(https://github.com/tmux-python/tmuxp/issues/354)libtmux 0.7.8 ports tmuxp retry support.
retry moved in from tmuxpThe retry helper was ported from tmuxp for shared behavior.
Don't add -x/-y in tmux >= 2.6 if running tmuxp from inside client.
libtmux 0.7.7 fixes tmux 2.6 session sizing from inside clients.
-x / -ylibtmux avoids those flags when running from inside a client on tmux 2.6+.
Allow Window.select_layout with no args
Window.select_layout with no argsbell- was no longer ambiguous as of tmux 2.6libtmux 0.7.6 repairs layout selection and option ambiguity tests.
Window.select_layout can be called without argumentsThe layout-selection helper accepts the tmux default path again, and tests were updated for tmux 2.6 option ambiguity behavior.
Hotfix to support tmux 2.6 session creation
libtmux 0.7.5 is a tmux 2.6 hotfix.
Session creation was patched for tmux 2.6 compatibility.
- #65 Add session id to commands, thanks @askedrelic
libtmux 0.7.4 fixes command targeting.
tmux commands now include the relevant session id. Thanks @askedrelic.
Exact matches only supported on 2.1 and up
libtmux 0.7.3 records exact-match support limits.
Exact matching is only supported on tmux 2.1 and later.
Support exact matching in Server.has_session
Server.has_sessionlibtmux 0.7.2 adds exact matching to session lookup.
Server.has_session supports exact matching{meth}~libtmux.Server.has_session can check for exact session names.
- #37 Improve support for formatted options like pane-border-status. Thanks @kaushalmodi.
pane-border-status. Thanks @kaushalmodi.libtmux 0.7.1 improves formatted option handling.
pane-border-status are supported (#37)Option parsing works better for formatted tmux options. Thanks @kaushalmodi.
Support for python 2.6 dropped. New minimum version is 2.7
Support for python 2.6 dropped. New minimum version is 2.7
Add support for tmux 2.4, pypy and pypy3
Overhaul error handling when setting and showing options
handle_option_error for handling option errorslibtmux.exc.OptionError base exceptionlibtmux.exc.InvalidOption and libtmux.exc.AmbiguousOptionlibtmux.exc.UnknownOption now extends :exc:libtmux.exc.OptionErrorOverhaul version checking
has_version has been renamed to get_versionget_version will return tmux built from git master as the latest version supported by the libtmux version with -master at the end, e.g. 2.4-masterget_version will return tmux on openbsd base system as the latest version supported by the libtmux version with -openbsd at the end, e.g. 2.4-openbsdhas_required_tmux_version has been renamed to has_minimum_versionhas_gt_version, has_gte_version, has_lt_version, has_lte_version,Fixed up documentation in some session methods
Added pydoc exception info to option methods in window and sessions.
Added TMUX_MIN_VERSION and TMUX_MAX_VERSION
libtmux 0.7.0 drops Python 2.6, adds tmux 2.4 support, and overhauls option errors and version checks.
Python 2.7 became the minimum supported Python version.
has_version was renamed to get_version,
has_required_tmux_version was renamed to has_minimum_version, and
comparison helpers such as has_gt_version, has_gte_version,
has_lt_version, and has_lte_version were added.
{exc}libtmux.exc.OptionError became the base class for
{exc}libtmux.exc.InvalidOption, libtmux.exc.AmbiguousOption, and
{exc}libtmux.exc.UnknownOption.
get_version reports tmux built from master with a -master suffix and OpenBSD
base tmux with an -openbsd suffix.
Session documentation and option-method exception details were cleaned up.
The release added support for tmux 2.4, PyPy/PyPy3,
TMUX_MIN_VERSION, and TMUX_MAX_VERSION.
Add TmuxCommandNotFound exception
which commandTmuxCommandNotFound exceptiontmux_search_paths and append_env_path kwargs to
tmux_cmd.libtmux 0.6.5 improves tmux binary lookup.
tmux_cmd can search custom pathstmux_search_paths and append_env_path were added, and
{exc}~libtmux.exc.TmuxCommandNotFound reports missing tmux executables.
- #32 support for OpenBSD's tmux
libtmux 0.6.4 adds OpenBSD tmux support.
The version and command handling paths now account for OpenBSD tmux.
support for working with tmux master, thanks @sloria.
master, thanks @sloria.libtmux 0.6.3 supports tmux built from master.
Version handling supports tmux built from unreleased master. Thanks @sloria.
- #197 use LooseVersion instead of StrictVersion for version checks. Thanks @minijackson. - Pin packages with pyup.io - #21 Readme fix from @huwenchao
LooseVersion instead of StrictVersion for version
checks. Thanks @minijackson.libtmux 0.6.2 relaxes version parsing and updates packaging.
LooseVersion replaced StrictVersion for tmux version checks. Thanks
@minijackson.
The README was corrected. Thanks @huwenchao.
Dependency pin maintenance moved through pyup.io.
Fix tests and add official support for 2.3
start_directory in new sessions and
panes, courtesy of @gandelman-a.libtmux 0.6.1 fixes logging, start directories, and tmux 2.3 support.
New sessions and panes can receive start_directory. Thanks @gandelman-a.
Logging was fixed thanks to @geekli.
Tests were fixed and tmux 2.3 support was added.
libtmux 0.6.0 validates session names and trims unused attachment parameters.
libtmux 0.6.0 validates session names and trims unused attachment parameters.
tmux session names cannot be empty or contain periods or colons; libtmux now raises for those invalid names.
Unused target_session parameters were removed from Server.attach_session and
Server.switch_client.
Nothing published for this version
libtmux 0.4.1 fixes tmux discovery through PATH.
libtmux 0.4.1 fixes tmux discovery through PATH.
which() reads PATHtmux lookup now uses os.environ["PATH"]. See https://redd.it/4laeut.
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →