← Projects

Termina Active

A cross-platform terminal emulator built on JavaFX, running a real shell on a real pseudo-terminal and rendering the emulated screen to a canvas.

Year
2026–
Built with
Java 25, JavaFX, JediTerm, pty4j
Source
github.com/adriandeleon/Termina
The Termina terminal emulator showing two tabs and a colorized directory listing in a shell session.

Termina is a native terminal emulator rather than a terminal-shaped text area. It starts a real shell on a platform pseudo-terminal, feeds the byte stream through a VT/xterm emulator, and paints the resulting screen buffer with a JavaFX canvas.

Terminal behavior first

Tabs and multiple windows each own an independent shell session. Termina supports styled text, scrollback, selection and copy, clickable URLs and file paths, and mouse-aware full-screen programs such as Vim, less, and htop. Input follows terminal conventions: application shortcuts stay out of the shell’s way, composed characters arrive through the text-input path, and mouse reporting can be bypassed with Shift when you need to select or open the local context menu.

The command palette exposes every window action from the keyboard. Shell profiles are discovered from the machine—including PowerShell, Git Bash, and WSL distributions on Windows—rather than requiring each one to be entered by hand.

Three focused layers

The implementation separates the work into three parts:

Repaints are decoupled from shell output and limited to one per animation frame, so a command that floods the terminal does not flood the UI thread. Text is painted in style runs, with special handling for wide glyphs such as CJK characters and emoji.

A desktop application

Termina includes four light and dark themes, bundled monospace fonts, immediate appearance settings, configurable scrollback and shell behavior, six interface languages, and a session diagnostics log. Window size, tabs, menus, and keyboard commands are designed as application features rather than wrappers around a console widget.

The project is still early. Its release pipeline produces self-contained native packages for macOS, Windows, Debian-family Linux, and RPM-based Linux; the bundled runtime means a JDK is not required to run the packaged app.