Est. 1981 Beginner

Kermit

The scripting language of the legendary Kermit file-transfer software from Columbia University - a TOPS-20-flavored command language that grew into a full procedural programming language for automating serial, modem, and network communications, born in 1981 and revived with a new release in 2026.

Created by Frank da Cruz and Bill Catchings at Columbia University designed the Kermit protocol and wrote the first programs in 1981; the script programming language that grew inside the software was primarily the work of da Cruz, who led the Kermit Project for 44 years, with major implementation contributions from Joe R. Doupnik (MS-DOS Kermit) and Jeffrey Altman (Kermit 95)

Paradigm Procedural and imperative: an interactive command language with macros, labels, block structure, loops, and user-defined functions, plus expect-style event-driven automation (INPUT/OUTPUT pattern matching) and Lisp-flavored list processing
Typing Untyped and string-based in the shell tradition - every value is a text string, with numeric, boolean, array, and associative-array interpretation applied at evaluation time
First Appeared 1981 - the Kermit protocol and first programs (DECSYSTEM-20 and CP/M-80) appeared at Columbia University, with the first file transfer in April 1981; the command language acquired full programming constructs (loops, conditionals, functions) in the mid-1990s with C-Kermit 5A(190) and MS-DOS Kermit
Latest Version C-Kermit 11.0.506 (August 3, 2026), the first stable release in 15 years, from the Open Kermit project under maintainer John Goerzen

Kermit is best remembered as a file-transfer protocol - perhaps the most widely ported piece of communications software ever written - but living inside the Kermit programs is something the encyclopedia of programming languages should not overlook: a full procedural scripting language. What began in 1981 as a friendly, TOPS-20-style interactive command interface for the Kermit file-transfer programs from Columbia University grew, over the following decade and a half, into a genuine programming language with variables, macros, loops, arrays, associative arrays, recursion, pattern matching, file I/O, and an expect-style dialog automation system that predates expect itself. For a generation of system administrators, laboratory engineers, and bulletin-board operators, “writing a Kermit script” was how you automated anything that happened over a serial port or a modem.

The story has a remarkable coda. After the last stable release in 2011, the language spent 15 years dormant - until August 3, 2026, when the Open Kermit project shipped C-Kermit 11.0.506, the first stable release since Columbia’s era, in the software’s 45th anniversary year.

History and origins

In 1980-81, Columbia University’s computer center faced a mundane but universal problem: students and staff needed to move files between the university’s DECSYSTEM-20 and IBM mainframes and the first wave of microcomputers, across machines that disagreed about character sets, file systems, line speeds, and even how many bits made a byte. Frank da Cruz and Bill Catchings designed a protocol robust enough to survive all of it. Catchings wrote the first two implementations - one for the DEC-20, one for a CP/M-80 micro - and the first Kermit file transfer took place in April 1981 between two DECSYSTEM-20s joined by a null-modem cable. The name came from Kermit the Frog, used with permission from Henson Associates.

Columbia gave the software away, published the protocol specification in BYTE magazine in 1984, and formally founded the Kermit Project in 1986. By 1988 Kermit ran on more than 300 computers and operating systems, which is a strong candidate for the widest platform coverage of any software of its era.

The language grew out of the user interface. Kermit’s interactive command style - full-word commands, ? help at any point, abbreviation, keyword completion - was adapted from the TOPS-20 EXEC, the beloved command interface of the DECSYSTEM-20 that had been Columbia’s academic machine from 1977 to 1988. Command files and simple macros came early; then, beginning with C-Kermit 5A(190) and MS-DOS Kermit in the mid-1990s, the project added real programming constructs. The Kermit Project’s documentation cites ALGOL 60, C, BLISS-10, PL/I, SNOBOL, and Lisp as syntactic and semantic influences on what the command language became: a general-purpose scripting language whose specialty happened to be talking to other computers.

Design philosophy

Kermit the protocol was built on a pessimistic assumption - the connection is bad, the other computer is strange, and anything that can be corrupted will be - and the language inherited the matching optimistic mission: a person who is not a programmer should be able to automate a communication session anyway.

  • Commands read like English. set modem type usrobotics, dial 7654321, if failure hangup. The interactive language and the programming language are the same language; a script is just the commands you would have typed, and anything you can do in a script you can rehearse by hand at the prompt.

  • The hard part is built in. Where a general-purpose language needs libraries and glue to open a serial port, negotiate a modem, or checksum a transfer, in Kermit those are primitives. The script language sits above a complete communications stack - serial, modem, Telnet, and later FTP, HTTP, and SSH - with file transfer as a single command.

  • Dialogs are programmable. The INPUT command waits (with a timeout) for a pattern to arrive from the remote system; OUTPUT sends text in reply. This send/expect model - the heart of every login automation - was in Kermit before the famous Unix expect tool popularized the idea, and the Open Kermit project today describes C-Kermit as “the shell, but with built-in screen-scraping automation like expect and built-in file transfer.”

  • Fail safely and loudly. Every command sets success or failure status, and IF FAIL, SET TAKE ERROR, and friends make scripts that cope with the real world of dropped carriers and garbled prompts.

