Skip to content

Releases: jline/jline3

JLine 4.0.0

03 Mar 15:15

Choose a tag to compare

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-shell module with extensible shell foundations, variable expansion, subcommands, I/O redirection, signals, scripts, and builtins integration
  • New jline-components module 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-prompt module 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

03 Mar 14:41
2cbd67f

Choose a tag to compare

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_MSYSTEM to 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 WCWidth character width tables to Unicode 16.0 (#1651)
  • which command: Added which builtin 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 via jline.terminal.closeMode property (#1577)
  • Standard SPI: Terminal providers now use standard Java ServiceLoader for discovery (#1599)
  • Key binding docs: Fixed incorrect example for binding terminal capabilities — use KeyMap.key() instead of raw getStringCapability() (#1679, fixes #1668)

🐛 Bug Fixes

  • Fix MenuSupport left/right navigation when GROUP_PERSIST is on (#1643)
  • Fix StringIndexOutOfBoundsException in CompletionMatcherImpl (#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 DefaultParser emitting trailing empty word for non-completion contexts (#1622, fixes #1489)
  • Fix Ctrl+C propagation as UserInterruptException in console-ui prompts (#1621)
  • Fix newline binding for dumb terminal support in prompts (#1618)
  • Fix BRACKETED_PASTE_OFF not 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 IOException in PosixPtyTerminal pump threads during close (#1630)
  • Do not raise native signals on Windows if not enabled (#1542, fixes #1532)
  • AnsiConsole now fails on repeated uninstalls (#1533, fixes #1525)
  • Allow single-digit options like -1 in 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

10 Sep 14:29

Choose a tag to compare

🐛 Bug Fixes

  • Optimize Display performance and fix terminal capability usage (#1422) @gnodet

3.30.5

10 Sep 14:31
ae95742

Choose a tag to compare

🚀 New features and improvements

🐛 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

📝 Documentation updates

👻 Maintenance

JLine 3.30.4

28 May 07:51
fcf6461

Choose a tag to compare

🐛 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

📝 Documentation updates

👻 Maintenance

  • chore: fix intermittent encoding test failures by handling READ_EXPIRED correctly (#1303) @gnodet
  • chore: improve Maven cache fallback strategy in GitHub Actions (#1304) @gnodet

JLine 3.30.3

22 May 11:26
6616485

Choose a tag to compare

🚀 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

  • fix: Fix missing close in PosixSysTerminal. (#1281) @gnodet

📦 Dependency updates

👻 Maintenance

  • chore: Fix build.bat syntax errors and preserve arguments in rebuild command (#1286) @gnodet
  • chore: Fix flaky DumbTerminalPasswordTest (#1287) @gnodet
  • chore: add Palantir Java Format version property for Dependabot updates (#1285) @gnodet

JLine 3.30.2

19 May 16:29
e68c37a

Choose a tag to compare

🐛 Bug Fixes

  • fix: enhance nanorc loading and introduce a ClasspathResourceUtil utility (#1276) @gnodet

📦 Dependency updates

JLine 3.30.1

15 May 16:17
8976af9

Choose a tag to compare

  • chore: improve build scripts and demo integration (#1269) @gnodet

🐛 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

JLine 3.30.0

09 May 19:44
7e86387

Choose a tag to compare

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

Build

📦 Dependency updates

JLine 3.29.0

15 May 13:41
c095db8

Choose a tag to compare

💥 Breaking changes

🚀 New features and improvements

🐛 Bug Fixes

📦 Dependency updates

👻 Maintenance