JLine is a Java library for handling console input.
gnodet Merge pull request #313 from valencik/doc-fix
Fix minor typos in DefaultParser
Latest commit cd4c5f9 Oct 3, 2018
Failed to load latest commit information.
.mvn/wrapper Upgrade to latest maven Apr 3, 2018
.travis adjust secure variables for jline/jline3 project Apr 25, 2017
builtins Case-insensitive search returns no result for TreeCompleter when the … Sep 20, 2018
demo [maven-release-plugin] prepare for next development iteration Jul 17, 2018
jline [maven-release-plugin] prepare for next development iteration Jul 17, 2018
reader Fix typos in DefaultParser Oct 3, 2018
remote-ssh [maven-release-plugin] prepare for next development iteration Jul 17, 2018
remote-telnet [maven-release-plugin] prepare for next development iteration Jul 17, 2018
style [maven-release-plugin] prepare for next development iteration Jul 17, 2018
terminal-jansi [maven-release-plugin] prepare for next development iteration Jul 17, 2018
terminal-jna [maven-release-plugin] prepare for next development iteration Jul 17, 2018
terminal Fix typo in javadoc Sep 3, 2018
.gitignore Remove javadoc warnings May 24, 2018
.travis.yml sudo: false; for clarity this however should be the default already Apr 27, 2017
LICENSE.txt Update LICENSE.txt May 16, 2018
README.md Update README.md Aug 29, 2018
appveyor.yml Fix Maven property to skip tests (#170) Sep 14, 2017
build adjust build script May 15, 2017
build.config add helper to run the demo May 7, 2017
changelog.md Update changelog Apr 16, 2018
header.txt Fix copyright year before release Dec 19, 2017
mvnw Add basic build scripts and configuration for travis setup Apr 25, 2017
mvnw.cmd Add basic build scripts and configuration for travis setup Apr 25, 2017
pom.xml [maven-release-plugin] prepare for next development iteration Jul 17, 2018


JLine License Maven Central Build Status: Linux Build Status: Windows DepShield Badge

JLine is a Java library for handling console input. It is similar in functionality to BSD editline and GNU readline but with additional features that bring it in par with ZSH line editor. People familiar with the readline/editline capabilities for modern shells (such as bash and tcsh) will find most of the command editing features of JLine to be familiar.

JLine 3.x is an evolution of JLine 2.x.


JLine is distributed under the BSD License, meaning that you are completely free to redistribute, modify, or sell it with almost no restrictions.




JLine can be used with a single bundle or smaller fined grained jars. The big bundle is named:


The dependencies are minimal: you may use JLine without any dependency on *nix systems, but in order to support windows or more advanced usage, you will need to add either jansi or jna library.

You can also use finer grained jars:

  • jline-terminal: the Terminal api and implementations
  • jline-terminal-jansi: terminal implementations leveraging the jansi library
  • jline-terminal-jna: terminal implementations leveraging the jna library
  • jline-reader: the line reader (including completion, history, etc...)
  • jline-style: styling api
  • jline-remote-ssh: helpers for using jline with Mina SSHD
  • jline-remote-telnet: helpers for using jline over telnet (including a telnet server implementation)
  • jline-builtins: several high level tools: less pager, nano editor, screen multiplexer, etc...

Supported platforms

JLine supports the following platforms:

  • FreeBSD
  • Linux
  • OS X
  • Solaris
  • Windows

Jansi vs JNA

To access the JVM's main terminal under a *nix system, no additional dependency will be needed. However, such usage will make use of child processes whenever the terminal is accessed (using Terminal.getAttributes, Terminal.setAttributes, Terminal.getSize, Terminal.setSize). If one of the Jansi or JNA library is present, it will be used and JLine will use native calls instead of child processes. This also allows the use of pseudo-terminals when dealing with non system terminals (for example when creating a terminal for an incoming connection).

On the Windows platform, relying on native calls is mandatory, so you need to have either Jansi or JNA library in your classpath along with the jline-terminal-jansi or jline-terminal-jna jar. Failing to do so will create a dumb terminal with no advanced capabilities.

There is no difference between JLine's support for Jansi and JNA. Both will provide the exact same behaviors. So it's a matter of preference: Jansi is a smaller but more focused library while JNA is a bigger but more generic and versatile one.

Maven Usage

Use the following definition to use JLine in your maven project:


JLine can also be used with more low-level jars:


All the jars and releases are available from Maven Central, so you'll find everything at the following location https://repo1.maven.org/maven2/org/jline/.



  • Maven 3.3+ (prefer included maven-wrapper)
  • Java 8+

Check out and build:

git clone git://github.com/jline/jline3.git
cd jline3
./build rebuild


The following artifacts are build:

The big bundle includes everything and is located at:


The finer grained bundles are located at:


Maven has a concept of SNAPSHOT. During development, the jline version will always ends with -SNAPSHOT, which means that the version is in development and not a release.

Note that all those artifacts are also installed in the local maven repostitory, so you will usually find them in the following folder: ~/.m2/repository/org/jline/.

Running the demo

To run the demo, simply use the following command after having build JLine

./build demo

Continuous Integration