SGF: all formats (but untested with FF < 4) Ruby: >1.8.7 (may work with 1.8.6) Example: require 'sgf_parser' tree = SgfParser::Tree.new :filename => File tree = SgfParser::Tree.new :sgf_string => String All trees begin with an empty node ( @root) which allows a simple support of multiple gametrees. Most games will just care about, say, tree.root.children[0] which is the first node of the first gametree. For any node, one can summon the properties as such: node.properties # => returns a hash of the properties. A single property can be called, like the comments, for instance, like so: node.C # => returns the comments for this node. The library currently uses method_missing to painlessly return the data. I must admit that this is both clever coding and laziness on my part. The 'SGF Indenter', the purpose of which is to make the actual SGF file more human readable, is working. ___ TODO ? Create a "Game" class, and if a whole set of () exists, then I have a game? That way maybe I can easily go to multiple games stored in a single SGF file? Mostly syntactic sugar, but may be worth implementing.