veetee
VT52 · VT100 · VT220 · VT320 · VT420 · VT520 · VT525

The DEC terminal,
kept alive.

veetee is an open-source DEC VT terminal for Linux and Windows. It is built from DEC's own programmer references and tested screen by screen, so OpenVMS, DECforms, FMS and EDT behave exactly as they did on the glass.

Linux · Windows · GTK 4 · MIT or Apache-2.0 · .deb, .rpm, tarball and zip

veetee emulating a VT420: an order entry form drawn with DEC Special Graphics, double-height heading, underlined fields and the indicator status line
Phosphor

Real screens, real renderer

Every screenshot is veetee.

No mock-ups: each screen was captured from veetee's own OpenGL renderer, running vttest or a demo script, with its phosphor glow. Original bitmap fonts are drawn dot by dot on DEC's own 10×16 character cells, with scan lines, double-size lines made by doubling the dots, and 132 columns that really narrow the characters.

Built from the manuals

The features legacy hosts depend on.

General-purpose terminals stop at "mostly VT100". veetee implements the DEC functions that OpenVMS applications actually use, level by level, from VT52 to VT525.

PF1Gold

A proper LK401 keypad

PF1–PF4, the editing keypad, Help, Do and F6–F20 in their DEC positions, with application keypad modes, UDKs and 7- or 8-bit codes. EDT and EVE feel right at once.

DECSCAProtect

DECforms and FMS fields

Protected fields with selective erase, status lines, double-size banners, DEC Special Graphics and 132-column switching: everything a forms application expects.

DECDLDSoft font

Soft fonts and charsets

Downloadable character sets, 17 national replacement sets, DEC Supplemental, DEC Technical, ISO Latin, and the VT500 Greek, Hebrew, Turkish and Cyrillic sets.

DECCRARectangle

VT420 rectangles and pages

Left/right margins, rectangular copy, fill, erase and attribute changes, checksums that match the hardware, page memory, macros and state reports.

F4Session

Four sessions

Up to four independent sessions on a VT520, each on a connection of its own, two on the screen at once as the terminal shows them, with session icons that blink when one out of sight has news. The host can name each session and make it active.

F5Break

Telnet, SSH, serial and LAT

Native Telnet with BREAK and RFC 2217 line control for terminal servers, SSH through your OpenSSH setup, and serial lines at DEC factory defaults (9600 8N1 XON/XOFF), set from Communications Set-Up as on the terminal, on Linux and on Windows COM ports. On Linux there is LAT as well, DEC's own protocol straight on Ethernet: find the nodes announcing themselves and open a session, which OpenVMS sets up as a VT420.

SENDKermit

Kermit file transfer

Send File and Receive File over any connection — Telnet, SSH, serial or LAT — to the host's own Kermit, with text or binary agreed file by file, CRC checks and long packets. Proved against C-Kermit on OpenVMS, and scriptable with vt-headless kermit.

F2Print Screen

A printer port

Print Screen, auto print and printer controller mode, as a VT420 has them: what the host prints on the printer at your desk becomes a PDF, or goes to a real printer through CUPS or Windows printing, chosen once.

F1Hold Screen

Power-user touches

Saved connections with a default to open at start, session logs with timestamps, a searchable scrollback, screen reader support, copy and paste that translate DEC characters, Hold Screen with real flow control, a visual LK401 keymap editor, VT520 key programming and session recordings that replay as tests.

F3Set-Up

Set-Up, as DEC built it

The VT420 Set-Up Directory and its screens, or on a VT520 the pull-right menus and summary line, with Save, Recall and Default. Saved settings are the power-up settings, and Display Controls shows exactly what the host sends.

BELBell

Sound and motion

Keyclick, warning and margin bells and DECPS tunes at the Set-Up volumes; smooth scroll at DEC speed with flow control; a CRT saver that blanks an idle screen.

SET TERMInquire

Honest identity

Device attributes, mode reports, DECRQSS and terminal state reports answer as the chosen model, so SET TERMINAL/INQUIRE sees the terminal you picked.

Heritage

Fifty years of glass, one terminal.

Each generation of DEC video terminal added something that applications came to rely on. veetee emulates the whole line, with each model's own identity and conformance levels.

VEETEE LINEAGE REPORTPAGE 1
  • 1975VT52Escape-sequence cursor control; still reachable through ANSI mode reset.
  • 1978VT100ANSI X3.64 sequences, scrolling regions, double-size lines, Special Graphics.
  • 1983VT2208-bit controls, national sets, soft fonts, user-defined keys, protected fields.
  • 1987VT320ISO Latin-1, status lines, presentation and mode reports.
  • 1990VT420Left/right margins, rectangles, page memory, macros, dual sessions.
  • 1994VT520 · VT525VT500 character sets, cursor styles, framed sessions, colour on the VT525.
  • 2026veetee 1.0All of the above, on a Linux or Windows desktop near you. Default: VT420.

Proof, not promises

Tested like it was 1987.

