Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/docs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ jobs:
# A pull request builds `latest` without publishing; this port has no
# preview role.
build:
uses: libtmux/docs/.github/workflows/port-docs.yml@6f721f9010b5dac60ef92011f325572d9368ca4b
uses: libtmux/docs/.github/workflows/port-docs.yml@8fda4b89071621b9ed2c4722a68d61f6ecf9c1c4
with:
port: ${{ inputs.language && inputs.language != 'all' && inputs.language || 'java' }}
include-wrappers: ${{ inputs.language == '' || inputs.language == 'all' }}
Expand All @@ -84,7 +84,7 @@ jobs:
permissions:
contents: read
id-token: write
uses: libtmux/docs/.github/workflows/reusable-deploy.yml@6f721f9010b5dac60ef92011f325572d9368ca4b
uses: libtmux/docs/.github/workflows/reusable-deploy.yml@8fda4b89071621b9ed2c4722a68d61f6ecf9c1c4
with:
# Unprefixed by locale: reusable-deploy prepends <locale>/ itself when
# `port` is set, so each language gets its own version tree.
Expand Down
18 changes: 11 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# libtmux for Java

<!-- libtmux-logo -->
<p align="center">
<picture>
Expand All @@ -9,21 +7,27 @@
</p>
<!-- /libtmux-logo -->

<div align="center">

# libtmux for Java

