Skip to content

Latest commit

 

History

History
81 lines (65 loc) · 4.06 KB

compatibility.md

File metadata and controls

81 lines (65 loc) · 4.06 KB

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.

Every lane of the tmux matrix runs the real-tmux suites against its own tmux: 3.3a, 3.4, 3.5, 3.6, 3.6a, 3.7, 3.7a, 3.7b and 3.7c. The Scala fixture takes the lane's tmux the same way the Java one does. The facades inherit Java's version check and reject older daemons.

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. Managed control, FS2/Ox observations and live views require tmux 3.7+ and a carrier-owned pinned socket. Ordinary operations remain available from 3.3a. Control-positive cases run only on eligible lanes; lower lanes assert before-effect refusal.

Named buffer deletion rejects tmux before 3.4 because those versions can delete the wrong buffer. The same boundary covers named rename and managed-paste cleanup. Direct named paste-buffer -d retains its native exact lookup on 3.3a. 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.