Conversation
why: libtmux releases in lockstep with the tmuxp release cycle —
when libtmux 0.56.0 lands and tmuxp needs to bump, the rolling
exclude-newer = now − P3D window in the lockfile filters every
release younger than 3 days, so contributor `uv sync` against the
new pin would fail until the window naturally clears:
× No solution found when resolving dependencies:
╰─▶ Because libtmux==0.56.0 was published after the exclude
newer time and only libtmux<=0.55.1 is available...
hint: Consider using `exclude-newer-package` to override the
cutoff for this package.
libtmux is a git-pull package (same maintainer surface as gp-libs
and the gp-sphinx workspace already whitelisted in 6c0a0b2), so
the supply-chain cooldown adds friction without adding safety —
gp == git-pull, and so are we. Whitelisting now also unblocks the
imminent ~=0.55.0 -> ~=0.56.0 bump without staging it on a
3-day-delayed branch.
what:
- Add `libtmux = false` to [tool.uv.exclude-newer-package],
slotted between the gp-* group and the sphinx-* group in line
with the existing visual grouping. No comment churn — the
existing block-level comment from 6c0a0b2 already covers the
rationale (git-pull lockstep releases, vcspull/libvcs precedent).
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #1038 +/- ##
=======================================
Coverage 81.96% 81.96%
=======================================
Files 28 28
Lines 2545 2545
Branches 485 485
=======================================
Hits 2086 2086
Misses 328 328
Partials 131 131 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
why: Document the libtmux dependency bump for the upcoming release so an end user skimming next-version notes can confirm their `tmuxp load`/`freeze`/YAML workflow won't change. The first draft of this entry leaned on libtmux internals (`control_mode` fixture, `TMUX_MAX_VERSION` ceiling, the `move_window()` auto-refresh) — accurate but useless to a session- manager user, who never meets those names. what: - Add a Breaking Changes entry under the unreleased tmuxp 1.68.0 block. Frames the bump through the one tmuxp surface where users actually meet libtmux APIs (`tmuxp shell`): notes that 0.56.0 broadens the tmux command coverage available there (interactive commands, buffer I/O, key bindings, window/pane manipulation), and that 0.55.1 is a test-fixture cleanup. Skips the upstream's contributor-only additions (pytest fixture, version-ceiling bump, etc.) — those belong in libtmux release notes, not the session-manager changelog. - Heading style mirrors the prior 1.65.0 entry verbatim (`#### **libtmux** minimum bumped from ...`) so the changelog reads consistently across libtmux jumps.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
libtmuxfrom~=0.55.0to~=0.56.0libtmuxfrom theexclude-newercooldown so contributoruv syncworks against the new pin without waiting 3 daysmove_window()auto-refresh fix,control_modepytest fixture,TMUX_MAX_VERSION-> 3.7)Window.move_window()call doesn't read post-move attributes so the upstream auto-refresh fix is a free correctness improvementUpstream changes
libtmux 0.56.0 (2026-05-10)
What's new (#653)
Server.cmd()calls —Pane.display_popup,Server.display_menu,Server.command_prompt,Server.confirm_before,Session.detach_client,Server.detach_client,Server.detach_all_clients,Pane.display_panes, plus thechoose_*family (choose_buffer,choose_client,choose_tree). The threedetach-clientwrappers each map to one tmux flag group with a single subprocess call.Server.set_buffer,show_buffer,delete_buffer,save_buffer,load_buffer,list_buffers, plusPane.paste_bufferround-trip pane content through named tmux buffers.Servergainsbind_key,unbind_key,list_keys,list_commands,run_shell,if_shell,source_file,list_clients,start_server,lock_server,lock_client,refresh_client,suspend_client,server_access,show_messages,show_prompt_history,clear_prompt_history.Sessiongainslock_session.Panegainssend_prefix.Window.swap,link,unlink,respawn,last_pane,next_layout,previous_layout,rotate; newPane.swap,join,break_pane,move,pipe,clear_history,respawn,copy_mode,clock_mode,customize_mode,find_window; newServer.wait_for,Session.last_window,next_window,previous_window.Pane.send_keys(literal, hex, key-name, format, client),Pane.split(percentage=),Pane.capture_pane(alternate-screen, quiet, write-to-buffer),Pane.display_message,Pane.display_popup(target_client=,-c),Window.move_window(after, before, kill, renumber),Window.select_layout(spread, next, previous),Server.new_session,Session.new_window,Server.set_environment,Server.show_options(quiet=).control_modepytest fixture: spawns a realtmux -Cclient attached to the session so commands that require an attached client are testable without a TTY.Bug fixes (#653)
Window.move_window()now refreshes the moved window automatically; previously theWindowobject pointed at its pre-move index until a manualrefresh(). tmuxp's only call site (workspace/builder.py:629) doesn't read post-move attributes, so this is a free correctness improvement.Development (#653)
TMUX_MAX_VERSIONbumped to"3.7", unlocking method coverage already version-gated for tmux 3.7 (notablycommand_prompt(bspace_exit=)andshow_messages(terminals=, jobs=)). No effect on installations running tmux 3.6 or earlier.libtmux 0.55.1 (2026-04-19)
pytest_plugin:serverandTestServerfixture finalizers nowunlink(2)the tmux socket from/tmp/tmux-<uid>/in addition toserver.kill(). tmux doesn't reliably unlink its socket on non-graceful exit, so long-lived dev machines were accumulating 10k+ stalelibtmux_test*entries (Remove Python 2.7 #661, fixes Freeze config for attached session #660).Changes in this PR
1d6bb889): addslibtmux = falseto[tool.uv.exclude-newer-package]inpyproject.tomlso the rolling 3-day cooldown doesn't block contributoruv syncagainst the new pin. Mirrors the precedent set in6c0a0b2dfor the gp-* dep surface.3754a060):pyproject.tomllibtmux~=0.55.0->libtmux~=0.56.0;uv.lockregenerated viauv lock --upgrade-package libtmux(other packages unchanged).Test plan
uv run py.testpasses locallyuv run mypypassesuv run ruff check .passesRelease: https://github.com/tmux-python/libtmux/releases/tag/v0.56.0
Changelog: https://libtmux.git-pull.com/history.html