Releases: jline/jline3
Releases · jline/jline3
JLine 4.0.0
Breaking Changes
- Maven 4 requirement: Upgraded to POM model 4.1.0
- Java 11+ required: Raised minimum runtime requirement from Java 8 to Java 11
- JPMS migration: Complete Java Platform Module System migration with Java 24 support (#1374)
- JNA provider removed: Only JNI and FFM terminal providers remain
- Removed deprecated elements: All previously deprecated APIs removed (#1384)
- Standard Java SPI: Terminal providers now use standard Java ServiceLoader (#1523)
- Terminal lifecycle enforcement: Terminals throw exceptions when used after close (#1575)
- DefaultParser behavior: No longer emits trailing empty word for non-completion contexts (#1489)
New Features
Terminal Graphics & Display
- Comprehensive terminal graphics protocol support with runtime detection (#1378)
- Mode 2027 (grapheme cluster) support with DECRQM probing (#1637)
- True-color detection from COLORTERM environment variable
- ASCII fallback for box-drawing characters when alt charset is unsupported (#1638)
- Web and Swing terminal implementations (#1348)
Shell & Command Processing
- New
jline-shellmodule with extensible shell foundations, variable expansion, subcommands, I/O redirection, signals, scripts, and builtins integration - New
jline-componentsmodule for composable UI components - PipelineParser supports custom operator symbols and pseudo pipe operators (#1391, #1393)
- zsh-like history search navigation (#1449)
Prompts & UI
- New
jline-promptmodule with comprehensive prompt API and modern builder patterns (#1377) - Multi-character padding in secondary prompt pattern
%P{...} - Ctrl+C propagated as UserInterruptException in console-ui prompts
Platform Support
- GraalVM native image support for JNI provider across GraalVM 17, 21, and 25
- Modernized graal module to use FFM provider and Shell API
- Comprehensive ClassLoader support for TerminalBuilder (#1432)
Other
- Multi-version website deployment with version switcher
- WCWidth tables updated to Unicode 16.0 (#1650)
- System property support for line reader options (#1413)
- PosixCommands: POSIX
**globstar semantics, glob arguments, grep enhancements
Bug Fixes
- Display.resize() handles terminals with buffer wider than visible window (#1210)
- Preserve terminal content during resize with status bar (#1604)
- Restored Windows console codepage auto-detection (#1366)
- Expanded MSYS2 environment detection (#1445)
- Fixed quoted word completion buffer cleanup (#1644)
- Fixed StringIndexOutOfBoundsException in CompletionMatcherImpl (#1565)
- Windows: do not raise native signals if not enabled (#1532)
- Windows: prevent inherited input stream from being closed (#1115)
- Check native access before loading JNI library for JDK 24+ (#1067)
- Bracketed paste: send OFF sequence when option is explicitly disabled
- MenuSupport left/right navigation when GROUP_PERSIST is on (#1642)
Improvements
- Replaced reflection-based codepage detection with TerminalProvider SPI method
- Optimized Display performance and terminal capability usage (#1421)
- Platform-independent SyntaxHighlighter tests
JLine 3.30.7
Highlights
This release includes significant Windows terminal fixes, Unicode improvements, JDK 24+ compatibility, and numerous bug fixes backported from the 4.x development branch.
🚀 New Features & Improvements
- Windows codepage auto-detection: Restored automatic detection of Windows console output codepage, fixing Unicode rendering issues since JLine 3.22 (#1672, fixes #1366)
- MSYS2 environment detection: Expanded
IS_MSYSTEMto detect all MSYS2 environments (UCRT64, CLANG64, CLANGARM64, MINGW32), fixing backspace in git-bash (#1671, fixes #1445) - JDK 24+ compatibility: Check native access before loading JNI library to prevent restricted method warnings (#1664)
- Unicode 16.0: Updated
WCWidthcharacter width tables to Unicode 16.0 (#1651) whichcommand: Addedwhichbuiltin command to ConsoleEngine (#1636)- Display resize fix:
Display.resize()now handles terminals with buffer wider than visible window (#1634, fixes #1210) - Terminal closure enforcement: Accessing terminal streams after
close()now logs a warning by default, configurable viajline.terminal.closeModeproperty (#1577) - Standard SPI: Terminal providers now use standard Java
ServiceLoaderfor discovery (#1599) - Key binding docs: Fixed incorrect example for binding terminal capabilities — use
KeyMap.key()instead of rawgetStringCapability()(#1679, fixes #1668)
🐛 Bug Fixes
- Fix MenuSupport left/right navigation when
GROUP_PERSISTis on (#1643) - Fix
StringIndexOutOfBoundsExceptioninCompletionMatcherImpl(#1586, fixes #1565) - Fix doubled quotes when completing quoted words with multiple candidates (#1645)
- Fix ASCII fallback for box-drawing characters when alt charset is unsupported (#1639)
- Fix
DefaultParseremitting trailing empty word for non-completion contexts (#1622, fixes #1489) - Fix Ctrl+C propagation as
UserInterruptExceptionin console-ui prompts (#1621) - Fix newline binding for dumb terminal support in prompts (#1618)
- Fix
BRACKETED_PASTE_OFFnot sent when option is explicitly disabled (#1614) - Fix terminal content preservation during resize with status bar (#1605, fixes #1344)
- Fix inherited input stream being closed on Windows (#1603, fixes #1115)
- Fix nested shell interruption handling (#1602, fixes #1215)
- Fix Nano keypad state management (#1591)
- Fix auto-suggestion menu list not cleared when no completions match (#1632)
- Suppress
IOExceptioninPosixPtyTerminalpump threads during close (#1630) - Do not raise native signals on Windows if not enabled (#1542, fixes #1532)
AnsiConsolenow fails on repeated uninstalls (#1533, fixes #1525)- Allow single-digit options like
-1in Options parser (#1471, fixes #1396) - Fix setting line reader options via system properties (#1472, fixes #1413)
- Support
ls /, pseudo pipe operators, and ignore unknown pipe names (#1587, fixes #1391, #1393, #1436)
📦 Dependency Updates
Click to expand dependency updates
- Bump JUnit from 5.13.4 to 5.14.3
- Bump Groovy from 4.0.28 to 4.0.30
- Bump Apache SSHD from 2.15.0 to 2.17.1
- Bump GraalVM SDK from 24.2.2 to 25.0.2
- Bump JNA from 5.17.0 to 5.18.1
- Bump Maven Bundle Plugin from 6.0.0 to 6.0.2
- Bump Spotless from 2.46.1 to 3.2.1
- Bump Palantir Java Format from 2.73.0 to 2.89.0
- Various other Maven plugin and CI action updates
3.30.6
3.30.5
🚀 New features and improvements
- Improve console variable expansion (fixes #1370) (#1371) @paulk-asert
- ConsoleEngineImpl: change method and field visibilities (#1357) @mattirn
- Allow ConsoleEngineImpl subclasses access to VariableReferenceCompleter (#1362) @paulk-asert
- feat: add reusable POSIX commands to builtins module (#1341) @gnodet
- feat: support slurp command to be renamed (#1333) @paulk-asert
- feat: Extend InputRC with method/s to directly read ~/.inputrc & /etc/inputrc (#1297) @vorburger
- Allow system commands to be renamed. (#1334) @paulk-asert
🐛 Bug Fixes
- Fix macOS hang in pipe operations by removing PTY terminal usage (#1382) @gnodet
- enhancement: only compute suggestions in the Nano editor if something… (#1327) @johnpoth
- fix: refactor TerminalProvider methods to use inputEncoding/outputEncoding parameters (#1319) @gnodet
- Fix System.out not working after closing dumb terminal (#1337) @gnodet
📦 Dependency updates
- chore: Bump com.diffplug.spotless:spotless-maven-plugin from 2.45.0 to 2.46.1 (#1364) @dependabot[bot]
- chore: Bump groovy.version from 4.0.27 to 4.0.28 (#1365) @dependabot[bot]
- chore: Bump com.palantir.javaformat:palantir-java-format from 2.72.0 to 2.73.0 (#1369) @dependabot[bot]
- chore: Bump junit.version from 5.13.3 to 5.13.4 (#1363) @dependabot[bot]
- chore: Bump com.palantir.javaformat:palantir-java-format from 2.71.0 to 2.72.0 (#1359) @dependabot[bot]
- chore: Bump com.palantir.javaformat:palantir-java-format from 2.70.0 to 2.71.0 (#1354) @dependabot[bot]
- chore: Bump org.graalvm.sdk:graal-sdk from 24.2.1 to 24.2.2 (#1352) @dependabot[bot]
- chore: Bump com.google.jimfs:jimfs from 1.3.0 to 1.3.1 (#1351) @dependabot[bot]
- chore: Bump org.apache.maven.plugins:maven-enforcer-plugin from 3.6.0 to 3.6.1 (#1355) @dependabot[bot]
- chore: Bump on-headers and compression in /website (#1356) @dependabot[bot]
- chore: Bump com.diffplug.spotless:spotless-maven-plugin from 2.44.5 to 2.45.0 (#1347) @dependabot[bot]
- chore: Bump org.codehaus.gmavenplus:gmavenplus-plugin from 4.2.0 to 4.2.1 (#1346) @dependabot[bot]
- chore: Bump com.palantir.javaformat:palantir-java-format from 2.67.0 to 2.70.0 (#1342) @dependabot[bot]
- chore: Bump junit.version from 5.13.0 to 5.13.3 (#1343) @dependabot[bot]
- chore: Bump org.apache.maven.plugins:maven-clean-plugin from 3.4.1 to 3.5.0 (#1322) @dependabot[bot]
- chore: Bump com.diffplug.spotless:spotless-maven-plugin from 2.44.4 to 2.44.5 (#1315) @dependabot[bot]
- chore: Bump org.codehaus.mojo:build-helper-maven-plugin from 3.6.0 to 3.6.1 (#1326) @dependabot[bot]
- chore: Bump org.apache.maven.plugins:maven-gpg-plugin from 3.2.7 to 3.2.8 (#1339) @dependabot[bot]
- chore: Bump org.apache.maven.plugins:maven-enforcer-plugin from 3.5.0 to 3.6.0 (#1340) @dependabot[bot]
- chore: Bump junit.version from 5.12.2 to 5.13.0 (#1321) @dependabot[bot]
- chore: Bump eu.maveniverse.maven.njord:extension from 0.6.2 to 0.7.5 (#1330) @dependabot[bot]
📝 Documentation updates
- docs: Link to Nano Customization from Builtins doc page (#1312) @vorburger
- docs: Add Capability.enter_ca_mode and Capability.exit_ca_mode tip (#1311) @vorburger
- Remove double
docs/docsin edit links on jline.org (fixes #1309) (#1310) @vorburger - Update intro.md (#1332) @paulk-asert
👻 Maintenance
- Remove double
docs/docsin edit links on jline.org (fixes #1309) (#1310) @vorburger - chore: make downcall handles static final (#1331) @eregon
JLine 3.30.4
🐛 Bug Fixes
- fix: fix Jansi AnsiConsole broken color detection in uber jars (#1305) @gnodet
- fix: Fix SyntaxHighlighter glob pattern handling for non-default file systems (#1300) @gnodet
📦 Dependency updates
- chore: Bump eu.maveniverse.maven.njord:extension from 0.5.4 to 0.6.2 (#1307) @dependabot[bot]
- chore: Bump groovy.version from 4.0.26 to 4.0.27 (#1306) @dependabot[bot]
- chore: Bump org.codehaus.mojo:exec-maven-plugin from 3.5.0 to 3.5.1 (#1308) @dependabot[bot]
📝 Documentation updates
- docs: Link to Pty4j on Terminal (#1295) @vorburger
👻 Maintenance
JLine 3.30.3
🚀 New features and improvements
- Add support for separate encodings for stdin, stdout, and stderr (#1284) @gnodet
- [consoleui] Make prompts work in non-fullscreen mode (#1283) @gnodet
🐛 Bug Fixes
📦 Dependency updates
- chore: Bump com.palantir.javaformat:palantir-java-format from 2.38.0 to 2.67.0 (#1288) @dependabot[bot]
- chore: Bump org.easymock:easymock from 5.5.0 to 5.6.0 (#1279) @dependabot[bot]
- chore: Bump eu.maveniverse.maven.njord:extension from 0.5.2 to 0.5.4 (#1280) @dependabot[bot]
👻 Maintenance
JLine 3.30.2
🐛 Bug Fixes
📦 Dependency updates
- chore: Bump eu.maveniverse.maven.njord:extension from 0.5.1 to 0.5.2 (#1277) @dependabot[bot]
JLine 3.30.1
🐛 Bug Fixes
- fix: Update LineReaderImpl to use new readMouseEvent signature with lastBinding parameter (#1261) @gnodet
📝 Documentation updates
- docs: correct PicocliJLineExample snippet name in library-integration.md (#1271) @gnodet
- docs: validate code snippets during build time instead of runtime (#1272) @gnodet
- docs: add missing @SInCE 3.30.0 annotations to new methods in Terminal (#1270) @gnodet
- docs: integrate GitHub wiki content into website documentation (#1262) @gnodet
- docs: Improve website build system and documentation management (#1268) @gnodet
- docs: fix javadoc redirect URL issue (#1266) @gnodet
- docs: Add picocli links to library integration (#1257) @vorburger
- docs: Mention InputRC on Builtins (#1252) @vorburger
- doc: update version to 3.30.0 and add Javadoc integration (#1250) @gnodet
- docs: integrate ConsoleUI documentation into website (#1251) @gnodet
- docs: add syntax highlighting example classes for documentation (#1243) @gnodet
- docs: Expand DISABLE_EVENT_EXPANSION JavaDoc (re. #1238) (#1242) @vorburger
- docs: Link to documentation website earlier in README (see #1240) (#1241) @vorburger
👻 Maintenance
- chore: Add DevContainer JSON (#1264) @vorburger
- chore: Add suitable .vscode/ (#1263) @vorburger
- chore: Make ConfigurationPath fields final (#1255) @vorburger
JLine 3.30.0
JLine 3.30.0 comes with a brand new web site, a bunch of new features and a lof of bug fixes !
🎉 New Features
- feat: add pluggable completion to Nano editor (fixes #1194) (#1195) @gnodet
- feat: enhanced MouseSupport to handle multiple mouse event formats (SGR, URXVT, SGR-Pixels) (#1229) @gnodet
- feat: add getCurrentMouseTracking to Terminal interface (#1230) @gnodet
- feat: add ability to get terminal default foreground and background colors (#1208) @gnodet
- feat: add password masking support for dumb terminals (fixes #1172) (#1205) @gnodet
- feat: add line numbers and current line marker to secondary prompt (fix for #1151) (#1152) @bamcgill
🐛 Bug Fixes
- fix: use a fallback classloader suitable for java Modules or OSGi environments (fixes #1185) (#1186) @wglas85
- fix NPE in Status#resize when supported is false (fixes #1191) (#1204) @gnodet
- fix: fix nano editor exiting when pressing Ctrl+Space (fixes #1200) (#1202) @gnodet
- fix: fix parse error of system default
/usr/share/nano/*.nanorc(#1157) @snazy - fix: fix Terminal.trackMouse(MouseTracking.Off) (fixes #1189) (#1192) @gnodet
- fix: Make command execution order consistent in SystemRegistryImpl (#1237) @gnodet
- fix: handle invalid entries in history files gracefully (#1234) @gnodet
- fix: Properly fill screen lines with spaces when width is increased in ScreenTerminal (#1236) @gnodet
- Fix cursor position after Status.update() (#1216) @gnodet
- fix: improve script file detection and execution in Groovy REPL, fixes #1139 (#1140) @mattirn
- fix: ensure proper cleanup of pump threads in terminal implementations (#1162) @cstamas
- fix: add history line width check in ScreenTerminal.setSize() (fixes #1206) (#1207) @gnodet
- fix: console-ui example: catch UserInterruptException in place of IOError (#1164) @mattirn
- fix: fix Ctrl+Space handling on Windows terminals (#1203) @gnodet
Documentation
- docs: Integrate website into main repository (#1224) @gnodet
- docs: improve JLineNativeLoader documentation and references (#1209) @gnodet
- docs: fix readme (#1222) @gnodet
- docs: Add comprehensive Javadoc to jline-builtins module (#1223) @gnodet
- docs: improve Javadoc in console module (#1221) @gnodet
- docs: add comprehensive Javadoc to org.jline.style package (#1220) @gnodet
- docs: add comprehensive Javadoc to JLine Terminal and Reader (#1219) @gnodet
- docs: Add missing DISABLE_EVENT_EXPANSION JavaDoc (fixes #1218) (#1235) @vorburger
- docs: Make sure snippets compile (#1226) @gnodet
- docs: Corrected the maven central link (#1197) @andirady
Build
📦 Dependency updates
- Bump actions/configure-pages from 4 to 5 (#1225) @dependabot[bot]
- Bump info.picocli:picocli from 4.7.5 to 4.7.7 (#1227) @dependabot[bot]
- Bump info.picocli:picocli-shell-jline3 from 4.7.5 to 4.7.7 (#1228) @dependabot[bot]
- Bump org.fusesource.jansi:jansi from 2.4.1 to 2.4.2 (#1214) @dependabot[bot]
- Bump org.codehaus.gmavenplus:gmavenplus-plugin from 4.1.1 to 4.2.0 (#1211) @dependabot[bot]
- Bump info.picocli:picocli-codegen from 4.7.6 to 4.7.7 (#1196) @dependabot[bot]
- Bump org.graalvm.sdk:graal-sdk from 24.1.2 to 24.2.1 (#1190) @dependabot[bot]
- Bump com.diffplug.spotless:spotless-maven-plugin from 2.44.3 to 2.44.4 (#1184) @dependabot[bot]
- Bump junit.version from 5.12.1 to 5.12.2 (#1187) @dependabot[bot]
- Bump com.mycila:license-maven-plugin from 4.6 to 5.0.0 (#1181) @dependabot[bot]
- Bump org.apache.maven.plugins:maven-surefire-plugin from 3.5.2 to 3.5.3 (#1182) @dependabot[bot]
- Bump junit.version from 5.12.0 to 5.12.1 (#1178) @dependabot[bot]
- Bump net.java.dev.jna:jna from 5.16.0 to 5.17.0 (#1179) @dependabot[bot]
- Bump groovy.version from 4.0.25 to 4.0.26 (#1174) @dependabot[bot]
- Bump org.apache.maven.plugins:maven-install-plugin from 3.1.3 to 3.1.4 (#1176) @dependabot[bot]
- Bump org.apache.maven.plugins:maven-deploy-plugin from 3.1.3 to 3.1.4 (#1177) @dependabot[bot]
- Bump slf4j.version from 2.0.16 to 2.0.17 (#1175) @dependabot[bot]
- Bump sshd.version from 2.14.0 to 2.15.0 (#1169) @dependabot[bot]
- Bump junit.version from 5.11.4 to 5.12.0 (#1168) @dependabot[bot]
- Bump org.apache.maven.plugins:maven-compiler-plugin from 3.13.0 to 3.14.0 (#1167) @dependabot[bot]
- Bump com.diffplug.spotless:spotless-maven-plugin from 2.44.2 to 2.44.3 (#1166) @dependabot[bot]
- Bump org.apache.maven.plugins:maven-clean-plugin from 3.4.0 to 3.4.1 (#1165) @dependabot[bot]
JLine 3.29.0
💥 Breaking changes
- Undeprecate ConsolePrompt methods et al (#1148) @quintesse
🚀 New features and improvements
- Add text-only prompt element for console-ui (#1138) @quintesse
- Dynamic console-ui prompt improvements, see #1051 (#1132) @quintesse
🐛 Bug Fixes
- AnsiConsole should always obey the terminal (fixes #1160) (#1161) @cstamas
- Add overloaded no-arg compile method (#1137) @iflan
- Move catch to proper place (#1133) @cstamas
📦 Dependency updates
- Bump groovy.version from 4.0.24 to 4.0.25 (#1163) @dependabot[bot]
- Bump org.graalvm.sdk:graal-sdk from 24.1.1 to 24.1.2 (#1159) @dependabot[bot]
- Bump com.diffplug.spotless:spotless-maven-plugin from 2.44.1 to 2.44.2 (#1155) @dependabot[bot]
- Bump org.sonatype.central:central-publishing-maven-plugin from 0.6.0 to 0.7.0 (#1149) @dependabot[bot]
- Bump com.diffplug.spotless:spotless-maven-plugin from 2.43.0 to 2.44.1 (#1147) @dependabot[bot]
- Bump org.codehaus.gmavenplus:gmavenplus-plugin from 4.0.1 to 4.1.1 (#1146) @dependabot[bot]
- Bump org.apache.ivy:ivy from 2.5.2 to 2.5.3 (#1144) @dependabot[bot]
- Bump net.java.dev.jna:jna from 5.15.0 to 5.16.0 (#1142) @dependabot[bot]
- Bump junit.version from 5.11.3 to 5.11.4 (#1135) @dependabot[bot]