*ARCHIVED – HISTORICAL ARTIFACT*
TkXML is the *oldest piece of publicly redistributed Ruby code* its author ever wrote. The original version dates to April 2002 – the year he learned the Ruby language – and a copy of that original alpha release is preserved in this repository under work/tkxml.rb, complete with the original runbox.com contact email.
The library is a small experiment in defining graphical user interfaces declaratively in XML, building Ruby/Tk widgets from an XML document in a one-to-one correspondence with the Ruby/Tk API. It was inspired by GTK’s Glade format. At the time, the idea of “UI as data” was novel and exciting; it would be another decade before declarative-UI ideas (React, SwiftUI, Compose, Flutter, etc.) became dominant in mainstream software, though those wisely chose code-as-data rather than literal XML markup.
Both this library and its target are now historical:
-
Tk itself was removed from Ruby’s standard library in Ruby 3.0, and the
tkgem is essentially unmaintained. Few modern Ruby projects use Tk for new GUI work. -
*XML-based UI definitions* in general lost out to declarative code, JSON-based formats, and language-native DSLs.
What remains interesting about this code is its age. It is a small piece of one Ruby programmer’s first year with the language, preserved intact. No further development is planned.
An XML markup language for generating Tk user-interfaces. It was inspired by GTK’s glade format. The TkXML format defines a very simple one-to-one correlation to the Ruby Tk API.
Here’s an example.xml TkXML file:
<Tk:Root name="test" title="Test">
<Tk:Frame name="menuframe">
<Tk:Menubutton name="filebutton" text="File" underline="0">
<Tk:Menu name="filemenu" tearoff="false">
<Tk:_add _1="command" label="Open" underline="0" accel="Ctrl+O" command="openDocument" />
<Tk:_add _1="command" label="Exit" underline="0" accel="Ctrl+Q" command="exitApplication" />
</Tk:Menu>
<Tk:_pack side="left" />
</Tk:Menubutton>
<Tk:_pack side="left" />
</Tk:Frame>
<Tk:_bind _1="Control-o" _2="openDocument" />
<Tk:_bind _1="Control-q" _2="exitApplication" />
</Tk:Root>
To use the library:
require 'tkxml' tkxml = TkXML.new(File.read('example.xml')) tkxml.build
At this point, TkXML is little more than an interesting experiment in encoding GUIs via markup. But it may well have the potential of becoming a productive tool if someone were inclined to further it’s development.
An interesting side note. TkXML is the oldest bit of redistributed Ruby code your humble author had ever writ.
Copyright © 2002 Rubyworks
TkXML is distributable in accordance with the BSD-2-Clause license.
See NOTICE.rdoc for details.