Core LibraryGuides

Choose documentation 1

latest

Current version

latest
English

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

Compatibility

The Scala facades build, test and publish with the rest of the repository, so they meet the same gates the Java library does.

Compilers and runtimes

Scala 3.9 only — there is no 2.13 build — compiled to JDK 25 bytecode. CI runs the facades’ unit suites, their real-tmux suites, the documented Scala examples and the runnable programs on JDK 25 and 27 on Linux, and on macOS.

Every lane of the tmux matrix runs the real-tmux suites against its own tmux: 3.2a, 3.3, 3.3a, 3.4, 3.5, 3.6, 3.7, 3.7a, 3.7b and 3.7c. The Scala fixture takes the lane’s tmux the same way the Java one does.

Artifacts

  • libtmux-scala_3 — direct-style operations and the typed query DSL.
  • libtmux-scala-cats_3 — Cats Effect resources and FS2 observations.
  • libtmux-scala-ox_3 — an Ox Flow over subscriptions and live views.

Core’s runtime dependencies are the Scala 3 library and libtmux. Cats Effect and FS2 belong to libtmux-scala-cats, Ox to libtmux-scala-ox. None depends on Jackson, JUnit, Kotlin, MCP or the workspace packages.

The Scala artifacts release with the Java ones, at the same version, in the same Central deployment, signed and attested alike. libtmux-bom manages them too, so one BOM version selects a matching Java and Scala set.

The generated and handwritten surface

Every direct-style extension method and Cats per-operation forward that reaches tmux is generated from the operation catalog libtmux ships, by ScalaOperationGenerator — never hand-copied per method, so it cannot drift from what Java exposes. WAIT, STREAM and LIFECYCLE operations are written by hand, for their cancellation or resource scoping: Server.open/fromJava/within/control, Pane.awaitText/run/await, LiveView, LiveServer, and both modules’ Observation.

Both facades generate from the same catalog through the same owner-and-kind branching, and the generator’s tests hold the two to it: a captured operation forwards purely on both, and a mutation is effect-wrapped on the Cats side only. Nothing Scala has shipped yet, so there is no earlier release for MiMa or tasty-mima to compare against.

Inherited feature boundaries

The facade preserves Java’s version guards. Named buffer deletion rejects tmux before 3.4 because those versions can delete the wrong buffer. Shell.capturing rejects tmux 3.3a and 3.4, which lose the requested output. Java’s tmux matrix asserts these unsupported results rather than skip the contract or substitute an empty successful result.

Capture and buffer reads retain Java’s normalized text, including its handling of trailing empty lines. Observations retain decoded text chunks. These APIs do not promise arbitrary-byte round trips. Sparse hook listings preserve command order without inventing their original indices. Basic copy-mode entry, inspection, and exit are wrapped; advanced commands use explicit raw access. See execution for control acknowledgement limits, and ownership for resource lifetimes.

Esc

Type to search.