Releases ยท jline/jline3 (original) (raw)
JLine 4.2.1
JLine 4.2.1 is a security patch release addressing two denial-of-service vulnerabilities in the remote-telnet module.
๐ Security Fixes
- fix: clamp NAWS terminal dimensions to prevent CPU exhaustion (GHSA-2r2c-cx56-8933)
- fix: cap NEW-ENVIRON variable count to prevent heap exhaustion (GHSA-47qp-hqvx-6r3f)
๐ Bug Fixes
๐ฆ Dependency updates
- chore: Bump com.diffplug.spotless:spotless-maven-plugin from 3.6.0 to 3.7.0 (#1973) @dependabot[bot]
JLine 4.2.0
JLine 4.2.0 is a minor release that bumps the version to reflect API and behavioral changes since the 4.1.x series.
Highlights:
java.loggingmodule dependency dropped โ JLine now usesSystem.Logger(JEP 264), removing thejava.loggingmodule requirement and making JLine friendlier in custom JPMS runtimes (#1934)- ScreenTerminal unified โ the two divergent copies (builtins vs terminal) are consolidated into
org.jline.utils.ScreenTerminal, with a fix for stale status rows when using bordered status displays (#1971) - Exit command made configurable โ the built-in
exitcommand is now a regular, configurable command rather than hardcoded (#1870) - Prompt module โ list and checkbox prompts now support per-item footers (#1933)
- Robustness fixes โ EOF propagation in PtyInputStream, signal handling with ISIG cleared, resize sync, graphics protocol detection on basic terminals, and several out-of-bounds guards
๐ New features and improvements
- refactor: unify ScreenTerminal โ move from builtins to terminal module (#1971) @gnodet
- feat(prompt): add optional per-item footer to list and checkbox prompts (#1933) @ingokegel
- refactor: drop the java.logging module dependency and use System.Logger instead (#1934) @ingokegel
- refactor: make exit command a regular, configurable command (#1870) @Elec332
- feat: add custom name parameter to PicocliCommandRegistry (#1947) @gnodet
๐ Bug Fixes
- fix: sync LineReader display model on resize (fixes #1940) (#1941) @zikolach
- fix: propagate EOF in PtyInputStream to avoid infinite loop (#1963) @gnodet
- fix: override bulk write in NonCloseableOutputStream to avoid byte-at-a-time writes (#1962) @gnodet
- fix: restore signal handling when ISIG is cleared (#1942) (#1959) @gnodet
- fix: skip graphics protocol detection for basic terminal types (#1957) @gnodet
- fix: keep polling the terminal probe response past a spurious EOF (#1944) @WouterGritter
- fix: guard ScreenTerminal.poke() against out-of-bounds cursor position (#1946) @gnodet
- fix: clamp cx in dumb_echo to prevent out-of-bounds cursor position (#1953) @gnodet
- fix: validate version format in release workflow (#1954) @gnodet
๐ฆ Dependency updates
- chore: Bump com.palantir.javaformat:palantir-java-format from 2.92.0 to 2.93.0 (#1964) @dependabot[bot]
- chore: Bump org.codehaus.gmavenplus:gmavenplus-plugin from 4.3.1 to 5.0.0 (#1938) @dependabot[bot]
- chore: Bump org.graalvm.buildtools:native-maven-plugin from 1.1.1 to 1.1.2 (#1950) @dependabot[bot]
- chore: Bump com.palantir.javaformat:palantir-java-format from 2.91.0 to 2.92.0 (#1949) @dependabot[bot]
- chore: Bump sshd.version from 2.17.1 to 2.18.0 (#1926) @dependabot[bot]
- chore: Bump org.apache.maven.plugins:maven-dependency-plugin from 3.10.0 to 3.11.0 (#1928) @dependabot[bot]
๐ป Maintenance
- chore: add security policy (SECURITY.md) (#1958) @gnodet
- chore: bump mvx to 0.13.0 (#1955) @gnodet
- chore: replace Thread.sleep with Awaitility in shell tests (#1956) @gnodet
- chore: upgrade CI build matrix from JDK 24 to JDK 25 (#1948) @gnodet
- chore: configure RB value with nisse (#1932) @hboutemy
๐ฆ Tests
JLine 4.1.3
JLine 4.1.3 is a patch release with important fixes for terminal close handling, raw mode signal behavior, FFM memory management, and shell command argument parsing.
Bug Fixes
- fix: terminal.close() blocks when pump thread is reading stdin (#1911, fixes #1909)
- fix: clear ISIG in enterRawMode so Ctrl+C reaches raw-mode readers (#1912)
- fix: use confined arenas instead of auto arenas in FFM CLibrary (#1913, fixes #1872)
- fix: swap rows/columns in openpty winsize constructor call (#1914, fixes #1910)
- fix: fix command argument parsing in DefaultCommandDispatcher (#1924)
Chores
- chore: add OSS AI helper rules for project conventions (#1917)
Dependencies
- chore: Bump org.graalvm.buildtools:native-maven-plugin from 1.1.0 to 1.1.1 (#1915)
- chore: Bump org.apache.maven.plugins:maven-surefire-plugin from 3.5.5 to 3.5.6 (#1918)
- chore: Bump com.diffplug.spotless:spotless-maven-plugin from 3.5.1 to 3.6.0 (#1919)
Full Changelog: 4.1.2...4.1.3
JLine 4.1.2
JLine 4.1.2 is a patch release focused on correctness fixes across the parser, terminal I/O, and shell modules.
Bug Fixes
- fix: echo preserves backslash before unrecognised escape sequences (#1901, fixes #1863)
- fix: DefaultParser preserves backslashes inside quotes (#1902, fixes #1877)
- fix: NonBlockingInputStream keeps thread alive after EOF (#1903, fixes #1879)
- fix: ensure cursor position after alternate screen init (#1904, fixes #1883)
- fix: use parser for command argument splitting (#1907, fixes #1876)
Dependencies
- chore: Bump eu.maveniverse.maven.nisse:extension from 0.9.1 to 0.9.2 (#1905)
Full Changelog: 4.1.1...4.1.2
JLine 4.1.1
JLine 4.1.1 is a patch release focused on stability fixes. The most notable change corrects the POSIX raw mode defaults (VMIN/VTIME) in enterRawMode, which could cause shell REPL sessions to hang or malfunction on certain platforms. This release also fixes a Display bug where the internal line buffer could alias or reject immutable caller-provided lists, hardens signal registration against null returns, and corrects alternate charset handling in ScreenTerminal.
๐ Bug Fixes
- fix: Fixed Display oldLines being set as possible immutable lists. (#1878) @Elec332
- fix: use POSIX cfmakeraw defaults (VMIN=1, VTIME=0) in enterRawMode (#1871) @BryanSant
- fix: skip null returns from signal registration in AbstractUnixSysTerminal (#1869) @BryanSant
- fix: Fixed ScreenTerminal alt-charset (#1867) @Elec332
๐ฆ Dependency updates
- chore: Bump com.palantir.javaformat:palantir-java-format from 2.90.0 to 2.91.0 (#1898) @dependabot
- chore: Bump eu.maveniverse.maven.nisse:extension from 0.9.0 to 0.9.1 (#1894) @dependabot
- chore: Bump junit.version from 6.0.3 to 6.1.0 (#1893) @dependabot
- chore: Bump groovy.version from 5.0.5 to 5.0.6 (#1865) @dependabot
- chore: Bump eu.maveniverse.maven.nisse:extension from 0.8.4 to 0.9.0 (#1887) @dependabot
- chore: Bump com.diffplug.spotless:spotless-maven-plugin from 3.5.0 to 3.5.1 (#1886) @dependabot
- chore: Bump org.apache.maven.plugins:maven-enforcer-plugin from 3.6.2 to 3.6.3 (#1889) @dependabot
- chore: Bump com.diffplug.spotless:spotless-maven-plugin from 3.4.0 to 3.5.0 (#1880) @dependabot
- chore: Bump slf4j.version from 2.0.17 to 2.0.18 (#1874) @dependabot
๐ป Maintenance
New Contributors
- @BryanSant made their first contribution in #1869
Full Changelog: 4.1.0...4.1.1
JLine 4.1.0
JLine 4.1 is the first minor release of the 4.x series, bringing new features, significant performance improvements, internal refactoring, and many bug fixes across terminal handling, encoding, and platform support.
Highlights include streaming pipes with concurrent pipeline execution, a new Sized interface for uniform terminal size access, optimized display rendering with direct byte buffers, modernized signal handling via Panama FFM sigaction(), and a comprehensive overhaul of termios constant mappings across all supported platforms.
๐ New features and improvements
- refactor: introduce Sized interface and Size.of() factory methods (#1731) @Elec332
- feat: Added UnknownCommandException for Shell module (#1780) @Elec332
- feat: bulk read for NonBlockingPumpInputStream (#1778) @gnodet
- feat: add filterable(boolean) option to list and checkbox prompts (#1784) @ingokegel
- refactor: Deduplicate AttributedCharSequence#emitStyleChange. (#1788) @Elec332
- perf: optimize Display.update for minimal allocation and output bytes (#1785) @gnodet
- feat: streaming pipes with concurrent pipeline execution (#1777) @gnodet
- feat: optimize output rendering with direct byte buffer (#1749) @gnodet
- feat: modernize signal handling via Panama FFM sigaction() (#1750) @gnodet
- feat: Add /dev/tty fallback for terminals with piped streams (#1728) @gnodet
๐ Bug Fixes
- Fix status bar duplication after vertical resize (#1860) @Abdelilah-AIT-HAMOU
- fix: remove proactive isNativeAccessEnabled() checks from terminal providers (#1859) @gnodet
- fix: prevent DA response bytes from leaking to parent shell (#1856) (#1857) @gnodet
- fix: correct inverted bounds check in readBuffered methods (#1853) @gnodet
- fix: wire up unmapped termios constants in JNI and FFM providers (#1838) @gnodet
- fix: correct Solaris termios constants from octal to proper hex (#1837) @gnodet
- fix: correct FreeBSD PENDIN and NOFLSH termios constants (#1834) @gnodet
- fix: correct Linux PENDIN termios constant (#1835) @gnodet
- fix: add missing CDTR_IFLOW readback in OsX toAttributes (#1836) @gnodet
- fix: replace Thread.sleep() with synchronization in TmuxEncodingTest (#1827) @gnodet
- fix: add VT100 response feedback to SwingTerminal and WebTerminal (#1824) @gnodet
- fix: use console encoding instead of default charset in Tmux (#1826) @gnodet
- fix: tail -n counts lines correctly when input lacks trailing newline (fixes #1787) (#1823) @gnodet
- fix: use terminal encoding instead of default charset in VirtualTerminal (fixes #1821) (#1822) @gnodet
- fix: close terminal in PromptBuilderTest to prevent resource leak (fixes #1810) (#1820) @gnodet
- fix: resolve redirect targets against session working directory (#1781) @gnodet
- fix: erase probe emoji after grapheme cluster width detection (fixes #1801) (#1770) @ingokegel
- fix: close PTY streams before shutdown to prevent hang on macOS (fixes #1808) (#1817) @gnodet
- fix: register all FFM foreign function signatures for GraalVM native-image (#1802) @gnodet
- fix: close terminals properly in tests (fixes #1806) (#1814) @gnodet
- fix: deprecate SwingTerminal.dispose() in favor of close() (fixes #1805) (#1811) @gnodet
- fix: avoid NPE when closing terminal with null masterOutput (#1813) @gnodet
- fix: Fix AttributedStyle color chaining (#1792) @Elec332
- fix: remove spurious (short) casts in Size setters (#1791) @gnodet
- fix: move Terminal parameter to first position in columnSubSequence and columnSplitLength (#1790) @gnodet
- fix: compiler error in ScreenTerminal.dump() (#1773) @Elec332
๐ฆ Dependency updates
- chore: Bump actions/upload-pages-artifact from 4 to 5 (#1783) @dependabot[bot]
- chore: Bump org.graalvm.sdk:graal-sdk from 25.0.2 to 25.0.3 (#1799) @dependabot[bot]
- chore: Bump eu.maveniverse.maven.nisse:extension from 0.8.3 to 0.8.4 (#1798) @dependabot[bot]
- chore: Bump org.graalvm.buildtools:native-maven-plugin from 1.0.0 to 1.1.0 (#1816) @dependabot[bot]
- chore: Bump eu.maveniverse.maven.nisse:extension from 0.8.2 to 0.8.3 (#1772) @dependabot[bot]
๐ Documentation updates
- docs: add branch structure and release process to CLAUDE.md (#1844) @gnodet
- docs: update website for JLine 4.0 release (#1774) @gnodet
๐ป Maintenance
- fix: deduplicate ReaderTestSupport between reader and builtins (fixes #1807) (#1815) @gnodet
- chore: add dependabot for 4.0.x maintenance branch (#1849) @gnodet
- fix: pass explicit version to nisse in release workflow (#1845) @gnodet
- refactor: modernize codebase with Java 9-11 idioms (#1839) @gnodet
- refactor: flatten terminal provider abstraction and extract TermiosMapping (#1828) @gnodet
- refactor: extract shared ScreenTerminalOutputStream (fixes #1797) (#1825) @gnodet
- refactor: Deduplicate AttributedCharSequence#emitStyleChange. (#1788) @Elec332
- refactor: trim unused public API from optimization commits (#1789) @gnodet
- refactor: standardize terminal dimension naming to columns/rows (#1755) @gnodet
๐ฆ Tests
- test: fix TerminalGraphicsTest to validate actual terminal graphics behavior (fixes #1809) (#1818) @gnodet
- Pass on test cases (class/function modifier & more) (#1794) @Elec332
JLine 4.0.15
JLine 4.0.15 is a patch release fixing status bar rendering after terminal resize.
Bug Fixes
- Fix status bar duplication after vertical resize (#1860) @Abdelilah-AIT-HAMOU
When the terminal height shrinks, some terminal emulators keep the old bottom status line just above the new status area, causing duplicated status bar rows. This release clears the stale status rows during resize.
Full Changelog: 4.0.14...4.0.15
JLine 3.30.13
JLine 3.30.13 is a patch release fixing status bar rendering after terminal resize.
Bug Fixes
- Fix status bar duplication after vertical resize (#1860) @Abdelilah-AIT-HAMOU
When the terminal height shrinks, some terminal emulators keep the old bottom status line just above the new status area, causing duplicated status bar rows. This release clears the stale status rows during resize.
Full Changelog: jline-3.30.12...jline-3.30.13
JLine 4.0.14
๐ฆ Dependency updates
- chore: Bump junit.version from 5.14.3 to 5.14.4 (#1848) @dependabot[bot]
- chore: Bump actions/checkout from 4 to 6 (#1847) @dependabot[bot]
JLine 3.30.12
[maven-release-plugin] copy for tag jline-3.30.12