Key features

A command language that became a programming language

Kermit scripts use \%a-\%z style user variables, \v(name) built-in variables (date, time, connection state, and dozens more), and \fname(args) built-in functions for string manipulation, arithmetic, and file handling. Macros defined with DEFINE take arguments and can call themselves recursively. Control flow includes IF/ELSE, SWITCH, FOR, WHILE, GOTO with labels, and block structure with braces. Later versions added arrays, associative arrays, list processing, and pattern matching - a feature set the project itself summarized as having grown “into a general-purpose programming language.”

A fragment in the style of the Kermit Project’s script library shows the flavor - a login dialog with retries:

#!/usr/local/bin/kermit +
set host ts.example.edu 23          ; make the connection
if fail exit 1 Connection failed.
for \%i 1 3 1 {                     ; three attempts
    input 10 login:                 ; wait up to 10 sec for prompt
    if fail continue
    lineout \%1                     ; send username (argument 1)
    input 10 Password:
    if fail continue
    lineout \%2                     ; send password (argument 2)
    input 15 $                      ; wait for shell prompt
    if success break
}
if fail exit 1 Could not log in.
send report.txt                     ; Kermit-protocol file transfer

The first line is a “kerbang” script: on Unix, a Kermit script marked executable runs directly from the shell, just like a shell or Perl script, with the trailing + telling Kermit to pass along command-line arguments.

The protocol underneath

The language would not matter without the machinery it drives. The Kermit protocol’s packet design was engineered for the worst connections computing could offer: 7-bit-only links, half-duplex mainframe front ends, systems that reportedly had trouble accepting more than 96 bytes at a time, and networks that swallowed control characters. Character-set translation - including EBCDIC/ASCII conversion and, from the early 1990s, multilingual character encodings - was built into the transfer itself, a concern most rival protocols simply ignored.

One language, many Kermits

The same command language (with local variations) appeared across the major implementations: C-Kermit for Unix, VMS, and many other systems; MS-DOS Kermit, maintained by Joe R. Doupnik at Utah State University, one of the most widely used DOS communication programs of its day; and Kermit 95, the commercial Windows and OS/2 version led by Jeffrey Altman from 1995. Smaller relatives - G-Kermit, a minimal GPL Unix file-transfer program, and E-Kermit, a protocol module for embedding in devices - carried the protocol without the full language.

Evolution

The language’s growth tracks the C-Kermit releases: 5A(188) in November 1992 unified the ports and was the version documented in the first edition of Using C-Kermit by da Cruz and Christine M. Gianone; the 5A(189)-(190) releases of the mid-1990s brought the programming constructs; 6.0 (September 1996) and 7.0 (2000) deepened the function library and pattern matching; 8.0 (December 2001) added built-in FTP and HTTP clients that made Kermit scripts capable of driving internet protocols directly.

Then came the long quiet. Columbia University ended its 30-year sponsorship of the Kermit Project in 2011; C-Kermit 9.0 arrived on June 30, 2011 under the Revised 3-Clause BSD License, converting a formerly restrictively-licensed program into genuine open source on its way out the door. Frank da Cruz kept the project alive independently for another decade and a half - C-Kermit 10.0 circulated as betas into 2025 - before retiring from active development in 2025, after 44 consecutive years at the helm, a tenure with few if any equals among open-source founders.

The revival came from outside Columbia entirely. John Goerzen’s Open Kermit project took up stewardship, added C unit tests and a Python regression suite to the decades-old codebase, and on August 3, 2026 released C-Kermit 11.0.506 - the first stable release in 15 years, with IPv6 support, compatibility with modern OpenSSL, security fixes, and a dedication to da Cruz.

Current relevance

Kermit today is a niche tool with an unusually loyal niche. Serial consoles never went away: network gear, embedded boards, industrial controllers, and retrocomputers all still speak RS-232, and a scripting language with a communications stack built in remains the right shape for that work. The Kermit Project has reported its software embedded in routers, cell-phone towers, medical equipment, and point-of-sale systems, flying on the International Space Station from late 2002, and riding autonomous EM-APEX ocean floats that feed data to hurricane researchers. The 2026 revival gives the language something few of its 1981 contemporaries have: an active maintainer, a test suite, and a fresh stable release.

Why it matters

