@User it is up to date, the only primitive graphical objects are wires, lines, rects, polygons, circle/arcs, text. Then there is the symbol, symbol is just like a C 'struct' , an aggregate of primitive objects (or sub-symbols). A Component is a placement of a symbol, a schematic may have multiple instances of symbols in the same way as for C++ an object is an instantiation of a class. All 'special' objects (bus rippers, labels, input/output/inout pins, supply tiers, global nodes) are realized as symbols. Xschem does make heavy use of attributes so any graphical object ( a line, a text, a component instance, a symbol itself, .. ) can hold attributes as a list of 'token=value' pairs (tok1=val1 tok2=val2 tok3=val3 ...) These attributes allow to create any 'special' electrical object, without cluttering the program with additional base primitives. For example the netlister backends know that a 'type=ipin' attribute attached to a symbol defines an input pin, a 'type=label' defines a net label. No need to create primitive types for these things.