Thyrd is an experimental, reflective, visual programming language and environment. In Thyrd, both data and code are stored in cells situated in nested two-dimensional grids. The user interface animates the transition from a cell to its subordinate or superordinate grid to help keep the user oriented in the hierarchical grid structure. All operations the user can perform to edit the structure are implemented as operators in the Thyrd language, thus a Thyrd program can inspect and modify itself or other programs in the same space.

Thyrd is a member of the Forth family of languages. Thyrd is a postfix concatenative language most similar to Joy in that it uses quotation and combinators to implement iteration and recursion. The environment provides a viewer that animates the stacks of a Thyrd program and allows the program to be stepped both forwards and backwards.

The primary view of Thyrdspace is a 2D grid of text and icons. A view may be overlaid with a panel consisting of arbitrary widgets editing the contents of individual cells or an entire grid. A Thyrd application can be constructed in which all of the code and data are hidden behind panels and revealed only at the user's request.

Thyrd is implemented in Tcl/Tk and Poet.


The best introduction to Thyrd is the presentation from the Emerging Languages Camp at OSCON 2010, I've edited my slides into the video (20 minutes) here: Thyrd at Emerging Languages. There are also four screencasts available to the right. They do take a long time to load, but they take even longer to watch (about an hour for all four). There is a paper on Thyrd available here. Comments on the paper are welcome. A table of the opcodes in the current version of Thyrd can be found here.


Please visit the forums at SourceForge and join in the discussion. There are also mailing lists and a bug tracker available.


An alpha version of Thyrd has been released as open source on SourceForge. The current release (SourceForge page, direct download) is v0.3.0, the release history is available here. It's a bit buggy, so be sure to read the release notes. This code is under active development and subject to sudden and whimsical changes. There is no guarantee that anything about the language will remain constant or that it is useful for any purpose. Use at your own risk.