Prerelease This site documents an alpha of libtmux. Its structure, URLs and APIs are subject to change.

Edit this page on GitHub

Use a collection filter to find matching sessions, windows, or panes. Use an exactly-one lookup when your next operation requires a single target.

  • Filtering returns a collection; exactly-one lookup checks the result count. A .filter() or .where() call returns zero or more matches. Methods such as .get(), .one(), and Selections.exactlyOne() return one object or report a missing or ambiguous match.

  • Choose where to filter. Filter a snapshot in your program when you need several queries over the same data. A tmux format filter can reduce the rows returned by a live read. The cost depends on the data and queries you need.

Python: .filter() and .get(), Django-styleLink to section

server.sessions, session.windows, and window.panes are QueryList collections. Call .filter() with field names and optional lookup suffixes:

Lookups include exact, contains, startswith, endswith, regex, and their case-insensitive i-prefixed variants. Multiple keywords and chained .filter() calls combine with AND. .get() requires exactly one match. Its default argument handles an absent result; multiple matches still raise MultipleObjectsReturned.

Server-wide collections (server.windows, server.panes) enumerate window links. A window linked to two sessions appears once per session, so a lookup can be ambiguous even when the window ID is unique. Use Window.linked_sessions to find its sessions. For a known ID, use Pane.from_pane_id() or Window.from_window_id() to resolve the object directly.

For servers with hundreds or thousands of panes, .filter() still builds every object before you discard the ones that don’t match. search_sessions, search_windows, and search_panes push a tmux -f filter expression down to the server instead, so libtmux builds objects only for the matches:

Python-side lookups work with the library’s supported tmux versions. The tmux filter grammar requires tmux 3.2 or newer. An unknown format token expands to an empty value, so a malformed filter can look like a valid filter with no matches. If search_*() unexpectedly returns no results, try #{m:*,#{session_name}} to check that the session data is available.

TypeScript: criteria as dataLink to section

TypeScript’s Selection.where() accepts structured, serializable criteria that can be stored in a configuration file or sent through MCP:

some, every, and none test related objects. { mode: "insensitive" } enables case-insensitive comparison. Use .where() for criteria that can be encoded with encodeWhereDocument and decoded with decodeWhereDocument; use .filter() for a predicate function. .one() throws NoMatchError or MultipleMatchesError. .oneOrUndefined() permits an absent result.

Go, Rust, Java, C++: typed fields that fail queries at compile timeLink to section

These ports use typed fields to reject invalid comparisons at compile time:

Examples of typed and local filters:

The cardinality contract, side by sideLink to section

PortCollection filterExactly-oneEmptySeveral
Python.filter().get()ObjectDoesNotExist (or default=)MultipleObjectsReturned
TypeScript.where() / .filter().one()NoMatchError (or .oneOrUndefined())MultipleMatchesError
JavaStream.filter()Selections.exactlyOne()NoMatchExceptionMultipleMatchesException

See the Go, Rust, C++, .NET, and Swift references for their exactly-one result types and failure handling.

Esc

Type to search.