Typed, blocking access to [tmux](https://github.com/tmux/tmux) from the JVM.

A sibling of the Python [libtmux](https://libtmux.git-pull.com/), targeting
practical parity while reading as Java rather than as a translation.

[![CI](https://github.com/libtmux/libtmux-java/actions/workflows/ci.yml/badge.svg)](https://github.com/libtmux/libtmux-java/actions/workflows/ci.yml)
[![tmux matrix](https://github.com/libtmux/libtmux-java/actions/workflows/tmux-matrix.yml/badge.svg)](https://github.com/libtmux/libtmux-java/actions/workflows/tmux-matrix.yml)
[![Maven Central](https://img.shields.io/maven-central/v/io.github.libtmux/libtmux.svg)](https://central.sonatype.com/artifact/io.github.libtmux/libtmux)
[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
[![Status: alpha](https://img.shields.io/badge/status-alpha-orange.svg)](#status)

</div>

> **Alpha.** Releases carry an `-alpha` prerelease tag. The API is not
> settled, and any release may change or remove exported identifiers without a
> deprecation period. Pin an exact version. Not recommended for production.

Typed, blocking access to [tmux](https://github.com/tmux/tmux) from the JVM.

A sibling of the Python [libtmux](https://libtmux.git-pull.com/), targeting
practical parity while reading as Java rather than as a translation.

**JDK 25 or newer.** Add the library through
[`libtmux-bom`](libtmux-bom/), which names one version for every BOM-managed
coordinate:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -290,7 +290,11 @@ void everyPublishedModuleIntroducesItself() {
assertTrue(Files.isRegularFile(readme), module + " has no README");

String text = read(module + "/README.md");
assertTrue(text.startsWith("# " + module + "\n"), module + "'s README does not name it first");
String title = text.lines()
.filter(line -> line.startsWith("# "))
.findFirst()
.orElse("");
assertEquals("# " + module, title, module + "'s README does not name it in the first heading");
assertTrue(
text.contains("io.github.libtmux:" + module),
module + "'s README never states the coordinate to depend on");
Expand Down
8 changes: 6 additions & 2 deletions libtmux-bom/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# libtmux-bom

<!-- libtmux-logo -->
<p align="center">
<picture>
Expand All @@ -9,8 +7,14 @@
</p>
<!-- /libtmux-logo -->

<div align="center">

# libtmux-bom

**Name one BOM version. Every BOM-managed libtmux coordinate follows it.**

</div>

<!-- snippet: skip: build configuration, not library code -->
```kotlin
dependencies {
Expand Down
8 changes: 6 additions & 2 deletions libtmux-jackson/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# libtmux-jackson

<!-- libtmux-logo -->
<p align="center">
<picture>
Expand All @@ -9,8 +7,14 @@
</p>
<!-- /libtmux-logo -->

<div align="center">

# libtmux-jackson

**A filter expression, as a versioned JSON document.**

</div>

The core has no dependencies and never will. This module is where Jackson lives,
so that a filter can be stored, sent over a wire, or written by something that is
not a Java program.
Expand Down
8 changes: 6 additions & 2 deletions libtmux-junit5/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# libtmux-junit5

<!-- libtmux-logo -->
<p align="center">
<picture>
Expand All @@ -9,9 +7,15 @@
</p>
<!-- /libtmux-logo -->

<div align="center">

# libtmux-junit5

**A JUnit 5 extension that gives each test its own tmux server, and guarantees it
is gone afterwards.**

</div>

For testing *your* code against real tmux — not for testing libtmux — or, with
`FakeTmux`, without it.

Expand Down
8 changes: 6 additions & 2 deletions libtmux-kotlin/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# libtmux-kotlin

<!-- libtmux-logo -->
<p align="center">
<picture>
Expand All @@ -9,9 +7,15 @@
</p>
<!-- /libtmux-logo -->

<div align="center">

# libtmux-kotlin

**Coroutine wrapper classes, a session/window/split DSL, and `Flow`/`StateFlow`
bridges over the Java API.**

</div>

`io.github.libtmux:libtmux-kotlin` — [on Maven Central](https://central.sonatype.com/artifact/io.github.libtmux/libtmux-kotlin).

> **Alpha.** The API will change without notice.
Expand Down
8 changes: 6 additions & 2 deletions libtmux-mcp/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# libtmux-mcp

<!-- libtmux-logo -->
<p align="center">
<picture>
Expand All @@ -9,8 +7,14 @@
</p>
<!-- /libtmux-logo -->

<div align="center">

# libtmux-mcp

**A tmux server, exposed to a model over the Model Context Protocol.**

</div>

Point Claude Code, Claude Desktop, Codex, or any MCP client at a tmux socket and
it can find its way around, read what a pane is showing, run a command and wait
for it, and build a whole session with typed operations.
Expand Down
8 changes: 6 additions & 2 deletions libtmux-scala-cats/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# libtmux-scala-cats

<!-- libtmux-logo -->
<p align="center">
<picture>
Expand All @@ -9,8 +7,14 @@
</p>
<!-- /libtmux-logo -->

<div align="center">

# libtmux-scala-cats

**Cats Effect resources and FS2 observations for `libtmux-scala`.**

</div>

This optional module adds scoped blocking execution and loss-aware control
observations. `libtmux-scala` does not depend on Cats Effect or FS2; add this
artifact only when an application uses those integrations. Use the same version
Expand Down
8 changes: 6 additions & 2 deletions libtmux-scala-ox/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# libtmux-scala-ox

<!-- libtmux-logo -->
<p align="center">
<picture>
Expand All @@ -9,9 +7,15 @@
</p>
<!-- /libtmux-logo -->

<div align="center">

# libtmux-scala-ox

**An Ox `Flow` over libtmux subscriptions and live views, for structured
concurrency on virtual threads.**

</div>

This optional module adds no handle type: the direct-style facade's opaque
handles work unchanged inside an Ox `supervised` scope and its `fork`s. What it
adds is a cold `Flow` for the two things that push rather than answer: a control
Expand Down
8 changes: 6 additions & 2 deletions libtmux-scala/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# libtmux-scala

<!-- libtmux-logo -->
<p align="center">
<picture>
Expand All @@ -9,8 +7,14 @@
</p>
<!-- /libtmux-logo -->

<div align="center">

# libtmux-scala

**Scala 3 collections and opaque handles over libtmux for Java.**

</div>

Use Scala collections and explicit effects to inspect and operate tmux through
libtmux for Java. The direct-style facade's handles are opaque aliases of the
Java ones — lossless by construction, never a hand-copied parallel type — and
Expand Down
8 changes: 6 additions & 2 deletions libtmux-workspace-cli/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# libtmux-workspace-cli

<!-- libtmux-logo -->
<p align="center">
<picture>
Expand All @@ -9,8 +7,14 @@
</p>
<!-- /libtmux-logo -->

<div align="center">

# libtmux-workspace-cli

**`tmux-workspace` loads, captures, converts and imports tmux workspaces.**

</div>

Command names and flags follow [tmuxp](https://tmuxp.git-pull.com/) 1.74.0, and
every command answers in JSON or NDJSON on request. Loading, capture,
conversion, imports, discovery and search run on the JVM alone; only the
Expand Down
8 changes: 6 additions & 2 deletions libtmux-workspace/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# libtmux-workspace

<!-- libtmux-logo -->
<p align="center">
<picture>
Expand All @@ -9,8 +7,14 @@
</p>
<!-- /libtmux-logo -->

<div align="center">

# libtmux-workspace

**Builds a session from a tmuxp-shaped YAML description.**

</div>

Enough of [tmuxp](https://tmuxp.git-pull.com/)'s format to describe a workspace
and build it. Not a runtime-compatible reimplementation.

Expand Down
8 changes: 6 additions & 2 deletions libtmux/README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
# libtmux

<!-- libtmux-logo -->
<p align="center">
<picture>
Expand All @@ -9,8 +7,14 @@
</p>
<!-- /libtmux-logo -->

<div align="center">

# libtmux

**Typed, blocking access to a tmux server. No runtime dependencies.**

</div>

This is the whole library. Everything else in the repository is an adapter to
something — Jackson, JUnit, Kotlin, MCP, tmuxp — and depends on this.

Expand Down
Loading