Kermit’s scripting language earns its encyclopedia entry on three grounds. First, longevity: a language lineage running continuously from 1981 to a stable release in 2026, under its founder’s care for 44 of those years, is nearly unique in software history. Second, the design insight that the interactive interface and the automation language should be the same thing - learned from the TOPS-20 EXEC and carried forward into an era that mostly forgot it - along with send/expect dialog automation that anticipated expect. Third, reach: as the scripting face of software ported to hundreds of platforms and used everywhere from campus terminal rooms to the International Space Station, the Kermit language quietly automated more real-world communication sessions than almost any tool of its era.

For the code archaeologist, Kermit is a living dig site: the full source is on GitHub under a BSD license, the script library and books are preserved at the Kermit Project and Open Kermit sites, and - rarest of all for a language born in 1981 - the current release is dated this month.

Timeline

1981
Frank da Cruz and Bill Catchings design the Kermit protocol at Columbia University so students can move files between the campus mainframes and microcomputers; the first file transfer takes place in April 1981 between two DECSYSTEM-20s over a null-modem cable, and the first implementations target the DEC-20 and CP/M-80 - the name honors Kermit the Frog, used with permission from Henson Associates
1984
The Kermit protocol specification is published in the June and July issues of BYTE magazine, spreading the protocol far beyond Columbia and inviting the hundreds of independent implementations that followed
1986
Columbia University formally founds the Kermit Project to manage development and distribution, free for non-commercial use with a fee for commercial licensing; by 1988 Kermit software is available for more than 300 computers and operating systems
1992
C-Kermit 5A(188) ships in November 1992 and is documented in the first edition of the book Using C-Kermit by Frank da Cruz and Christine M. Gianone, consolidating Unix, VMS, and other ports around a shared command language adapted from the TOPS-20 EXEC
1994
Script programming constructs - conditionals, loops, macros with arguments - are added to the command language beginning with C-Kermit 5A(190) and MS-DOS Kermit (maintained by Joe R. Doupnik at Utah State University), turning the interactive command interface into a genuine programming language (year approximate: the 5A(189)-5A(190) releases span 1993-1996)
1995
Kermit 95, a commercial terminal emulator and scripting environment for Windows 95 and OS/2 led by Jeffrey Altman, brings the Kermit language to the new Windows world
1996
C-Kermit 6.0 is released in September 1996 and documented in the second edition of Using C-Kermit, followed by 7.0 (2000) and 8.0 (December 2001), which extend the script language with features such as built-in FTP and HTTP clients, pattern matching, and file i/o - by now the language has arrays, associative arrays, recursion, and a large function library
2002
Kermit flies to the International Space Station: the CSLM-2 microgravity experiment's hardware, launched in December 2002, uses Kermit 95 on the laptop side of its communications link and a custom MS-DOS Kermit build on the instrument side, with operations continuing through about 2005
2011
Columbia University ends its sponsorship of the Kermit Project after 30 years; C-Kermit 9.0 is released on June 30, 2011 under the open-source Revised 3-Clause BSD License, and da Cruz continues the project independently at kermitproject.org
2025
Frank da Cruz retires from active development after 44 consecutive years leading the project - an almost unmatched tenure for an open-source founder - with C-Kermit 10.0 still in beta (Beta.12 appeared in March 2025)
2026
The Open Kermit project under new maintainer John Goerzen releases C-Kermit 11.0.506 on August 3, 2026 - the first stable release in 15 years, adding IPv6 support, compatibility with modern OpenSSL, security fixes, and C unit and Python regression test suites, in a release dedicated to da Cruz in Kermit's 45th anniversary year

Notable Uses & Legacy

Columbia University campus computing

Kermit's original mission: moving student and staff files between DECSYSTEM-20 and IBM mainframes and the first microcomputers, translating between EBCDIC and ASCII character sets along the way - the job that shaped the protocol's famous robustness

NASA and the International Space Station

Beginning with hardware launched in December 2002, engineers for the CSLM-2 microgravity experiment used Kermit 95 and its script language on the laptop side of the experiment's communication link aboard the ISS, according to the Kermit Project's own account, with operations continuing through about 2005

HP 48 graphing calculators

Hewlett-Packard built a Kermit protocol server into the HP 48 series in the 1990s, making Kermit the standard way to transfer programs and data between the calculator and a PC

EM-APEX hurricane-research ocean floats

Autonomous EM-APEX ocean floats supplying real-time data to hurricane researchers use Kermit software as their communication method, per the Kermit Project

Embedded and industrial systems

The Kermit Project reports its software embedded in network routers and switches, cell-phone towers, medical diagnostic and monitoring equipment, and retail point-of-sale systems - environments where the protocol's tolerance of hostile serial links is exactly what is needed

Language Influence

Influenced By

Running Today

Run examples using the official Docker image:

docker pull
Last updated: