freshcrate
Skin:/
Home > Frameworks > libtmux

libtmux

Typed library that provides an ORM wrapper for tmux, a terminal multiplexer.

Why this rank:Strong adoptionRecent releaseHealthy release cadence

Description

<div align="center"> <h1>⚙️ libtmux</h1> <p><strong>Drive tmux from Python: typed, object-oriented control over servers, sessions, windows, and panes.</strong></p> <p> <a href="https://libtmux.git-pull.com/"><img src="https://raw.githubusercontent.com/tmux-python/libtmux/master/docs/_static/img/libtmux.svg" alt="libtmux logo" height="120"></a> </p> <p> <a href="https://pypi.org/project/libtmux/"><img src="https://img.shields.io/pypi/v/libtmux.svg" alt="PyPI version"></a> <a href="https://libtmux.git-pull.com/"><img src="https://github.com/tmux-python/libtmux/workflows/docs/badge.svg" alt="Docs status"></a> <a href="https://github.com/tmux-python/libtmux/actions"><img src="https://github.com/tmux-python/libtmux/workflows/tests/badge.svg" alt="Tests status"></a> <a href="https://codecov.io/gh/tmux-python/libtmux"><img src="https://codecov.io/gh/tmux-python/libtmux/branch/master/graph/badge.svg" alt="Coverage"></a> <a href="https://github.com/tmux-python/libtmux/blob/master/LICENSE"><img src="https://img.shields.io/github/license/tmux-python/libtmux.svg" alt="License"></a> </p> </div> ## 🐍 What is libtmux? libtmux is a typed Python API over [tmux], the terminal multiplexer. Stop shelling out and parsing `tmux ls`. Instead, interact with real Python objects: `Server`, `Session`, `Window`, and `Pane`. The same API powers [tmuxp], so it stays battle-tested in real-world workflows. ### ✨ Features - Typed, object-oriented control of tmux state - Query and [traverse](https://libtmux.git-pull.com/topics/traversal/) live sessions, windows, and panes - Raw escape hatch via `.cmd(...)` on any object - Works with multiple tmux sockets and servers - [Context managers](https://libtmux.git-pull.com/topics/context_managers/) for automatic cleanup - [pytest plugin](https://libtmux.git-pull.com/api/pytest-plugin/) for isolated tmux fixtures - Proven in production via tmuxp and other tooling ## Requirements & support - tmux: >= 3.2a - Python: >= 3.10 (CPython and PyPy) Maintenance-only backports (no new fixes): - Python 2.x: [`v0.8.x`](https://github.com/tmux-python/libtmux/tree/v0.8.x) - tmux 1.8-3.1c: [`v0.48.x`](https://github.com/tmux-python/libtmux/tree/v0.48.x) ## 📦 Installation Stable release: ```console $ pip install libtmux ``` With pipx: ```console $ pipx install libtmux ``` With uv / uvx: ```console $ uv add libtmux ``` ```console $ uvx --from "libtmux" python ``` From the main branch (bleeding edge): ```console $ pip install 'git+https://github.com/tmux-python/libtmux.git' ``` Tip: libtmux is pre-1.0. Pin a range in projects to avoid surprises: requirements.txt: ```ini libtmux==0.50.* ``` pyproject.toml: ```toml libtmux = "0.50.*" ``` ## 🚀 Quickstart ### Open a tmux session First, start a tmux session to connect to: ```console $ tmux new-session -s foo -n bar ``` ### Pilot your tmux session via Python Use [ptpython], [ipython], etc. for a nice REPL with autocompletions: ```console $ pip install --user ptpython ``` ```console $ ptpython ``` Connect to a live tmux session: ```python >>> import libtmux >>> svr = libtmux.Server() >>> svr Server(socket_path=/tmp/tmux-.../default) ``` **Tip:** You can also use [tmuxp]'s [`tmuxp shell`] to drop straight into your current tmux server / session / window / pane. [ptpython]: https://github.com/prompt-toolkit/ptpython [ipython]: https://ipython.org/ [`tmuxp shell`]: https://tmuxp.git-pull.com/cli/shell/ ### Run any tmux command Every object has a `.cmd()` escape hatch that honors socket name and path: ```python >>> server = Server(socket_name='libtmux_doctest') >>> server.cmd('display-message', 'hello world') <libtmux...> ``` Create a new session: ```python >>> server.cmd('new-session', '-d', '-P', '-F#{session_id}').stdout[0] '$...' ``` ### List and filter sessions [**Learn more about Filtering**](https://libtmux.git-pull.com/topics/filtering/) ```python >>> server.sessions [Session($... ...), ...] ``` Filter by attribute: ```python >>> server.sessions.filter(history_limit='2000') [Session($... ...), ...] ``` Direct lookup: ```python >>> server.sessions.get(session_id=session.session_id) Session($... ...) ``` ### Control sessions and windows [**Learn more about Workspace Setup**](https://libtmux.git-pull.com/topics/workspace_setup/) ```python >>> session.rename_session('my-session') Session($... my-session) ``` Create new window in the background (don't switch to it): ```python >>> bg_window = session.new_window(attach=False, window_name="bg-work") >>> bg_window Window(@... ...:bg-work, Session($... ...)) >>> session.windows.filter(window_name__startswith="bg") [Window(@... ...:bg-work, Session($... ...))] >>> session.windows.get(window_name__startswith="bg") Window(@... ...:bg-work, Session($... ...)) >>> bg_window.kill() ``` ### Split windows and send keys [**Learn more about Pane Interaction**](https://libtmux.git-pull.com/topics/pane_interaction/) ```python >>> pane = window.sp

