jterm

A pure-Java terminal UI toolkit for building rich TTY applications. No native dependencies. No JNI. Just Java and a terminal.
Get Started View Source
jterm — Dashboard Demo
// Build a dashboard in 20 lines of Java var app = new TextGUI(terminal); var panel = new Panel(new BorderLayout()); panel.add(new Label("System Monitor"), BorderLayout.NORTH); var table = new Table( "Metric", "Value", "Status" ); table.addRow("CPU", "12%", "OK"); table.addRow("Memory", "45%", "OK"); table.addRow("Disk", "78%", "WARN"); panel.add(table, BorderLayout.CENTER); app.setRoot(panel); app.run();
30+
Widgets
25+
Animations
162
Tests
0
Native Deps

01Features

Everything you need to build a full terminal application — not just a menu screen.

[█]

Full Widget Set

A complete component system for building interactive TUIs.

  • Button, Label, TextBox, TextArea
  • Table, DataGrid, ListBox
  • CheckBox, RadioGroup, ProgressBar
  • MenuBar, Menu, MenuItem
  • Panel, Border, Separator
╭─╮

Layout Managers

Position widgets without pixel math. Let the layout engine handle it.

  • BorderLayout (north/south/east/west/center)
  • LinearLayout (horizontal/vertical)
  • GridLayout (rows × columns)
  • Nested containers for complex UIs
🎨

Themes & Styling

Full terminal color support — 16-color, 256-color, and true color RGB.

  • Built-in ThemeManager with swappable themes
  • SGR support (bold, italic, underline, blink)
  • Cell-level TextCell styling
  • CP437 box-drawing characters
▄▀▄

Charts & Data

Render data visualizations in the terminal. No external charting libs.

  • Line charts, bar charts, sparklines
  • Configurable axes, labels, colors
  • TableModel + DataGrid for tabular data
  • ResultSetGridModel — bind JDBC directly

Animations

25+ animated backgrounds and transition effects. Because terminals deserve to be alive.

  • MatrixRain, Starfield, Fireworks
  • MandelbrotZoom, Spirograph, PlasmaWash
  • Fade, Wipe, Dissolve, Slide transitions
  • AnimationManager with frame timing
  • Sprites & particle effects

ANSI Art Renderer

Render full-color ANSI art files — splash screens, logos, background art. One part of the toolkit, not the whole story.

  • Full SGR parser (cursor positioning, colors)
  • 16-color, 256-color, true color support
  • AnsiArtRenderer for full-screen display
  • ScreenBuffer with double-buffering

02Widgets

A component model that feels like Swing, not like ncurses.

Component-based architecture

jterm uses a proper component hierarchy — containers, layout managers, event listeners, focus management. Build complex multi-panel UIs the way you'd build a desktop app, not by manually positioning characters on a grid.

  • Component → AbstractComponent → Widget
  • Container → Panel → Window
  • FocusManager for keyboard navigation
  • Event listeners (click, key, focus, change)
  • TableModel / ListModel data binding
// A login form with proper layout var form = new Panel(new LinearLayout(LinearLayout.VERTICAL)); form.setBorder(Borders.singleLine("Login")); var userBox = new TextBox(); var passBox = new TextBox().setMask('*'); var loginBtn = new Button("Sign In"); loginBtn.onClick(() -> { String user = userBox.getText(); String pass = passBox.getText(); authenticate(user, pass); }); form.add(new Label("Username:")); form.add(userBox); form.add(new Label("Password:")); form.add(passBox); form.add(loginBtn);

03Animations

Terminal applications don't have to be static. 25+ animated backgrounds and transition effects ship in the box.

Animated Backgrounds

  • MatrixRain, Starfield, TwinkleStarfield
  • Fireworks, Snowfall, RainStorm
  • LavaLamp, Aurora, OceanWaves
  • CircuitBoard, PacketFlow
  • MandelbrotZoom, Spirograph, PlasmaWash
  • VoronoiCells, MoirePatterns
  • DNAHelix, LightningStorm
  • TickerTape, MarketDepth
  • PortfolioHeatmap, TerrainFlyover
  • Scanlines, PhosphorDecay

Screen Transitions

  • FadeTransition
  • WipeTransition
  • DissolveTransition
  • SlideTransition
  • Randomized per navigation

Sprites & Effects

  • SpriteSheet for character art
  • ParticleEffect for bursts
  • AnimatedText for typewriter
  • AnimationFrame timing control

04Quick Start

Add the dependency, write a few lines, run it. That's it.

Maven

Add jterm to your pom.xml. The artifact will be published to Maven Central once the v0.1.0 alpha is released. For now, build from source.

  • Requires JDK 26+
  • No native libraries
  • Works on any terminal — SSH, Telnet, local console, web terminal
  • Single fat JAR option
<!-- Coming to Maven Central --> <dependency> <groupId>io.jterm</groupId> <artifactId>jterm</artifactId> <version>0.1.0</version> </dependency> // Build from source for now: // git clone https://github.com/jterm-io/jterm // cd jterm && mvn install
// Hello World in jterm import io.jterm.window.TextGUI; import io.jterm.widget.*; public class Hello { public static void main(String[] args) { var app = new TextGUI(); var panel = new Panel(new LinearLayout(LinearLayout.VERTICAL)); panel.setBorder(Borders.singleLine("jterm")); panel.add(new Label("Hello, Terminal!")); panel.add(new Button("Quit", app::close)); app.setRoot(panel); app.run(); } }

05Built With jterm

jterm powers real applications — not just demos.

Phosphor BBS

A full-featured SSH/Telnet BBS with message boards, real-time chat, door games, file archives, and mesh networking over LoRa radio. 775+ Java files built on jterm's widget, animation, and screen systems.

  • Multi-caller SSH + Telnet server
  • ANSI art splash screens
  • Animated screen transitions
  • Dashboard with live session monitoring
  • Stock/finance screens with charts

06Why jterm?

The Java ecosystem deserves a terminal UI framework — not just an ANSI escape code wrapper.

Pure Java

No JNI. No native binaries. No platform-specific builds. One JAR works everywhere Java does.

Modern Java

Built for JDK 26. Uses records, sealed interfaces, pattern matching, and var throughout. No legacy cruft.

🧪

Testable

162 tests. Screen buffers are inspectable. Widgets render to off-screen buffers you can assert against. No terminal required to test.

🧩

Full Framework

Screen buffers, text graphics, layout managers, focus management, event listeners, component hierarchy, theming. Everything Swing has — for the terminal.

📦

Self-Contained

Zero runtime dependencies. Drop the JAR in and go. Works in standalone apps, server daemons, or embedded devices.