Skip to content

JLine 4.4.0

Choose a tag to compare

@github-actions github-actions released this 26 Aug 19:26
· 9 commits to master since this release

JLine 4.4.0 is a feature-rich release bringing modern terminal protocol support, broader platform compatibility, and continued security hardening.

Highlights:

  • Kitty Keyboard Protocol — full support for the Kitty keyboard protocol, enabling unambiguous key event reporting (#2007)
  • In-band window resize — support for mode 2048 resize notifications across the terminal, reader, and builtins (Nano, Less, Tmux) (#2021, #2198)
  • Synchronized output — full mode 2026 support to eliminate flicker during rapid screen updates (#2022)
  • musl libc support — native libraries now load on Alpine and other musl-based distributions (#2197)
  • JdkConsoleProvider — drop-in JLine console that can replace System.console() (#2031)
  • Reproducible builds — source archives can now be built without a git checkout, thanks to nisse property fallbacks (#2151, #2153)
  • Security hardening — path traversal guards, ReDoS protection, cross-origin rejection, control character stripping, and SSH agent forwarding tightened across multiple modules
  • FFM signal handling rewrite — replaced shared Arena with self-pipe trick for reliable signal delivery (#2141)

⚠️ Breaking: the ambiguous key binding timeout has been reduced from 1000ms to 100ms (#2186), and SSH agent forwarding now requires the explicit -A flag (#2106).

💥 Breaking changes

🚀 New features and improvements

  • feat: support in-band resize (mode 2048) in Nano, Less, and Tmux builtins (#2198) @gnodet
  • feat: add musl libc support for native libraries (#2197) @gnodet
  • feat: add Kitty Keyboard Protocol support (#2007) @gnodet
  • feat: add configurable behavior for too many completion candidates (fixes #2154) (#2196) @gnodet
  • feat: support in-band window resize notifications (mode 2048) (#2021) @gnodet
  • feat: add JdkConsoleProvider for drop-in JLine console (#2031) @gnodet
  • feat: verify macOS native library signatures in CI (#2173) @gnodet
  • feat: allow customizing the help source in Less pager (fixes #2056) (#2065) @gnodet
  • feat: full synchronized output (mode 2026) support (#2022) @gnodet
  • refactor: batch DEC mode probing into single DECRQM round-trip (#2023) @gnodet
  • feat: allow customizing the default prompt in Less pager (#2036) @gnodet
  • feat: add factory to simplify LineDisciplineTerminal + ScreenTerminal wiring (#2035) @gnodet
  • feat: add AttributedStringBuilder.appendCodePoint(int) (#2163) @gnodet
  • Enable reproducible builds from source archives (#2151) @gnodet
  • Add Terminal.getenv() for remote terminal environment support (#2030) @gnodet

🐛 Bug Fixes

📝 Documentation updates

  • docs: document macOS native library signing process (#2180) @gnodet

📦 Dependency updates

👻 Maintenance

  • chore: use nisse 0.9.5 with .mvn/nisse.properties for source-archive builds (#2153) @gnodet
  • chore: use committer timestamp for archive date fallback (#2152) @gnodet
  • chore: migrate Release Drafter configs to new when syntax (#2177) @gnodet
  • chore: set correct target branch on GitHub releases (#2174) @gnodet
  • chore: clarify merge policy to require label, milestone, and assignee (#2121) @gnodet
  • chore: extract shared truecolor RGB clamping helper in csi_SGR (#2111) @gnodet
  • chore: remove 4.0.x from Dependabot configuration (#2094) @gnodet