Behaviour comes from DEC's documentation, and every claim is checked against the test suites the terminal community has trusted for decades.

18
vttest scripts across menus 1–8 and 11.1–11.4, compared with golden screens on every commit
368
esctest2 tests pass at VT level 5; every other difference is written down with its DEC reason
318
unit tests, written against the manual sections they cite, run on Linux and Windows
0
xterm-isms by default: autowrap off at power-up, Backspace sends DEL, SU/SD pan through page memory
DEC STD 070 EK-VT100-UG EK-VT220-RM EK-VT420-RM EK-VT510-RM EK-VT520-RM
“DEC documentation first. Where DEC and xterm differ, the DEC behaviour is the default, and xterm behaviour is an opt-in setting.”— the veetee compatibility matrix

$ INSTALL/LOG

On the air in a minute.

Ubuntu 26.04, from the PPA

The PPA keeps veetee updated with the rest of the system. Only 26.04 is offered: the gtk-rs crates need Rust 1.92, and 24.04’s archive stops at 1.91.

# add the archive and install $ sudo add-apt-repository ppa:issinoho/veetee $ sudo apt install veetee

Debian, Ubuntu, Fedora, RHEL and openSUSE

Download the package from the latest release and install it. GTK 4.14 and libadwaita 1.5 or later are required. The RPM asks for its libraries by soname, so the one package suits every RPM distribution.

# veetee 1.11.1, from the latest release $ sudo apt install ./veetee_1.11.1-1_amd64.deb $ sudo dnf install ./veetee-1.11.1-1.x86_64.rpm # zypper on openSUSE

Any distribution, with Flatpak

A Flatpak bundle runs on any distribution with the GNOME runtime from Flathub. Local shells and --ssh run on the host, so your own shell and ~/.ssh apply.

# install the bundle from a release $ curl -LO https://github.com/issinoho/veetee/\ releases/download/v1.11.1/veetee-1.11.1-x86_64.flatpak $ flatpak install --user ./veetee-1.11.1-x86_64.flatpak $ flatpak run com.issinoho.Veetee --telnet vms1

Windows 10 and 11

One zip with GTK included: unzip it anywhere and run bin\veetee.exe. Local sessions use the Windows pseudo console, --ssh uses Windows' OpenSSH client, and --serial COM3 opens a COM port.

REM unzip and connect in Command Prompt > tar -xf veetee-1.11.1-x86_64-windows.zip > cd veetee-1.11.1-x86_64-windows > bin\veetee --telnet vms1

Then connect

Telnet, SSH, serial, LAT or a local shell, as any model from VT100 to VT525.

# a VT420 on your OpenVMS host $ veetee --telnet vms1 # SSH through ~/.ssh/config, green phosphor $ veetee --ssh system@vms1 --phosphor green # the console port, DEC factory defaults $ veetee --serial /dev/ttyUSB0 # COM3 on Windows # LAT, on the same Ethernet segment (Linux) $ veetee --lat MYI64 # a colour VT525 with two sessions $ veetee --model vt525 --sessions 2 --telnet vms1

On the host

$! let OpenVMS identify the terminal $ SET TERMINAL/INQUIRE $ SHOW TERMINAL

From source

# Rust stable plus GTK 4 development files $ sudo apt install libgtk-4-dev libadwaita-1-dev libasound2-dev $ git clone https://github.com/issinoho/veetee.git $ cd veetee && cargo run --release -p veetee

Roadmap

The road to 1.0, and since.

One milestone per minor release. Lit means shipped.

M0 · FoundationsParser, CI, fuzzing, headless driver
M1 · VT100 / VT52Core screen, GL renderer, first font
M2 · VT220 / VT320Charsets, soft fonts, UDKs, status line
M3 · VT420Margins, rectangles, pages · 0.3.0
M4 · VT520 / VT525Colour, sessions, VT500 sets · 0.4.0
M5 · TransportsPTY, Telnet, SSH, serial ✓ · LAT ✓ 0.8.9 · RFC 2217 ✓ 0.8.11, proved against ser2net
M6 · Keyboard & appsKeymap editor, key programming, recordings · 0.6.0
M7 · Fonts & lookDEC-cell fonts, Set-Up, sound, CRT · 0.7.1
M8 · 1.0Connections, logs, search, screen readers, Flatpak, signed Windows builds ✓ · 1.0.0
Since 1.0Default connection · 1.2.0 · Kermit file transfer · 1.3.0 · LAT that survives lost frames, long packets · 1.4.0 · Printing, XOFF from the host · 1.5.0 · The serial line from Set-Up, Printer Set-Up · 1.6.0 · Manual pages, --version · 1.7.0 · Four sessions, session icons · 1.8.0 · The last stored-only Set-Up settings act · 1.9.0 · SSH and the keypad on Windows · 1.9.1 · Return reconnects a closed session · 1.10.0 · X11 forwarding over SSH · 1.11.0 · X displays need their colon · 1.11.1