Skip to content
This repository was archived by the owner on Apr 8, 2026. It is now read-only.

rubyworks/tkxml

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

*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 tk gem 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.

About

XML format for building Tk Interfaces

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages