Updated 2016-08-15 11:38:46 by dbohdan

Do you want a particularly small version of Tcl to embed in a hardware-constrained device? You're not the first. There are a few possibilities listed in the Implementations section of this page.

Background  edit

While John Ousterhout originally created Tcl as exactly an embeddable extension language [include some history here], it's grown into a general-purpose programming language. That growth has, of course, increased its demands on memory and the C run-time library. Key transitions along the way include ... the introduction of socket (7.5 or 7.6) ... the new object system (8.0), and Unicode (8.1-8.3). Versions such as 6.7, 7.2, 7.3, and 7.4 are popular among those content with a minimalistic Tcl. More on these transitions is available in a page called "Advantages and disadvantages of different Tcl versions".

There are many other less well-known languages especially targeted for embedding. Lua [1] is probably the most prominent of these (and a subject of several experiments by JCW, for example). Another that interests CL is Ficl [2]. All such languages generally fit in under 100K--quite a bit smaller than recent Tcl.

Donal Fellows and others have thought about this opportunity in terms of MicroTcl for Tcl9. A "modularized Tcl" is a goal that's inspired several project starts, none of which are particularly accessible in 2001. Tcl9 might still turn out to be a modularized Tcl, that is, one for which compile-time code and functionality choices are reasonably easy.

See also  edit

Implementations  edit

Jim Tcl

Jim is a small footprint implementation of the Tcl programming language (full binary is around 70kb but can be reduced further), it's not based on an old version of Tcl, but was developed from scratch. Already includes features of Tcl 8.5 like dicts, {*}, as well as new extensions currently not present in Tcl 8.5, like closures, lambda with garbage collection, and the ability to build arbitrary linked data structures.

Jim is in active development as of Jan 2016

Tiny Tcl (6.8)

Karl Lehenbauer has implemented a ROMable "Tiny Tcl" [3] based on 6.8, to be particularly small.

2001-05-07: Tiny Tcl 6.8 is a rommable, minimal Tcl for embedded applications.

Derived from the venerable Tcl 6.7 release, Tiny Tcl 6.8 has a solid Tcl feature set, excluding newer capabilities of Tcl 7 and 8 such as the bytecode compiler, namespaces, sockets, and async event handling, among others. (Still, major applications have been written in Tcl 6.)

Excluding C library functions, Tiny Tcl compiles down to less than 60 Kbytes on most machines, far smaller than any Tcl 7 or Tcl 8 derivatives. On an embedded DOS system with 640K of RAM, programs of up to several thousand lines of code can be executed.


An updated version of TinyTcl is included in the uClinux distribution [4]

TinyTcl is not actively developed since Apr 2001


Jean-Claude Wippler re-implemented most of a modern (7.6-like?) Tcl in a particularly compact C++ coding he calls TinyTcl [5].

TinyTcl is not actively developed since Jan 1999


Larry Smith wrote "Cricket" [6] as a "tiny little interpreter" reminiscent of Tcl - It uses [ and ] for command dispatch as in Tcl, and ( and ) for "second argument dispatch" - allowing one to code, for example (a := $b). The ctools package [7] includes "Tinker", a tiny tcl interpreter without (). (these links are dead, sadly) He and RS co-authored the "Lightweight Object System for Tcl" LOST and MOST which uses Tequila for distributed LOST objects, which is small, but on top of regular Tcl's.

[Palm Tcl]

John Hall's port of 7.4 to PalmOS [8] (bad link) is still another instance of a "small Tcl". Try http://rivendell.sourcefubar.net/ for John Hall's code.

APN has written Palm TCL at http://home.earthlink.net/~ashoknadkarni/ (now moved to http://palm-tcl.sf.net/ ) ; based on Tcl 7.6, it provides support for many Palm widgets and rudimentary support for the Palm databases. Runs on a 8K stack.


See Picol.


ETLinux [9] is a small-footprint LINUX (2MB RAM, 2 MB disk) for embedded systems with a small Tcl interpreter built in, Ettcl.

MicroTcl (Nebula Device)

MicroTcl is part of the Nebula Device [10]. This is a stripped down Tcl8.4 version with 36 core Tcl commands only. No file io, networking, background jobs, event handling etc. It does not need any external runtime environment files. It can be linked statically into the application and has a code size of about 160KB.


Tcl's close cousin, Hecl, fits into a .jar file of less than 64K, including persistent storage, an 'lcdui' gui, and an http command.




See LIL.


szl is a scripting language heavily inspired by Tcl and shell. It began its life as a pet project: a clean-room, partial re-implementation of jimtcl, for self-education purposes. However, quickly enough, as more and more new ideas were translated into code, szl evolved into a much different beast.


AMG: TH1 is a small Tcl implementation embedded in Fossil to supply scripting capability, particularly in service of the web interface.


See ParTcl.