Felix Codes


Kittle is an embeddable command language and OS shell, a proof-of-concept implementation of the tiny scripting engine described in a No Time To Play article. It's largely inspired by Tcl, but much more limited.

Why? Because the original article describes a language based on s-expressions, and I wanted to try something different on the same principle.

Why Tcl? Because I'm familiar with the language, which looks clean and friendly, yet can still be reduced to s-expressions internally for evaluation.

The name was chosen because "kittle" is another way of saying "tickle" in Scotland, and that sounded just about right.

(Note: this is unconnected to Kitten, the concatenative programming language.)

This project is abandoned; I'm not even sure if it still compiles.

Download and license

Kittle only comes as a source code archive in the D programming language. This is free and open source software under the Artistic License 2.0; see the included text file for details.


As of 20 February 2019, there is one implementation in the D programming language, that's incomplete and barely tested. In particular, the shell functionality is missing altogether. That said, there are 65 commands that cover a range of uses:

The language is readily extensible from the host language, but as per the original article, it doesn't allow for defining new procedures in a script.

As of 3 March 2019, Kittle supports the catch-all command unknown. Also, + and * take any number of arguments.

Differences from Tcl

While it looks similar, Kittle has different syntax and semantics from Tcl:

By the way, there's no expr; all expressions use prefix notation. Also, data types are a lot more strict:

And of course little blue furry creatures from Alpha Centauri are real little blue furry creatures from Alpha Centauri. (With apologies to Douglas Adams.)

That said, Kittle will happily stringify any other data type where a string is required. Not so much in the opposite direction.

How to use

The stand-alone interpreter can be used as-is. It can run interactively, or take files given as arguments. On POSIX operating systems, a shebang line is supported.

To embed or extend it, you'll need the source code. The only required file is libkittle/core.d; import the others as needed.

This version is built with DMD version 2.084 on Linux, and cross-compiled for Windows via Wine. Try dmd -i kittle.d to begin.