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

Execute tmux commands

Lua
  • Python Unavailable
  • Ruby Unavailable
  • Lua
  • TypeScript Unavailable
  • Rust Unavailable
  • Go Unavailable
  • Java Unavailable
  • .NET Unavailable
  • C++ Unavailable
  • Swift Unavailable

After connecting, server:command(argv, options) submits literal tmux arguments and returns a Request. It preserves raw stdout/stderr bytes, exit code and signal, and waits for the owned client and its pipes to retire. A completed nonzero exit is returned as result data. Spawn, timeout, output-limit and incomplete-drain failures return nil, err.

No shell parses argv. tmux still parses its own command syntax; the library protects literal separator arguments. A tmux command that explicitly accepts shell text, such as run-shell, retains that command’s shell semantics.

Native command aliases apply even to full built-in names, including commands used by typed domain methods. Hooks can run additional commands and affect state. The library does not change borrowed server configuration or promise that aliases preserve built-in semantics. A preliminary configuration check cannot prevent an alias from changing before a later command is parsed.

Use server:group(commands, options) for an explicit ordered tmux command group. Its result is aggregate output and exit status. Parse failure can reject the whole group, immediate execution failure skips later commands, and delayed WAIT-command failures can still allow later commands. A group provides neither transactions nor independently attributed member results.

Output routing also follows tmux: run-shell without a pane target writes job output to pane view mode on tmux 3.3–3.4; tmux 3.2a and 3.5 onward write it to the waiting client’s stdout. An explicit -t pane target selects pane output. Without -b, client completion still waits for the job, and a control-mode %end marker can precede that completion. See the upstream stdout restoration.

Use server:batch(commands, { concurrency = n, process = options }) for independent commands. Concurrency defaults to one and is bounded at 128; runtime capacity can reduce the active pool. The result is an input-indexed array of completed, failed, unknown or skipped outcomes, each with effect and optional value/error. Nonzero exits are failed outcomes with their actual result in error.partial. Other commands continue. A canceled batch exposes a frozen err.partial.outcomes receipt; it preserves completed results and distinguishes started work from work never sent.

All commands and process options are validated and copied before dispatch. One submission accepts at most 1,024 commands, 4,096 total arguments and 16 MiB of input. NUL is rejected in argv and environment entries; raw stdin can contain it. Never retry mutations automatically, especially after an unknown effect. Canceling a client does not prove daemon work stopped.

Process options include stdin, cwd, explicit env entries, timeout, monotonic deadline, max_output_bytes (default 1 MiB), drain_timeout (250 ms), and kill_timeout (100 ms). Timeout/deadline apply to the client operation; pinned endpoint evidence uses a separate bounded check. Output limits and runtime byte admission remain distinct. Excess batch output is reported with byte counts and truncation metadata; it is not silently kept.

The raw API is an escape hatch. Named domain operations, owned command completion and observation APIs are still under development. A successful send-keys process does not report the exit of a pane application.

Esc

Type to search.