Releases: tmux-python/tmuxp
v1.62.0: Fix `tmuxp load` traceback after session kill
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:
- Loaded a tmux session via
tmuxp load - Worked in the session
- Killed the session (e.g., closed all windows) before detaching
- 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 therefresh()call - Nov 2025: tmuxp switched from the older
attach_session()toattach() - 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 therefresh()call that causedTmuxObjectDoesNotExistexceptions 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 tmuxpuv:
uv add tmuxpuvx (one-time use):
uvx tmuxp load <config>pipx:
pipx upgrade tmuxpWhat's Changed
Full Changelog: v1.61.0...v1.62.0
v1.61.0 - libtmux via trusted publisher
Breaking changes
-
py(deps) libtmux 0.51.0 -> 0.52.1, gp-libs 0.0.17 by @tony in #1001
Both packages are now published via PyPI Trusted Publishers
Full Changelog: v1.60.1...v1.61.0
v1.60.1 - Trusted publishing for PyPI
Deployment
Full Changelog: v1.60.0...v1.60.1
v1.60.0 - libtmux bump
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
What's Changed
Full Changelog: v1.59.0...v1.59.1
v1.59.0 - Maintenance release
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=Trueparameter →global_=True
Note: Options now return Python-native types (True/False instead of
"on"/"off", int instead of numeric strings).
What's Changed
Full Changelog:
v1.58.0...v1.59.0
v1.58.0 - Drop tmux < 3.2
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+
v1.56.0 - Drop Python 3.9
Breaking changes
Development
What's Changed
- docs(README): fix removed $ sign in the ins by @isandesh7 in #976
New Contributors
- @isandesh7 made their first contribution in #976
Full Changelog: v1.55.0...v1.56.0
v1.55.0 - Maintenance release
What's Changed
Full Changelog: v1.54.0...v1.55.0