Skip to content

Releases: tmux-python/tmuxp

v1.62.0: Fix `tmuxp load` traceback after session kill

14 Dec 12:15

Choose a tag to compare

Highlights

This release fixes an important bug where users would see a TmuxObjectDoesNotExist traceback after detaching from a session that was killed during use. The fix comes via the libtmux 0.53.0 dependency update.

Bug Fixes

Fixed traceback on session load (#1002, #1003)

Fixed an issue where tmuxp load would display a traceback after users detached from a killed session.

The Problem

After running tmuxp load, users would see this traceback printed to their terminal after detaching:

Traceback (most recent call last):
  File "~/.local/bin/tmuxp", line 7, in <module>
    sys.exit(cli.cli())
  ...
  File ".../tmuxp/cli/load.py", line 152, in _load_attached
    builder.session.attach()
  File ".../libtmux/session.py", line 332, in attach
    self.refresh()
  File ".../libtmux/neo.py", line 242, in fetch_obj
    raise exc.TmuxObjectDoesNotExist(...)
libtmux.exc.TmuxObjectDoesNotExist: Could not find object

When It Occurred

Users encountered this when they:

  1. Loaded a tmux session via tmuxp load
  2. Worked in the session
  3. Killed the session (e.g., closed all windows) before detaching
  4. Detached from tmux

Root Cause

The issue was in libtmux's Session.attach() method, which called refresh() after the attach-session command returned. Since attach-session is a blocking interactive command, the session state can change arbitrarily during attachment — including being killed entirely. Attempting to refresh a non-existent session caused the exception.

Timeline

  • Feb 2024: libtmux added Session.attach() with the refresh() call
  • Nov 2025: tmuxp switched from the older attach_session() to attach()
  • Users started experiencing the bug

Resolution

Fixed in libtmux 0.53.0 (libtmux#616) by removing the unnecessary refresh() call from Session.attach().

Dependency Updates

libtmux 0.52.1 → 0.53.0

Breaking Change: Minimum libtmux version bumped from 0.52.1 to 0.53.0.

libtmux 0.53.0 includes:

  • Fix for Session.attach(): Removes the refresh() call that caused TmuxObjectDoesNotExist exceptions when sessions were killed during attachment

Development Updates

  • Bumped development dependencies
  • Updated uv from 0.9.16 to 0.9.17

Installation

pip:

pip install --upgrade tmuxp

uv:

uv add tmuxp

uvx (one-time use):

uvx tmuxp load <config>

pipx:

pipx upgrade tmuxp

What's Changed

  • py(deps) Bump libtmux 0.52.1 -> 0.53.0 by @tony in #1003

Full Changelog: v1.61.0...v1.62.0

v1.61.0 - libtmux via trusted publisher

08 Dec 00:21

Choose a tag to compare

Breaking changes

Full Changelog: v1.60.1...v1.61.0

v1.60.1 - Trusted publishing for PyPI

07 Dec 22:35

Choose a tag to compare

Deployment

  • ci(release): Migrate to PyPI Trusted Publisher by @tony in #1000

Full Changelog: v1.60.0...v1.60.1

v1.60.0 - libtmux bump

06 Dec 23:09

Choose a tag to compare

Breaking changes

  • py(deps) libtmux 0.50.1 -> 0.51.0 by @tony in #999

    This libtmux bump will have a hard exception raised for legacy APIs - rather than just a warning.

Full Changelog: v1.59.1...v1.60.0

v1.59.1 - Maintenance released

06 Dec 17:54

Choose a tag to compare

What's Changed

Full Changelog: v1.59.0...v1.59.1

v1.59.0 - Maintenance release

30 Nov 22:41

Choose a tag to compare

Breaking changes

libtmux 0.50.0 (#996)

libtmux minimum version bumped from 0.49.0 -> 0.50.0.

Internal updates to use libtmux's new unified options API:

  • Session.attach_session()Session.attach()
  • Window.show_window_option()Window.show_option()
  • Window.show_window_options()Window.show_options()
  • Window.set_window_option()Window.set_option()
  • g=True parameter → global_=True

Note: Options now return Python-native types (True/False instead of
"on"/"off", int instead of numeric strings).

What's Changed

  • libtmux 0.49.0 -> 0.50.0 and API updates by @tony in #996

Full Changelog:
v1.58.0...v1.59.0

v1.58.0 - Drop tmux < 3.2

30 Nov 12:14

Choose a tag to compare

Breaking Changes

  • Drop support for tmux versions < 3.2 by @tony in #993
  • py(deps) libtmux 0.48.0 -> 0.49.0 by @tony in #992

Full Changelog: v1.57.0...v1.58.0

v1.57.0 - Minimum tmux 3.2+

28 Nov 22:03

Choose a tag to compare

What's Changed

Breaking changes

  • Deprecate tmux versions below 3.2a by @tony in #991
  • py(deps) libtmux 0.47.0 -> 0.48.0 by @tony in #990

Development

  • tmux: Add tmux 3.6 to testgrid by @tony in #989

Full Changelog: v1.56.0...v1.57.0

v1.56.0 - Drop Python 3.9

01 Nov 17:24

Choose a tag to compare

Breaking changes

  • Drop Python 3.9 by @tony in #987
  • Minimum libtmux version to v0.47.0

Development

What's Changed

New Contributors

Full Changelog: v1.55.0...v1.56.0

v1.55.0 - Maintenance release

26 Feb 14:07

Choose a tag to compare

What's Changed

  • py(deps) libtmux 0.45.0 -> 0.46.0 by @tony in #969

    Update for libtmux.test imports.

Full Changelog: v1.54.0...v1.55.0