Release History

VersionChangesUrgencyDate
v0.58.0libtmux 0.58.0 fixes subprocess output decoding on non-UTF-8 locales. Both `tmux_cmd` and `ControlMode` now enforce UTF-8 when reading tmux output, matching tmux's own encoding contract. ### Fixes #### Subprocess encoding on non-UTF-8 locales (#679) `tmux_cmd` and `ControlMode` now pass `encoding="utf-8"` to `subprocess.Popen`, ensuring tmux output is decoded correctly regardless of the system locale. Previously, on non-UTF-8 locales, the `FORMAT_SEPARATOR` character (U+241E) was corrupHigh5/23/2026
v0.57.0libtmux 0.57.0 broadens tmux support around attached clients, tmux-native filtering, and format-token fields. [`Client`](https://libtmux.git-pull.com/api/libtmux.client/) gives callers a typed object for attached terminals, `search_*()` methods let tmux return only matching sessions, windows, and panes, and more tmux format tokens are exposed as typed attributes. `LibTmuxException` now records which tmux subcommand failed, making command errors easier to handle downstream. Full release notes:High5/18/2026
v0.56.0The **tmux command parity** release. ~50 new public methods land across <a href="https://libtmux.git-pull.com/api/libtmux.server/"><code>Server</code></a>, <a href="https://libtmux.git-pull.com/api/libtmux.pane/"><code>Pane</code></a>, <a href="https://libtmux.git-pull.com/api/libtmux.window/"><code>Window</code></a>, and <a href="https://libtmux.git-pull.com/api/libtmux.session/"><code>Session</code></a>, plus expanded flag coverage on existing wrappers, plus a <a href="https://libtmux.git-pullHigh5/10/2026
0.55.1Imported from PyPI (0.55.1)Low4/21/2026
v0.55.1A point release focused on a pytest-plugin cleanup fix, a new Sphinx extension for documenting pytest fixtures, and a docs-stack migration to [gp-sphinx](https://gp-sphinx.git-pull.com). ## Highlights ### Fix: `pytest_plugin` leaks tmux socket files on teardown (#661, fixes #660) The `server` and `TestServer` fixtures now `unlink(2)` the tmux socket from `/tmp/tmux-<uid>/` during teardown, in addition to calling `server.kill()`. tmux does not reliably remove its own socket on non-gracefHigh4/19/2026
v0.55.1A point release focused on a pytest-plugin cleanup fix, a new Sphinx extension for documenting pytest fixtures, and a docs-stack migration to [gp-sphinx](https://gp-sphinx.git-pull.com). ## Highlights ### Fix: `pytest_plugin` leaks tmux socket files on teardown (#661, fixes #660) The `server` and `TestServer` fixtures now `unlink(2)` the tmux socket from `/tmp/tmux-<uid>/` during teardown, in addition to calling `server.kill()`. tmux does not reliably remove its own socket on non-gracefHigh4/19/2026
v0.55.1A point release focused on a pytest-plugin cleanup fix, a new Sphinx extension for documenting pytest fixtures, and a docs-stack migration to [gp-sphinx](https://gp-sphinx.git-pull.com). ## Highlights ### Fix: `pytest_plugin` leaks tmux socket files on teardown (#661, fixes #660) The `server` and `TestServer` fixtures now `unlink(2)` the tmux socket from `/tmp/tmux-<uid>/` during teardown, in addition to calling `server.kill()`. tmux does not reliably remove its own socket on non-gracefHigh4/19/2026
v0.55.1A point release focused on a pytest-plugin cleanup fix, a new Sphinx extension for documenting pytest fixtures, and a docs-stack migration to [gp-sphinx](https://gp-sphinx.git-pull.com). ## Highlights ### Fix: `pytest_plugin` leaks tmux socket files on teardown (#661, fixes #660) The `server` and `TestServer` fixtures now `unlink(2)` the tmux socket from `/tmp/tmux-<uid>/` during teardown, in addition to calling `server.kill()`. tmux does not reliably remove its own socket on non-gracefMedium4/19/2026
v0.55.1A point release focused on a pytest-plugin cleanup fix, a new Sphinx extension for documenting pytest fixtures, and a docs-stack migration to [gp-sphinx](https://gp-sphinx.git-pull.com). ## Highlights ### Fix: `pytest_plugin` leaks tmux socket files on teardown (#661, fixes #660) The `server` and `TestServer` fixtures now `unlink(2)` the tmux socket from `/tmp/tmux-<uid>/` during teardown, in addition to calling `server.kill()`. tmux does not reliably remove its own socket on non-gracefMedium4/19/2026
v0.55.1A point release focused on a pytest-plugin cleanup fix, a new Sphinx extension for documenting pytest fixtures, and a docs-stack migration to [gp-sphinx](https://gp-sphinx.git-pull.com). ## Highlights ### Fix: `pytest_plugin` leaks tmux socket files on teardown (#661, fixes #660) The `server` and `TestServer` fixtures now `unlink(2)` the tmux socket from `/tmp/tmux-<uid>/` during teardown, in addition to calling `server.kill()`. tmux does not reliably remove its own socket on non-gracefMedium4/19/2026
v0.55.1A point release focused on a pytest-plugin cleanup fix, a new Sphinx extension for documenting pytest fixtures, and a docs-stack migration to [gp-sphinx](https://gp-sphinx.git-pull.com). ## Highlights ### Fix: `pytest_plugin` leaks tmux socket files on teardown (#661, fixes #660) The `server` and `TestServer` fixtures now `unlink(2)` the tmux socket from `/tmp/tmux-<uid>/` during teardown, in addition to calling `server.kill()`. tmux does not reliably remove its own socket on non-gracefMedium4/19/2026
v0.55.1A point release focused on a pytest-plugin cleanup fix, a new Sphinx extension for documenting pytest fixtures, and a docs-stack migration to [gp-sphinx](https://gp-sphinx.git-pull.com). ## Highlights ### Fix: `pytest_plugin` leaks tmux socket files on teardown (#661, fixes #660) The `server` and `TestServer` fixtures now `unlink(2)` the tmux socket from `/tmp/tmux-<uid>/` during teardown, in addition to calling `server.kill()`. tmux does not reliably remove its own socket on non-gracefMedium4/19/2026
v0.55.1A point release focused on a pytest-plugin cleanup fix, a new Sphinx extension for documenting pytest fixtures, and a docs-stack migration to [gp-sphinx](https://gp-sphinx.git-pull.com). ## Highlights ### Fix: `pytest_plugin` leaks tmux socket files on teardown (#661, fixes #660) The `server` and `TestServer` fixtures now `unlink(2)` the tmux socket from `/tmp/tmux-<uid>/` during teardown, in addition to calling `server.kill()`. tmux does not reliably remove its own socket on non-gracefMedium4/19/2026
v0.55.1A point release focused on a pytest-plugin cleanup fix, a new Sphinx extension for documenting pytest fixtures, and a docs-stack migration to [gp-sphinx](https://gp-sphinx.git-pull.com). ## Highlights ### Fix: `pytest_plugin` leaks tmux socket files on teardown (#661, fixes #660) The `server` and `TestServer` fixtures now `unlink(2)` the tmux socket from `/tmp/tmux-<uid>/` during teardown, in addition to calling `server.kill()`. tmux does not reliably remove its own socket on non-gracefMedium4/19/2026
v0.55.1A point release focused on a pytest-plugin cleanup fix, a new Sphinx extension for documenting pytest fixtures, and a docs-stack migration to [gp-sphinx](https://gp-sphinx.git-pull.com). ## Highlights ### Fix: `pytest_plugin` leaks tmux socket files on teardown (#661, fixes #660) The `server` and `TestServer` fixtures now `unlink(2)` the tmux socket from `/tmp/tmux-<uid>/` during teardown, in addition to calling `server.kill()`. tmux does not reliably remove its own socket on non-gracefMedium4/19/2026
v0.55.1A point release focused on a pytest-plugin cleanup fix, a new Sphinx extension for documenting pytest fixtures, and a docs-stack migration to [gp-sphinx](https://gp-sphinx.git-pull.com). ## Highlights ### Fix: `pytest_plugin` leaks tmux socket files on teardown (#661, fixes #660) The `server` and `TestServer` fixtures now `unlink(2)` the tmux socket from `/tmp/tmux-<uid>/` during teardown, in addition to calling `server.kill()`. tmux does not reliably remove its own socket on non-gracefMedium4/19/2026
v0.55.1A point release focused on a pytest-plugin cleanup fix, a new Sphinx extension for documenting pytest fixtures, and a docs-stack migration to [gp-sphinx](https://gp-sphinx.git-pull.com). ## Highlights ### Fix: `pytest_plugin` leaks tmux socket files on teardown (#661, fixes #660) The `server` and `TestServer` fixtures now `unlink(2)` the tmux socket from `/tmp/tmux-<uid>/` during teardown, in addition to calling `server.kill()`. tmux does not reliably remove its own socket on non-gracefMedium4/19/2026
v0.55.1A point release focused on a pytest-plugin cleanup fix, a new Sphinx extension for documenting pytest fixtures, and a docs-stack migration to [gp-sphinx](https://gp-sphinx.git-pull.com). ## Highlights ### Fix: `pytest_plugin` leaks tmux socket files on teardown (#661, fixes #660) The `server` and `TestServer` fixtures now `unlink(2)` the tmux socket from `/tmp/tmux-<uid>/` during teardown, in addition to calling `server.kill()`. tmux does not reliably remove its own socket on non-gracefMedium4/19/2026
v0.55.1A point release focused on a pytest-plugin cleanup fix, a new Sphinx extension for documenting pytest fixtures, and a docs-stack migration to [gp-sphinx](https://gp-sphinx.git-pull.com). ## Highlights ### Fix: `pytest_plugin` leaks tmux socket files on teardown (#661, fixes #660) The `server` and `TestServer` fixtures now `unlink(2)` the tmux socket from `/tmp/tmux-<uid>/` during teardown, in addition to calling `server.kill()`. tmux does not reliably remove its own socket on non-gracefMedium4/19/2026
v0.55.1A point release focused on a pytest-plugin cleanup fix, a new Sphinx extension for documenting pytest fixtures, and a docs-stack migration to [gp-sphinx](https://gp-sphinx.git-pull.com). ## Highlights ### Fix: `pytest_plugin` leaks tmux socket files on teardown (#661, fixes #660) The `server` and `TestServer` fixtures now `unlink(2)` the tmux socket from `/tmp/tmux-<uid>/` during teardown, in addition to calling `server.kill()`. tmux does not reliably remove its own socket on non-gracefMedium4/19/2026
v0.55.1A point release focused on a pytest-plugin cleanup fix, a new Sphinx extension for documenting pytest fixtures, and a docs-stack migration to [gp-sphinx](https://gp-sphinx.git-pull.com). ## Highlights ### Fix: `pytest_plugin` leaks tmux socket files on teardown (#661, fixes #660) The `server` and `TestServer` fixtures now `unlink(2)` the tmux socket from `/tmp/tmux-<uid>/` during teardown, in addition to calling `server.kill()`. tmux does not reliably remove its own socket on non-gracefMedium4/19/2026
v0.55.0## What's Changed via @tony in https://github.com/tmux-python/libtmux/pull/636 ### Pane.set_title() New `Pane.set_title()` method wraps `select-pane -T` and returns the pane for method chaining. A `Pane.title` property aliases `pane_title` for convenience: ```python pane.set_title("my-worker") pane.pane_title # 'my-worker' pane.title # 'my-worker' ``` The `pane_title` format variable is now included in libtmux's pane format queries (it was previously excluded via an Low3/8/2026
v0.54.0## Highlights - **Structured lifecycle logging** across Server, Session, Window, and Pane with filterable `extra` context - **Bug fixes** for `rename_window()`, `Server.kill()`, `new_session()`, and `kill_window()` error handling --- ## What's new ### Structured lifecycle logging ([#637](https://github.com/tmux-python/libtmux/pull/637)) All lifecycle operations (create, kill, rename, split) now emit INFO-level log records with structured `extra` context. Every log call includes sLow3/7/2026
v0.53.1## What's Changed ### Bug fixes * Fix race condition in new_session() by avoiding list-sessions query by @neubig in https://github.com/tmux-python/libtmux/pull/625 ### Development * build: Migrate from Makefile to justfile by @tony in https://github.com/tmux-python/libtmux/pull/617 ## New Contributors * @neubig made their first contribution in https://github.com/tmux-python/libtmux/pull/625 **Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.53.0...v0.53.1Low2/19/2026
v0.53.0A focused maintenance release that fixes a critical bug in `Session.attach()` that caused tracebacks when users killed sessions while attached via `tmuxp load`. ## Highlights - **Fixed:** `Session.attach()` no longer raises `TmuxObjectDoesNotExist` when a user kills the session during attachment - **Breaking:** `Session.attach()` no longer calls `refresh()` after returning (semantically incorrect for interactive commands) --- ## Bug Fixes ### Session.attach() no longer fails if sLow12/14/2025
v0.52.1## Development * ci(release): Migrate to PyPI Trusted Publisher by @tony in https://github.com/tmux-python/libtmux/pull/615 **Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.52.0...v0.52.1Low12/7/2025
v0.52.0# libtmux 0.52.0 ## `capture_pane()` enhancements The `Pane.capture_pane()` method now supports 5 new parameters exposing additional tmux `capture-pane` flags: | Parameter | tmux Flag | Description | |-----------|-----------|-------------| | `escape_sequences` | `-e` | Include ANSI escape sequences (colors, attributes) | | `escape_non_printable` | `-C` | Escape non-printable chars as octal `\xxx` | | `join_wrapped` | `-J` | Join wrapped lines back together | | `preserve_trailing` |Low12/7/2025
v0.51.0## Breaking Changes ### Deprecate legacy APIs Legacy API methods (deprecated in v0.16–v0.33) now raise `DeprecatedError` (hard error) instead of emitting `DeprecationWarning`. See the [migration guide](https://libtmux.git-pull.com/migration.html) for full context and examples. * Deprecate legacy APIs (raise `DeprecatedError`) by @tony in https://github.com/tmux-python/libtmux/pull/611 ### Method Renamings | Deprecated | Replacement | Class | Deprecated Since | |------------|--Low12/6/2025
v0.50.1## Documentation * Doc fixes by @tony in https://github.com/tmux-python/libtmux/pull/612 **Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.50.0...v0.50.1Low12/6/2025
v0.50.0libtmux 0.50 brings a major enhancement to option and hook management with a unified, typed API for managing tmux options and hooks across all object types. ## Highlights - **Unified Options API**: New `show_option()`, `show_options()`, `set_option()`, and `unset_option()` methods available on Server, Session, Window, and Pane - **Hook Management**: Full programmatic control over tmux hooks with support for indexed hook arrays and bulk operations - **SparseArray**: New internal data struLow11/30/2025
v0.49.0## What's Changed ### Breaking: tmux <3.2 fully dropped * Drop support for tmux versions < 3.2 by @tony in https://github.com/tmux-python/libtmux/pull/608 **Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.48.0...v0.49.0Low11/29/2025
v0.48.0## What's Changed ### Breaking: tmux <3.2 deprecated Deprecate old tmux versions by @tony in https://github.com/tmux-python/libtmux/pull/606 ### Development tmux: Add tmux 3.6 to testgrid by @tony in https://github.com/tmux-python/libtmux/pull/607 **Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.47.0...v0.48.0Low11/28/2025
v0.47.0## Breaking changes * Support Python 3.14 by @tony in https://github.com/tmux-python/libtmux/pull/601 * Drop Python 3.9 by @tony in https://github.com/tmux-python/libtmux/pull/602 **Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.46.2...v0.47.0Low11/1/2025
v0.46.2## What's Changed * Fix `new_window` argument typing in `Session` by @Data5tream in https://github.com/tmux-python/libtmux/pull/596 * types: Add `StrPath` typing, fix `new_session` by @tony in https://github.com/tmux-python/libtmux/pull/597 * types: Add `StrPath` typing, fix `new_session`, part 2 by @tony in https://github.com/tmux-python/libtmux/pull/598 ## New Contributors * @Data5tream made their first contribution in https://github.com/tmux-python/libtmux/pull/596 **Full ChanLow5/26/2025
v0.46.1**Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.46.0...v0.46.1 # Changes ## Feature branch at [v0.46.x](https://github.com/tmux-python/libtmux/tree/v0.46.x) [v0.46.x](https://github.com/tmux-python/libtmux/tree/v0.46.x) will extend the life of v0.46.0 while new features are being developed for watching for changes within libtmux panes, windows, and sessions. See: - https://github.com/tmux-python/libtmux/pull/587 - https://github.com/tmux-python/libtmux/pull/58Low3/16/2025
v0.46.0## Breaking Changes - **Test Helper Imports Refactored**: Direct imports from `libtmux.test` are no longer possible. You must now import from specific submodules (#580) ```python # Before: from libtmux.test import namer # After: from libtmux.test.named import namer ``` ```python # Before: from libtmux.test import RETRY_INTERVAL_SECONDS # After: from libtmux.test.constants import RETRY_INTERVAL_SECONDS ``` ## Internal Improvements - **Enhanced TestLow2/25/2025
v0.45.0## What's Changed ### Breaking Changes #### Test helpers: Refactor by @tony in https://github.com/tmux-python/libtmux/pull/578 Test helper functionality has been split into focused modules (#578): - `libtmux.test` module split into: - `libtmux.test.constants`: Test-related constants (`TEST_SESSION_PREFIX`, etc.) - `libtmux.test.environment`: Environment variable mocking - `libtmux.test.random`: Random string generation utilities - `libtmux.test.temporary`: Temporary sesLow2/23/2025
v0.44.2## What's Changed ### Bug fixes * fix(typings) Move typing-extensions into `TypeGuard` by @tony in https://github.com/tmux-python/libtmux/pull/572 ### Documentation * Doc / typos fixes by @tony in https://github.com/tmux-python/libtmux/pull/569 ### Development * Tests: Improved parametrization by @tony in https://github.com/tmux-python/libtmux/pull/570 **Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.44.1...v0.44.2Low2/17/2025
v0.44.1## What's Changed ### Packaging * types: Only use typing-extensions if necessary by @ppentchev in https://github.com/tmux-python/libtmux/pull/563 **Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.44.0...v0.44.1Low2/17/2025
v0.44.0## What's Changed ### Support for context managers _by @tony in https://github.com/tmux-python/libtmux/pull/566_. Added context manager support for all main tmux objects: - `Server`: Automatically kills the server when exiting the context - `Session`: Automatically kills the session when exiting the context - `Window`: Automatically kills the window when exiting the context - `Pane`: Automatically kills the pane when exiting the context Example usage: ```python with Server()Low2/16/2025
v0.43.0## What's Changed ### New feature * `TestServer`: `Server`, but `partial`'d to run on a test socket by @tony in https://github.com/tmux-python/libtmux/pull/565 ### Documentation * Fix "Topics" links in docs * docs(traversal) Add more doctests by @tony in https://github.com/tmux-python/libtmux/pull/567 **Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.42.1...v0.43.0Low2/15/2025
v0.42.1## Changes ### Packaging: `typing-extensions` usage * Move a typing-extensions import into a t.TYPE_CHECKING section by @ppentchev in https://github.com/tmux-python/libtmux/pull/562 * py(deps[testing,lint]) Add `typing-extensions` for older python versions by @tony in https://github.com/tmux-python/libtmux/pull/564 **Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.42.0...v0.42.1Low2/15/2025
v0.42.0## What's Changed ### Improvements * `tmux_cmd`: Modernize to use `text=True` by @tony in https://github.com/tmux-python/libtmux/pull/560 Attempted fix for https://github.com/tmux-python/libtmux/pull/558. **Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.41.0...v0.42.0Low2/2/2025
v0.41.0## What's Changed ### Fixes * Fix hardcoded uid in `__str__` method of `Server` class by @lazysegtree in https://github.com/tmux-python/libtmux/pull/557 ### Development * Use future annotations by @tony in https://github.com/tmux-python/libtmux/pull/555 ### Documentation * Fix docstring for color parameter by @TravisDart in https://github.com/tmux-python/libtmux/pull/544 ## New Contributors * @lazysegtree made their first contribution in https://github.com/tmux-python/libtmLow2/2/2025
v0.40.1## Bug fixes * Fix passing both window command and environment by @ppentchev in https://github.com/tmux-python/libtmux/pull/553 ## New Contributors * @ppentchev made their first contribution in https://github.com/tmux-python/libtmux/pull/553 **Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.40.0...v0.40.1Low12/24/2024
v0.40.0_Maintenance only, no bug fixes or new features_ ## Development * Python 3.9 Modernization by @tony in https://github.com/tmux-python/libtmux/pull/550 * test(legacy[session]) Stabilize assertion by @tony in https://github.com/tmux-python/libtmux/pull/552 **Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.39.0...v0.40.0Low12/21/2024
v0.39.0## What's Changed ### Breaking changes * Drop Python 3.8 by @tony in https://github.com/tmux-python/libtmux/pull/548 Python 3.8 reached end-of-life on October 7th, 2024 (see devguide.python.org, Status of Python Versions, Unsupported versions See also: https://devguide.python.org/versions/#unsupported-versions **Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.38.1...v0.39.0Low11/26/2024
v0.38.1**Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.38.0...v0.38.1 Minimum Python back to 3.8 for now.Low11/26/2024
v0.38.0## What's Changed ### Development - Project and package management: poetry to uv (#547) [uv] is the new package and project manager for the project, replacing Poetry. - Code quality: Use f-strings in more places (#540) via [ruff 0.4.2](https://github.com/astral-sh/ruff/blob/v0.4.2/CHANGELOG.md). [uv]: https://github.com/astral-sh/uv ### Documentation * [docs] Sphinx v8 compatibility: configure a non-empty inventory name for Python Intersphinx mapping. by @jayaddison iLow11/26/2024
v0.37.0## Tests * pytest-xdist support in https://github.com/tmux-python/libtmux/pull/522 * test stability improvements in https://github.com/tmux-python/libtmux/pull/522 * `retry_until()` tests: Relax clock in `assert`. * `tests/test_pane.py::test_capture_pane_start`: Use `retry_until()` to poll, improve correctness of test. **Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.36.0...v0.37.0Low4/21/2024
v0.36.0## What's Changed * Linting: Aggressive `ruff` pass (ruff v0.3.4) by @tony in https://github.com/tmux-python/libtmux/pull/539 **Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.35.1...v0.36.0Low3/24/2024
v0.35.1## What's Changed * fix: server.attached_sessions by @patrislav1 in https://github.com/tmux-python/libtmux/pull/537 * chore(Server.attached_sessions): Use .filter() by @tony in https://github.com/tmux-python/libtmux/pull/538 ## New Contributors * @patrislav1 made their first contribution in https://github.com/tmux-python/libtmux/pull/537 **Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.35.0...v0.35.1Low3/23/2024
v0.35.0## Breaking changes * refactor: Eliminate redundant targets / window_index's across codebase by @tony in https://github.com/tmux-python/libtmux/pull/536 **Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.34.0...v0.35.0Low3/17/2024
v0.34.0## Breaking #### Command target change ([#535](https://github.com/tmux-python/libtmux/issues/535)) Commands: All `cmd()` methods using custom or overridden targets must use the keyword argument `target`. This avoids entanglement with inner shell values that include `-t` for other purposes. These methods include: - [`Server.cmd()`](https://libtmux.git-pull.com/reference/servers.html#libtmux.Server.cmd "libtmux.Server.cmd") - [`Session.cmd()`](https://libtmux.git-pull.com/referenceLow3/17/2024
v0.33.0### Breaking changes[](https://libtmux.git-pull.com/history.html#breaking-changes "Permalink to this heading") #### Improved new sessions ([](https://github.com/tmux-python/libtmux/issues/532)[#532](https://github.com/tmux-python/libtmux/issues/532))[](https://libtmux.git-pull.com/history.html#improved-new-sessions-532 "Permalink to this heading") - `Session.new_window()`: - Learned `direction`, via [`WindowDirection`](https://libtmux.git-pull.com/reference/constants.html#libtmux.consLow3/17/2024
v0.33.0b1## What's Changed * Split, new window follow ups by @tony in https://github.com/tmux-python/libtmux/pull/534 **Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.33.0b0...v0.33.0b1Low3/17/2024
v0.33.0b0### Breaking changes[](https://libtmux.git-pull.com/history.html#breaking-changes "Permalink to this heading") #### Improved new sessions ([](https://github.com/tmux-python/libtmux/issues/532)[#532](https://github.com/tmux-python/libtmux/issues/532))[](https://libtmux.git-pull.com/history.html#improved-new-sessions-532 "Permalink to this heading") - `Session.new_window()` to [`Session.new_window()`](https://libtmux.git-pull.com/reference/sessions.html#libtmux.Session.new_window "libtmux.SeLow3/17/2024
v0.32.0## What's Changed * Fix docstring ordering in pane.split_window by @Ngalstyan4 in https://github.com/tmux-python/libtmux/pull/528 * Add implicit exports into __init__.py by @ssbarnea in https://github.com/tmux-python/libtmux/pull/531 ## New Contributors * @Ngalstyan4 made their first contribution in https://github.com/tmux-python/libtmux/pull/528 * @ssbarnea made their first contribution in https://github.com/tmux-python/libtmux/pull/531 **Full Changelog**: https://github.com/tmux-pythLow3/2/2024
v0.31.0post0# Post-release Documentation Fixes - Doc fixes to command examples **Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.31.0...v0.31.0post0Low2/17/2024
v0.31.0## Cleanups ([#527](https://github.com/tmux-python/libtmux/issues/527)) - Streamline {Server,Session,Window,Pane}.cmd(), across all usages to: - Use cmd: str as first positional - Removed unused keyword arguments **kwargs ## Renamings ([#527](https://github.com/tmux-python/libtmux/issues/527)) - Session.attached_window renamed to [Session.active_window()](http://localhost:8023/reference/sessions.html#libtmux.Session.active_window) - Session.attached_window deprecated - Session.aLow2/17/2024
v0.30.2- `TMUX_MAX_VERSION`: 3.3 -> 3.4 **Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.30.1...v0.30.2Low2/16/2024
v0.30.1- pytest plugin, test module: Update to renamed methods introduced in v0.30.0 **Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.30.0...v0.30.1Low2/16/2024
v0.30.0# New and improved commands by @tony in https://github.com/tmux-python/libtmux/pull/525 ### New commands - `Pane.kill()` ### Renamed commands - `Window.select_window()` renamed to `Window.select()` - Deprecated `Window.select_window()` - `Pane.select_pane()` renamed to `Pane.select()` - Deprecated `Pane.pane_select()` - `Session.attach_session()` renamed to `Session.attach()` - Deprecated `Session.attach_session()` - `Server.kill_server()` renamed to `Server.kill()` Low2/16/2024
v0.29.0## Develpment * fix(warnings): Use `DeprecationWarning` for APIs being deprecated by @tony in https://github.com/tmux-python/libtmux/pull/526 ## Testing * pytest: Ignore `DeprecationWarning` in tests @tony in https://github.com/tmux-python/libtmux/pull/526 **Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.28.1...v0.29.0Low2/16/2024
v0.28.1_Maintenance only, no bug fixes or new features_ #### Testing - CI: Bump actions to node 20+ versions #### Documentation - Refine docs and add migration for v0.28.0 **Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.28.0...v0.28.1Low2/15/2024
v0.28.0# Breaking changes ## `Session.new_window()` + `Window.split_window()`: No longer attaches by default - 0.28 +: Now _defaults_ to `attach=False`. - 0.27.1 and before: _defaults_ to `attach=True`. Pass `attach=True` for the old behavior. ## `Pane.resize_pane()` renamed to `Pane.resize()`: (#523) This convention will be more consistent with `Window.resize()`. ## `Pane.resize_pane()`: Params changed (#523) - No longer accepts `-U`, `-D`, `-L`, `-R` directly, instead accepts Low2/15/2024
v0.27.1## What's Changed * pyproject: Include `MIGRATION` in sdist by @tony in https://github.com/tmux-python/libtmux/pull/517, for https://github.com/tmux-python/libtmux/issues/508 **Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.27.0...v0.27.1Low2/8/2024
v0.27.0### Improvements - QueryList: Generic fixes by @tony in https://github.com/tmux-python/libtmux/pull/515 - This improves the annotations in descendant objects such as: - `Server.sessions` - `Session.windows` - `Window.panes` - Bolster tests (ported from `libvcs`): doctests and pytests **Full Changelog**: https://github.com/tmux-python/libtmux/compare/v0.26.0...v0.27.0Low2/7/2024
v0.26.0## What's Changed ### Breaking change - `get_by_id()` (already deprecated) keyword argument renamed from `id` to `Server.get_by_id(session_id)`, `Session.get_by_id(window_id)`, and `Window.get_by_id(pane_id)` (#514) ### Documentation - Various docstring fixes and tweaks (#514) ### Development - Strengthen linting (#514) - Add flake8-commas (COM) - https://docs.astral.sh/ruff/rules/#flake8-commas-com - https://pypi.org/project/flake8-commas/ - Add flake8Low2/6/2024
v0.25.0## Changes ### Comparator fixes * Fixed `__eq__` for windows. by @m1guelperez in https://github.com/tmux-python/libtmux/pull/505 * fix(pane,session,server): Return `False` if type mismatched by @tony in https://github.com/tmux-python/libtmux/pull/510 ### Documentation * ruff: Enable pydocstyle w/ numpy convention by @tony in https://github.com/tmux-python/libtmux/pull/509 ## New Contributors * @m1guelperez made their first contribution in https://github.com/tmux-python/libtmux/pLow11/25/2023

Dependencies & License Audit

Loading dependencies...

Similar Packages

dmuxTmux pane manager with AI agent integration for parallel development workflowsv5.9.0
tqdmFast, Extensible Progress Meterv4.68.1
inspect-aiFramework for large language model evaluationsmain@2026-06-05
hypothesisThe property-based testing library for Pythonv6.155.2
bleachAn easy safelist-based HTML-sanitizing tool.main@2026-06-05

More from pypi

markitdownUtility tool for converting various files to Markdown
fastapiFastAPI framework, high performance, easy to learn, fast to code, ready for production
djangoA high-level Python web framework that encourages rapid development and clean, pragmatic design.
flaskA simple framework for building complex web applications.

More in Frameworks

langchainThe agent engineering platform
deer-flowAn open-source long-horizon SuperAgent harness that researches, codes, and creates. With the help of sandboxes, memories, tools, skill, subagents and message gateway, it handles different levels of ta
tqdmFast, Extensible Progress Meter
simBuild, deploy, and orchestrate AI agents. Sim is the central intelligence layer for your AI workforce.