Unbuffered input and ANSI output support for Linux, MacOS, or Windows for Java 6+
Go to file
2023-10-09 12:31:49 +02:00
gradle/wrapper updated gradle 2023-08-19 17:37:32 +02:00
src/dorkbox/console version 4.1 2023-08-21 02:00:24 +02:00
src9 added jpms configs 2023-08-18 15:18:45 +02:00
test/dorkbox/console Cleanup 2023-08-19 17:27:11 +02:00
.gitignore updated .gitignore 2019-05-13 15:16:25 +02:00
build.gradle.kts Updated build deps 2023-10-09 12:31:49 +02:00
gradle.properties Updated build deps 2023-10-09 12:31:49 +02:00
gradlew updated gradle 2023-08-19 17:37:32 +02:00
gradlew.bat updated gradle 2023-08-19 17:37:32 +02:00
LICENSE version 4.1 2023-08-21 02:00:24 +02:00
LICENSE.Apachev2 Updated utils, updated license 2014-12-18 20:27:10 +01:00
LICENSE.BSD2 Updated version 2016-04-03 21:03:24 +02:00
LICENSE.BSD3 Updated libraries, added updates 2021-04-09 16:16:40 +02:00
LICENSE.CC0 Updated libraries, added updates 2021-04-09 16:16:40 +02:00
LICENSE.MIT Updated dist, changed from included src in jar, to separate file 2014-12-30 00:30:31 +01:00
linux console.png Added screenshots 2016-06-01 14:12:14 +02:00
README.md version 4.1 2023-08-21 02:00:24 +02:00
settings.gradle.kts version 3.10 2023-08-18 15:47:25 +02:00
windows console.png Added screenshots 2016-06-01 14:12:14 +02:00


Dorkbox Github Gitlab

Unbuffered input and ANSI output support for linux, mac, windows. Java 8+

This library is the evolution of what JLine should be, and the optimization of JAnsi. While it is very similar in functionality to what these libraries provide, there are several things that are significantly different.

  1. JNA direct-mapping instead of custom JNI/shell execution which is slightly slower than JNI but significantly easier to read, modify, debug, and provide support for non-intel architectures.
  2. Complete implementation of common ANSI escape codes
  3. Automatically hooks into System.err/out for seamless integration in Java environments
  4. Automatically detects when an IDE is in use
  • Prevents issues with console corruption
  • Provides simulated single character input via in.read(), which still requires the enter key to flush the buffer, but feeds single characters at a time
  1. Backspace functionality for line input is preserved (if ANSI is enabled, the console is updated as well).
  2. Controls ECHO on/off in the console
  3. Controls Ctrl-C (SIGINT) on/off in the console
  4. Multi-threaded, intelligent buffering of command input for simultaneous input readers on different threads
  5. Solves un-interruptable blocking reads from System.in when in an "unsupported" terminal (ie: anything other than a *nix/windows shell) so one can successfully stop reading from the input stream,
  • This is for cross-platform use, specifically - linux arm/32/64, mac 64, and windows 32/64. Java 8+



Customization parameters:
Console.ENABLE_ANSI   (type boolean, default value 'true')
 - If true, allows an ANSI output stream to be created on System.out/err, otherwise it will provide an ANSI aware PrintStream which strips out the ANSI escape sequences.

Console.FORCE_ENABLE_ANSI   (type boolean, default value 'false')
 - If true, then we always force the raw ANSI output stream to be enabled (even if the output stream is not aware of ANSI commands).   
   This can be used to obtain the raw ANSI escape codes for other color aware programs (ie: less -r)
Console.ENABLE_ECHO   (type boolean, default value 'true')
 - Enables or disables character echo to stdout in the console, should call Console.setEchoEnabled(boolean) after initialization.
Console.ENABLE_INTERRUPT   (type boolean, default value 'false')
 - Enables or disables CTRL-C behavior in the console, should call Console.setInterruptEnabled(boolean) after initialization.
Console.ENABLE_BACKSPACE   (type boolean, default value 'true')
 - Enables the backspace key to delete characters in the line buffer and (if ANSI is enabled) from the screen.
Console.INPUT_CONSOLE_TYPE   (type String, default value 'AUTO')
 - Used to determine what console to use/hook when AUTO is not correctly working.  
   Valid options are:
     AUTO - automatically determine which OS/console type to use
     MACOS - try to control a MACOS console
     WINDOWS - try to control a WINDOWS console
     UNIX - try to control a UNIX console
     NONE - do not try to control anything, only line input is supported

Console.AUTO_FLUSH   (type boolean, default value 'true')
 - Enables the output printstream to automatically flush after every write. NOTE: This is DANGEROUS, as it removes the usefulness of
     * the backing BufferWriter!
 - Restores System.err/out PrintStreams to their ORIGINAL configuration. Useful when using ANSI functionality but do not want to hook into the system.
Note: This project was inspired by the excellent JLine and JAnsi libraries. Many thanks to their hard work.


Maven Info


Gradle Info

dependencies {


This project is © 2021 dorkbox llc, and is distributed under the terms of the Apache v2.0 License. See file "LICENSE" for further references.