CRT Terminal emulator (OpenGL)
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


CRTerm is a Java/OpenGL library aimed at helping the development of terminal emulators. This library doesn't tackle all functionality related to terminal emulation, but only the area of visual representation.

Demo on Youtube: [Demo on Youtube] (


  • The only dependency is the LWJGL library. These files need to be linked with the project:
    • Windows: lwjgl.jar, lwjgl-natives-windows.jar, lwjgl-glfw.jar, lwjgl-glfw-natives-windows.jar, lwjgl-opengl.jar, lwjgl-opengl-natives-windows.jar
    • Linux: lwjgl.jar, lwjgl-natives-linux.jar, lwjgl-glfw.jar, lwjgl-glfw-natives-linux.jar, lwjgl-opengl.jar, lwjgl-opengl-natives-linux.jar
    • MacOS: lwjgl.jar, lwjgl-natives-macos.jar, lwjgl-glfw.jar, lwjgl-glfw-natives-macos.jar, lwjgl-opengl.jar, lwjgl-opengl-natives-macos.jar


  • Currently uses the original character set of the Kaypro II luggable computers.
  • The texture atlas of the font is generated according to input parameters. Both the distance between the scanlines and the width of the dots can be changed.
  • The characters have a modest shining appearance, applied through a bloom post-processing effect.
  • A scanline passes through the screen in fixed intervals, simulating a common problem of old CRT displays.
  • All characters can be fully changed for each frame render. Provides direct access to the internal character array for efficient manipulation.
  • Simulates the gradual fade-out of the characters.

The font is generated on the fly according to the input parameters. This is an example render, based on the Kaypro II character set:

Character set - texture atlas


  • Instantiate the CRTerm.Terminal to display the main window. See the doc folder about the parameters.
  • Use the "setCharacters" or directly manipulate the character array accessed through "getCharacterArray". After the modifications upload the characters to the GPU, using "uploadCharacterArray".
  • See an example application at: /src/TestApp/
  • Handle the keyboard inputs using the LWJGL functions. (Using the Window ID)