## File format root nodes

Each table below describes the full tree of one of the pcb-rnd file formats, from the root.

### ha:pcb-rnd-board-v*

type:name | value | ver | description
--- | --- | --- | ---
ha:pcb-rnd-board-v* |  |  | \t\t\tThe full, self-contained description of a printed circuit board. \t\t\tThis is the root of a board .lht file. The * after the v in the name \t\t\tis an integer which is the format version. \t\t
ha:meta |  |  | Any meta-data that won't directly turn into physical material (e.g. copper).
board_name | string |  | User assigned name of the board
ha:grid |  |  | User interface last grid settings
offs_x | coord |  | grid origin: X offset from 0;0
offs_y | coord |  | grid origin: Y offset from 0;0
spacing | coord |  | distance between two grid points both in X and Y directions
ha:size |  |  | object size related settings
x | coord | <9 | drawing area size X (width)
y | coord | <9 | drawing area size Y (height)
x1 | coord | >=9 | drawing area box X1 (left)
y1 | coord | >=9 | drawing area box Y1 (upper)
x2 | coord | >=9 | drawing area box X2 (right)
y2 | coord | >=9 | drawing area box Y2 (lower)
isle_area_nm2 | double |  | remove polygon islands smaller than this value, specified in nm2; used in MorphPolygon() action only and is buggy: depending on polygon lib version it may have trigger at half or double the area
thermal_scale | double |  | scale all thermals on the board by this factor
ha:drc |  | <5 | design rule checker settings for the old DRC
bloat | coord |  | Minimum copper spacing
shrink | coord |  | Minimum overlap between validly touching copper objects
min_width | coord |  | Minimum copper width
min_silk | coord |  | Minimum silk width
min_drill | coord |  | Minimum drill diameter
min_ring | coord |  | Minimum annular ring width
ha:cursor |  |  | obsolete cursor/view state
x | coord |  | last position, X (horizontal)
y | coord |  | last position, Y (horizontal)
zoom | double |  | last view zoom factor
ha:layer_stack |  |  | physical layer stack information: geometry and properties of physical layers
li:groups |  |  | ordered list of physical layers from top to bottom
ha:INTEGER |  |  | a layer group (a physical layer of the board); the ID of the layer group is the integer in the name of the node
name | string | >=6 | purpose of layer groups (useful with mechanical/documentation groups
ha:type |  |  | a flag-list of layer type flag bits
top | flag |  | location: top side
bottom | flag |  | location: bottom side
intern | flag |  | location: internal
logical | flag |  | location: logical (not in the actual stackup)
copper | flag |  | material: copper
silk | flag |  | material: silk
mask | flag |  | material: mask
paste | flag |  | material: paste
outline | flag |  | "material": router path for board outline; normally for the outer contour, sometimes for biggish inner cutouts as well)
mech | flag |  | "material": various mechanical fabbing instructions, e.g. slots; the purpose field provides more detail about the use
doc | flag |  | "material": documentation, either for the user and for pcb-rnd or both (the purpose field shoudl tell); e.g. assembly documentation for the user, keepout for the user and DRC
substrate | flag |  | material: substrate or insulator
name | string | >=6 | purpose of layer groups (useful with mechanical/documentation groups
li:layers |  |  | ordered list of logical layer IDs hosted by this layer group
ha:font |  |  | font kit: all fonts used on the board (if no font specified, default font will be used); old boards use pcb-rnd-font-v1, boards >= v9 use pcb-rnd-font-v2
ha:FONT-ID |  |  | the full description of a font; the node name is the integer font id or "geda_pcb" for font 0 (for historical reasons); the name is used only to make each node unique, the ID is also a field below ->
ha:styles |  |  | routing styles hash: collection of all available routing syles
ha:netlists |  |  | all available netlists
li:input |  |  | the input netlist (as seen in the last netlist import, a.k.a. forward annotation)
ha:NETNAME |  |  | a network
style | string | <=7 | routing style hint; same as the style attribute; from v8 only the style attribute exists
li:conn |  |  | list of terminals connected to the network
diameter | string |  | refdes-terminal
ha:attributes |  | >=5 | a hash of attribute key=value pairs
attrib-key | string |  | attribute value
li:netlist_patch |  |  | a list of intentional deviations from the input netlist, a.k.a. material for back annotation
li:net_info |  |  | describe the current state of a net, as seen on the input
net | string |  | net name; first item on the list, only once
term | string |  | terminal name; zero or more items starting from the second item
ha:add_conn |  |  | the 'as built' network requires a new connection to be created during the back annotation
net | string |  | net name the terminal should be added to
term | string |  | terminal name
ha:del_conn |  |  | the 'as built' network requires an existing connection to be removed during the back annotation
net | string |  | net name the terminal should be removed from
term | string |  | terminal name
ha:change_attrib |  | <9 | the 'as built' network requires an attribute to be set or changed
net | string |  | net name whose attribute needs to be changed
key | string |  | key (name) of the attribute
val | string |  | new value of the attribute
ha:change_net_attrib |  | >=9 | the 'as built' network requires an attribute to be set or changed
net | string |  | net name whose attribute needs to be changed
key | string |  | key (name) of the attribute
val | string |  | new value of the attribute
ha:change_comp_attrib |  | >=9 | component (subcircuit) requires an attribute to be set or changed
comp | string |  | component refdes whose attribute needs to be changed
key | string |  | key (name) of the attribute
val | string |  | new value of the attribute
ha:comp_add |  | >=9 | create a new subcircuit (component in netlist terminology)
comp | string |  | component refdes
ha:comp_del |  | >=9 | remove a subcircuit (component in netlist terminology)
comp | string |  | component refdes
li:conf |  |  | complete pcb-rnd configuration tree ->
ha:data |  |  | Layers and global objects of the board ->
ha:pixmaps |  | >=7 | Collection of all unique pixmaps used by the board or footprint ->
ha:attributes |  |  | a hash of attribute key=value pairs
attrib-key | string |  | attribute value

### li:pcb-rnd-buffer-v*

type:name | value | ver | description
--- | --- | --- | ---
li:pcb-rnd-buffer-v* |  | >=6 | buffer file containing a whole paste buffer with bound layers
x | coord |  | buffer origin point, X coordinate
y | coord |  | buffer origin point, Y coordinate
ha:data |  |  | Layers and global objects of the board ->

### li:pcb-rnd-conf-v1

type:name | value | ver | description
--- | --- | --- | ---
li:pcb-rnd-conf-v1 |  |  | complete pcb-rnd configuration tree
ha:overwrite |  |  | overwrite values while merging; children: a full or partial config tree
ha:prepend |  |  | prepend values while merging; children: a full or partial config tree
ha:append |  |  | append values while merging; children: a full or partial config tree

### ha:pcb-rnd-drc-query-v*

type:name | value | ver | description
--- | --- | --- | ---
ha:pcb-rnd-drc-query-v* |  |  | pcb-rnd drc_query script
li:defs |  |  | Definitions of user tunable constants
ha:name |  |  | each entry is identified by an unique name
default | string |  | default value
type | string |  | data type of the constant (a valid conf system type name, e.g. real, coord)
desc | string |  | human readable description of the purpose of the constant
li:rules |  |  | DRC rules
ha:name |  |  | each entry is identified by an unique name
type | string |  | violation type (for grouping violations in the drc report)
title | string |  | title (short summary) of the violation
desc | string |  | human readable description of the violation, with hints on how to resolve it
query | string |  | query script to execute for finding violations

### li:pcb-rnd-font-v*

type:name | value | ver | description
--- | --- | --- | ---
li:pcb-rnd-font-v* |  |  | font description
ha:FONT-ID |  |  | the full description of a font; the node name is the integer font id or "geda_pcb" for font 0 (for historical reasons); the name is used only to make each node unique, the ID is also a field below
cell_height | coord |  | height of the tallest glyph
cell_width | coord |  | width of the widest glyph
height | coord | >=2 | total height, font-wise (distance between lowest point of the lowest glyph and highest point of the tallest glyph
cent_height | coord | >=2 | same as height but computed for centerline of stroke
tab_width | coord | >=2 | optional: tab column width
line_height | coord | >=2 | optional: vertical advance from one line to the next in multiline rendering
baseline | coord | >=2 | normally the origin of a text object is the top-left of the glyph coord system; when this is enabled and the font has a baseline, the glyphs are moved up so the origin is at the custom baseline of the font (bbox is modified too); measured from the top (from the glyph coord system y=0)
id | integer |  | unique font ID within the fontkit; fonts are referenced by ID
name | string |  | user specified, user readable font name
ha:symbols |  |  | a collections of glyphs availbale in the font
ha:CHARACTER |  |  | Description of a glyph (symbol). Node name is a signel ASCII character or is of format &xx where xx is a hex digit of the ASCII code of the character. Characters that must use the hex version are: codes below 33 or over 126, &, #, {, }, /, :, ;, =, \, :
height | coord |  | height of the glyph
width | coord |  | width of the glyph
delta | coord |  | extra space always inserted after the current symbol, before the next character
advance | coord |  | x direction advance; if not specified, calculated as width+delta; because of rounding errors and historical reasons, advance is more stable than delta
li:objects |  |  | objects that make up the symbol; IDs are per symbol local IDs counted from 0
ha:line.ID |  |  | round cap line, simplified
x1 | coord |  | line first endpoint, horizontal offset
y1 | coord |  | line first endpoint, vertical offset
x2 | coord |  | line second endpoint, horizontal offset
y2 | coord |  | line second endpoint, vertical offset
thickness | coord |  | width of the line
ha:simplearc.ID |  |  | round cap arc, simplified
x | coord |  | center, X coord
y | coord |  | center, Y coord
r | coord |  | radius (of the centerline of the arc)
thickness | coord |  | width of the pen the arc is drawn with
astart | angle |  | start angle
adelta | angle |  | delta angle
li:simplepoly.ID |  |  | round cap arc, simplified; contains a flat list of coords; each coord pair is an x;y corner of the outline of the polygon (odd indices are x coords, even indices are y coords)
ha:entities |  | >=2 | table for translating named &entity; characters to character indices
ENTITYNAME | integer |  | translate &ENTITYNAME; to the charatcter addressed by the integer value (should be between 1 and 254)
ha:kerning |  | >=2 | kerning table: tune horizontal distance of character pairs
CHAR1-CHAR2 | coord |  | if CHAR1 is followed by CHAR2 while rendering a string, move CHAR2 horizontally by the value; negative means CHAR2 is moved toward CHAR1; non-printable chars are represented by their &hh hex values (like in symbol names)

### ha:pcb-rnd-log-v*

type:name | value | ver | description
--- | --- | --- | ---
ha:pcb-rnd-log-v* |  |  | pcb-rnd message log dump
li:entries |  |  | list of message log entries
ha:ID |  |  | each entry is identified by an unique unsigned long int ID
stamp | string |  | UNIX time stamp of entry creation
level | integer |  | log level enum value (see error.h)
seen | integer |  | 1 if the message got displayed
str | string |  | log message

### ha:rnd-menu-v*

type:name | value | ver | description
--- | --- | --- | ---
ha:rnd-menu-v1 |  |  | Menu file
li:mouse |  |  | mouse bindings
li:left |  |  | actions to execute on left button click
li:press |  |  | actions to execute on mouse button press when no modifier is pressed
li:press-shift |  |  | actions to execute on mouse button press when shift is pressed
li:press-ctrl |  |  | actions to execute on mouse button press when control is pressed
li:release |  |  | actions to execute on mouse button release when no modifier is pressed
li:release-shift |  |  | actions to execute on mouse button release when shift is pressed
li:release-ctrl |  |  | actions to execute on mouse button release when control is pressed
li:middle |  |  | actions to execute on middle button click
li:press |  |  | actions to execute on mouse button press when no modifier is pressed
li:press-shift |  |  | actions to execute on mouse button press when shift is pressed
li:press-ctrl |  |  | actions to execute on mouse button press when control is pressed
li:release |  |  | actions to execute on mouse button release when no modifier is pressed
li:release-shift |  |  | actions to execute on mouse button release when shift is pressed
li:release-ctrl |  |  | actions to execute on mouse button release when control is pressed
li:right |  |  | actions to execute on right button click
li:press |  |  | actions to execute on mouse button press when no modifier is pressed
li:press-shift |  |  | actions to execute on mouse button press when shift is pressed
li:press-ctrl |  |  | actions to execute on mouse button press when control is pressed
li:release |  |  | actions to execute on mouse button release when no modifier is pressed
li:release-shift |  |  | actions to execute on mouse button release when shift is pressed
li:release-ctrl |  |  | actions to execute on mouse button release when control is pressed
li:scroll-up |  |  | actions to execute on scroll wheel scolling up event
li:press |  |  | actions to execute on mouse button press when no modifier is pressed
li:press-shift |  |  | actions to execute on mouse button press when shift is pressed
li:press-ctrl |  |  | actions to execute on mouse button press when control is pressed
li:scroll-down |  |  | actions to execute on scroll wheel scolling down event
li:press |  |  | actions to execute on mouse button press when no modifier is pressed
li:press-shift |  |  | actions to execute on mouse button press when shift is pressed
li:press-ctrl |  |  | actions to execute on mouse button press when control is pressed
li:main_menu |  |  | root of the main pull-down menu system; ordered list of main menus
ha:MENUNAME |  |  | main menu name, e.g. "File"
m | string |  | mnemonic: single character that should be underlined and used as a hot key in the menu name
li:submenu |  |  | ordered list of menu items for a submenu ->
li:popups |  |  | collection of popup menus
ha:POPUPNAME |  |  | popup menu name, e.g. "layer" for layer context menu
m | string |  | mnemonic: single character that should be underlined and used as a hot key in the menu name
li:submenu |  |  | ordered list of menu items for a submenu ->
li:toolbar_static |  |  | ordered list (from left to right) of toolbar icons
ha:TOOLNAME |  |  | tool menu name, e.g. "polyhole" for the polygon hole draw tool
te:tip |  |  | tooltip for the icon button
li:anchored |  |  | list of submenus; child of submenu would be copied and appended after ever occurance of the ANCHORNAME
ha:@ANCHORNAME |  |  | list menu items/subtrees to be copied after each @ANCHORNAME in the menu system
li:submenu |  |  | ordered list of menu items for a submenu ->
ha:scripts |  |  | a collection of named action scripts that can be symnlinked from elsewhere in the menu file
li:SCRIPTNAME |  |  | action script

### ha:rnd-menu-patch-v*

type:name | value | ver | description
--- | --- | --- | ---
ha:rnd-menu-patch-v1 |  |  | Menu patch instructions
te:prio |  |  | optional; integer priority value used in ordering the menu files/patches before merging
li:patch |  |  | ordered list of patch instructions
ha:append_menu |  |  | append (or overwrite) a submenu tree at a given path
te:path |  |  | path to a menu item, starting from the menu tree root; e.g. /main_menu/File/Revert ->
li:submenu |  |  | ordered list of menu items for a submenu ->
ha:remove_menu |  |  | remove a submenu or menu item at a given path
te:path |  |  | path to a menu item, starting from the menu tree root; e.g. /main_menu/File/Revert ->
ha:overwrite_menu_props |  |  | overwrite properties of an existing menu
te:path |  |  | path to a menu item, starting from the menu tree root; e.g. /main_menu/File/Revert ->
ha:props |  |  | same as menu properties documented at LEAFSUBMENUNAME

### li:pcb-rnd-padstack-v*

type:name | value | ver | description
--- | --- | --- | ---
li:pcb-rnd-padstack-v* |  | >=6 | A singe padstack prototype
ha:ps_proto_v6.0 |  |  | padstack prototype specification, as introduced in lihata board v4 ->

### ha:coraleda-project-v1

type:name | value | ver | description
--- | --- | --- | ---
ha:coraleda-project-v1 |  |  | Project file root. Except for "common", each software package should create a single subtree under the root; the subtree shall be named after the software package
ha:common |  |  | project settings that should be common to all software packages
name | string |  | long name of the project
desc | string |  | description of the project
url | string |  | homepage of the project
vcs | string |  | main vcs url for the project
contact | string |  | author/maintainer contact info
li:files |  |  | ordered list of source files being used by the project
ha:NAME |  |  | a project member file
path | string |  | path to the file, relative to the project file
desc | string |  | description of the file
type | string |  | optional: type of the file; one of: "pcb", "schematic", "doc"
li:libs |  |  | ordered list of libraries the project depends on
ha:NAME |  |  | a library
path | string |  | path to the library, relative to the project file; all files and subdirectories under the root, recursively, are considered part of the library (must not be used together with url)
url | string |  | url to the library (must not be used together with path)
desc | string |  | description of the library
type | string |  | optional: type of the library; one of: "footprint" (for pcb design), "symbol" (for schematic), "sim" (models and subcircuits for e.g. spice simulation)
li:pcb-rnd-conf-v1 |  |  | complete pcb-rnd configuration tree ->

### li:pcb-rnd-subcircuit-v*

type:name | value | ver | description
--- | --- | --- | ---
li:pcb-rnd-subcircuit-v* |  |  | footprint file containing a single subcircuit
ha:subc.ID |  | >=3 | an instance (full copy) of a subcircuit
uid | minuid |  | UID assigned by the user to track subc history
ha:attributes |  |  | a hash of attribute key=value pairs
attrib-key | string |  | attribute value
ha:flags |  |  | flag bits of a subcircuit
found | flag |  | If set, this object has been found by FindConnection()
selected | flag |  | Set when the object is selected.
exportsel | flag |  | Set for objects that should be exported in a partial export.
lock | flag |  | Set for locked objects.
nonetlist | flag |  | subcircuit is not on the netlist and should not interfere with the netlist
termname | flag |  | when set the names of pins are shown.
floater | flag |  | subc part can be moved after subc placing
ha:data |  |  | Layers and global objects of the board ->
ha:pixmaps |  | >=7 | Collection of all unique pixmaps used by the board or footprint ->

### li:view-list-v*

type:name | value | ver | description
--- | --- | --- | ---
li:view-list-v* |  |  | a list of view items (locations and objects to highlight on the board, e.g. for DRC violations)
ha:view.ID |  |  | a view item; ID is a 32 bit signed integer, unique within the view list
type | string |  | free form short text for type of the entry; the GUI may group items by type
title | string |  | free form short text for the title of the entry; the GUI typically uses this in brief listings
description | string |  | free form long text for the detailed description of the entry
li:bbox | coord |  | optional: 4 coordinates in x1;y1;x2;y2 order that describes the bounding box of the view in board space coordinates; when available, the preview or go-to will use this for view box
li:xy | coord |  | optional: 2 coordinates in x;y order that describes a specific board location
li:objs.ID |  |  | a group of related objects; there should be at most two groups with ID 0 and 1. These objects are often highlighted in red and blue.
li:id |  |  | objects are specified as a list of object IDs (32 bit integers)

## Common subtrees

Each table below describes a subtree that usually does not specify a whole tree (thus they are usually not a valid file on their own). These subtrees are described in a separate table because they are used from multiple other trees.

### ha:data

type:name | value | ver | description
--- | --- | --- | ---
ha:data |  |  | Layers and global objects of the board
li:objects |  |  | List of global (non-layer/multi-layer) objects
ha:padstack_ref.ID |  | >=4 | a padstack reference (instance) placed on the board (e.g. used as a via)
proto | integer |  | padstack prototype ID to use, from the parent data's proto list
x | coord |  | place padstack with origin at this horizontal coordinate
y | coord |  | place padstack with origin at this vertical coordinate
clearance | coord |  | global clearance; if non-zero, overrides local (per shape) clearance
rot | angle |  | rotation angle in degrees
xmirror | integer |  | 0 or 1; if 1, mirror all shapes over the x (horizontal) axis (so that y coords are flipped)
smirror | integer |  | 0 or 1; if 1, mirror the layer stackup: bottom becomes top, top becomes bottom (a.k.a. "place on the other side")
ha:attributes |  |  | a hash of attribute key=value pairs
attrib-key | string |  | attribute value
ha:flags |  |  | flag bits of a padstack
found | flag |  | If set, this object has been found by FindConnection()
hole | flag |  | For pins and vias, this flag means that the pin or via is a hole without a copper annulus.
clearline | flag |  | For lines and arcs, the line/arc will clear polygons instead of connecting to them.
selected | flag |  | Set when the object is selected.
auto | flag |  | For lines and vias, indicates that these were created by the autorouter.
warn | flag |  | For pins, vias, and pads, set to indicate a warning.
exportsel | flag |  | Set for objects that should be exported in a partial export.
lock | flag |  | Set for locked objects.
termname | flag |  | when set the names of pins are shown.
floater | flag |  | subc part can be moved after subc placing
li:thermal |  |  | list of thermal shapes, per layer
li:LAYERID |  |  | integer layer ID the thermal affects; each word is a boolean flag that is either present on the list or is missing; only one shape may be present
on | none |  | thermal is present on this layer; if not present, all other thermal flags are ignored on this layer
diag | none |  | thermal graphics is not axis aligned but diagonal (rotated by 45 degrees)
round | none |  | shape: rounded edge fingers
sharp | none |  | shape: sharp edge fingers
solid | none |  | shape: no thermal relief, solid connection without clearance
noshape | none | >=6 | shape: special: omit copper shape of the padstack on this layer
ha:via.ID |  | <=4 | an old via object (loaded as padstack in the new model)
x | coord |  | place padstack with origin at this horizontal coordinate
y | coord |  | place padstack with origin at this vertical coordinate
thickness | coord |  | copper shape dimension (diameter)
clearance | coord |  | copper clearance around the copper shape
mask | coord |  | mask cutout shape dimension (diameter)
hole | coord |  | drill/hole diameter
name | string |  | optional name attribute
number | string |  | for a pin (or to-be-pin) this is the terminal ID
ha:attributes |  |  | a hash of attribute key=value pairs
attrib-key | string |  | attribute value
ha:flags_pinvia |  |  | flag bits of a pin or via
found | flag |  | If set, this object has been found by FindConnection()
hole | flag |  | For pins and vias, this flag means that the pin or via is a hole without a copper annulus.
clearline | flag |  | For lines and arcs, the line/arc will clear polygons instead of connecting to them.
selected | flag |  | Set when the object is selected.
auto | flag |  | For lines and vias, indicates that these were created by the autorouter.
warn | flag |  | For pins, vias, and pads, set to indicate a warning.
usetherm | flag |  | Obsolete, indicates that pins/vias should be drawn with thermal fingers.
drc | flag |  | Set for objects that fail DRC: flag like FOUND flag for DRC checking.
lock | flag |  | Set for locked objects.
nonetlist | flag |  | subcircuit is not on the netlist and should not interfere with the netlist
termname | flag |  | when set the names of pins are shown.
floater | flag |  | subc part can be moved after subc placing
pin | flag |  | object is a pin (in an element)
via | flag |  | object is a via
li:layers |  |  | ordered list of layers; v1 required the order to be top-bottom physically; v1 also required silk layers to be at the end (same resrtictions as in the old .pcb format; only real (non-bound) layers have attributes)
ha:NAME |  |  | a logical layer
lid | integer | >=2 | layer ID
visible | integer | <6 | only in real (non-boud) layers: 1 if the layer is visible, 0 if not (UI setting)
group | integer |  | only in real (non-boud) layers: "parent" layer group ID
color | string | >=5 | layer color on UI, in #rrggbb format
stack_offs | integer |  | only in bound layers: match offset e.g. for internal copper layers
ha:type |  |  | only for bound layers: try to bind to this type of layer on the host board
top | flag |  | location: top side
bottom | flag |  | location: bottom side
intern | flag |  | location: internal
logical | flag |  | location: logical (not in the actual stackup)
copper | flag |  | material: copper
silk | flag |  | material: silk
mask | flag |  | material: mask
paste | flag |  | material: paste
outline | flag |  | "material": router path for board outline; normally for the outer contour, sometimes for biggish inner cutouts as well)
mech | flag |  | "material": various mechanical fabbing instructions, e.g. slots; the purpose field provides more detail about the use
doc | flag |  | "material": documentation, either for the user and for pcb-rnd or both (the purpose field shoudl tell); e.g. assembly documentation for the user, keepout for the user and DRC
substrate | flag |  | material: substrate or insulator
purpose | integer | >=6 | only in bound layers: match layer group purpose
combining |  | >=2 | layer combination (compositing) flags
sub | flag |  | draw in negative
auto | flag |  | padstacks draw their paste, mask and silk objects on the first layer (of matching type) that features the auto flag
ha:attributes |  |  | a hash of attribute key=value pairs
attrib-key | string |  | attribute value
li:objects |  |  | list of drawing primitives put on this layer
ha:line.ID |  |  | round cap line
x1 | coord |  | line first endpoint, horizontal offset
y1 | coord |  | line first endpoint, vertical offset
x2 | coord |  | line second endpoint, horizontal offset
y2 | coord |  | line second endpoint, vertical offset
thickness | coord |  | width of the line
clearance | coord |  | copper clearance around the object
ha:attributes |  |  | a hash of attribute key=value pairs
attrib-key | string |  | attribute value
ha:flags |  |  | flag bits of a line
found | flag |  | If set, this object has been found by FindConnection()
clearline | flag |  | For lines and arcs, the line/arc will clear polygons instead of connecting to them.
selected | flag |  | Set when the object is selected.
auto | flag |  | For lines and vias, indicates that these were created by the autorouter.
rubberend | flag |  | For lines, used internally for rubber band moves: indicates one end already rubber banding.
exportsel | flag |  | Set for objects that should be exported in a partial export.
lock | flag |  | Set for locked objects.
termname | flag |  | when set the names of pins are shown.
floater | flag |  | subc part can be moved after subc placing
li:thermal |  |  | list of thermal flags for heavy terminals, on the single layer the object is on
on | none |  | draw any thermal only if this string is present; else normal clearance is applied
diag | none |  | if present, the thermal is diagonal (45 degree rotated)
round | none |  | if present, thermal shape is rounded
sharp | none |  | if present, thermal shape is sharp
solid | none |  | if present, there is no thermal but a solid connection ("join")
ha:arc.ID |  |  | round cap elliptic arc (only width==height is fully supported at the moment)
x | coord |  | center, X coord
y | coord |  | center, Y coord
width | coord |  | radius (of the centerline of the arc) in X direction
height | coord |  | radius (of the centerline of the arc) in Y direction
thickness | coord |  | width of the pen the arc is drawn with
clearance | coord |  | copper clearance around the object
astart | angle |  | start angle
adelta | angle |  | delta angle
ha:attributes |  |  | a hash of attribute key=value pairs
attrib-key | string |  | attribute value
ha:flags |  |  | flag bits of a arc
found | flag |  | If set, this object has been found by FindConnection()
clearline | flag |  | For lines and arcs, the line/arc will clear polygons instead of connecting to them.
selected | flag |  | Set when the object is selected.
auto | flag |  | For lines and vias, indicates that these were created by the autorouter.
rubberend | flag |  | For lines, used internally for rubber band moves: indicates one end already rubber banding.
exportsel | flag |  | Set for objects that should be exported in a partial export.
lock | flag |  | Set for locked objects.
termname | flag |  | when set the names of pins are shown.
floater | flag |  | subc part can be moved after subc placing
li:thermal |  |  | list of thermal flags for heavy terminals, on the single layer the object is on
on | none |  | draw any thermal only if this string is present; else normal clearance is applied
diag | none |  | if present, the thermal is diagonal (45 degree rotated)
round | none |  | if present, thermal shape is rounded
sharp | none |  | if present, thermal shape is sharp
solid | none |  | if present, there is no thermal but a solid connection ("join")
ha:gfx.ID |  | >=7 | rectangular custom pixmap graphics
sx | coord |  | visible size, X direction
sy | coord |  | visible size, Y direction
cx | coord |  | center, X coord
cy | coord |  | center, Y coord
rot | angle |  | rotation angle, CCW
xmirror | ingteger |  | 0 or 1, whether the pixmap should be mirrored (x coord mirror, which means mirror against the y axis
ymirror | ingteger |  | 0 or 1, whether the pixmap should be mirrored (y coord mirror, which means mirror against the x axis
pixmap_ref | ingteger |  | ID of the pixmap to use from the pixmaps subtree; this pixmap represents the neutral state (no rotation, no mirror) pixmap of the object
ha:attributes |  |  | a hash of attribute key=value pairs
attrib-key | string |  | attribute value
ha:flags |  |  | flag bits of a arc
found | flag |  | If set, this object has been found by FindConnection()
clearline | flag |  | For lines and arcs, the line/arc will clear polygons instead of connecting to them.
selected | flag |  | Set when the object is selected.
auto | flag |  | For lines and vias, indicates that these were created by the autorouter.
rubberend | flag |  | For lines, used internally for rubber band moves: indicates one end already rubber banding.
exportsel | flag |  | Set for objects that should be exported in a partial export.
lock | flag |  | Set for locked objects.
termname | flag |  | when set the names of pins are shown.
floater | flag |  | subc part can be moved after subc placing
li:thermal |  |  | list of thermal flags for heavy terminals, on the single layer the object is on
on | none |  | draw any thermal only if this string is present; else normal clearance is applied
diag | none |  | if present, the thermal is diagonal (45 degree rotated)
round | none |  | if present, thermal shape is rounded
sharp | none |  | if present, thermal shape is sharp
solid | none |  | if present, there is no thermal but a solid connection ("join")
ha:polygon.ID |  |  | polygon, as drawn (unclipped)
clearance | coord | >=3 | copper clearance around the object
enforce_clearance | coord | >=7 | enforce minimum clearance on clearing objects within the polygon
ha:attributes |  |  | a hash of attribute key=value pairs
attrib-key | string |  | attribute value
ha:flags |  |  | flag bits of a polygon
found | flag |  | If set, this object has been found by FindConnection()
clearpoly | flag |  | For polygons, this flag means that pins and vias will normally clear these polygons (thus, thermals are required for electrical connection). When clear, polygons will solidly connect to pins and vias.
fullpoly | flag |  | For polygons, the full polygon is drawn (i.e. all parts instead of only the biggest one).
selected | flag |  | Set when the object is selected.
exportsel | flag |  | Set for objects that should be exported in a partial export.
lock | flag |  | Set for locked objects.
termname | flag |  | when set the names of pins are shown.
clearpolypoly | flag |  | For polygons, apply clearance to nearby polygons
floater | flag |  | subc part can be moved after subc placing
li:thermal |  |  | list of thermal flags for heavy terminals, on the single layer the object is on
on | none |  | draw any thermal only if this string is present; else normal clearance is applied
diag | none |  | if present, the thermal is diagonal (45 degree rotated)
round | none |  | if present, thermal shape is rounded
sharp | none |  | if present, thermal shape is sharp
solid | none |  | if present, there is no thermal but a solid connection ("join")
li:geometry |  |  | first item is the outer contour, subsequent, optional items are holes
contour | coordtbl |  | 2 column table of x;y coords for the outer contour
hole | coordtbl |  | 2 column table of x;y coords for a hole
ha:text.ID |  |  | single line text object
x | coord |  | placement: X coord
y | coord |  | placement: Y coord
role | string |  | when part of an old element, determines which of the three hardwired text object role is used (footprint, refdes or value)
string | string |  | text string (payload)
fid | integer |  | font ID
scale | integer |  | text size scale in %
scale_x | double |  | text size scale in X direction (width), as a multiplier; if 0, use scale/100
scale_y | double |  | text size scale in Y direction (height), as a multiplier; if 0, use scale/100
direction | integer | <=5 | rotation in 90 degree steps (0 is horizontal); between -3 and +3, inclusive. Starting from v6, the rot field shall be used instead of direction
rot | angle | >=6 | rotation angle in degrees, [0..360), CCW
thickness | coord | >=6 | if zero, use the default width algorithm; if non-zero use this value as rotation angle in degrees
clearance | coord | >=8 | if non-zero and the object has tight_clearance attribute that is true, use this value for the clearance around the text object in polygons
ha:attributes |  |  | a hash of attribute key=value pairs
attrib-key | string |  | attribute value
ha:flags |  |  | flag bits of a text
found | flag |  | If set, this object has been found by FindConnection()
clearline | flag |  | For lines and arcs, the line/arc will clear polygons instead of connecting to them.
selected | flag |  | Set when the object is selected.
onsolder | flag |  | For text, indicates that it is on the solder side.
exportsel | flag |  | Set for objects that should be exported in a partial export.
lock | flag |  | Set for locked objects.
termname | flag |  | when set the names of pins are shown.
dyntext | flag |  | For text: dynamic string (substitute %patterns%)
floater | flag |  | subc part can be moved after subc placing
entity | flag |  | For text: substitute &entity; with glyph
li:padstack_prototypes |  | >=4 |
unused | none |  | placeholder for marking unused slot to keep slot indices for early lihata v4
ha:ps_proto_v4.PID |  |  | padstack prototype specification, as introduced in lihata board v4
hdia | coord |  | hole diameter; 0 means no hole
htop | integer |  | hole start: copper layer index from the top (positive) or bottom (negative) copper layer (0 means top copper layer)
hbottom | integer |  | hole start: copper layer index from the bottom (positive) or top (negative) copper layer (0 means bottom copper layer)
hplated | integer |  | 0=hole and/or slot is unplated; 1=hole and/or slot is plated
name | string | >=5 | optional user assigned prototype name
li:shape |  |  | shape per layer type definition
ha:ps_shape_v4 |  |  | shape on a specific layer type (specified by layer_mask and combining), as specifie in lihata board v4; shape is either ps_poly, ps_line or ps_circ (only one of these will present per layer type); shape coords are relative to padstack origin; layer mask shall contain one material and at most one location bit
ha:layer_mask |  |  | layer type and location
top | flag |  | location: top side
bottom | flag |  | location: bottom side
intern | flag |  | location: internal
logical | flag |  | location: logical (not in the actual stackup)
copper | flag |  | material: copper
silk | flag |  | material: silk
mask | flag |  | material: mask
paste | flag |  | material: paste
outline | flag |  | "material": router path for board outline; normally for the outer contour, sometimes for biggish inner cutouts as well)
mech | flag |  | "material": various mechanical fabbing instructions, e.g. slots; the purpose field provides more detail about the use
doc | flag |  | "material": documentation, either for the user and for pcb-rnd or both (the purpose field shoudl tell); e.g. assembly documentation for the user, keepout for the user and DRC
substrate | flag |  | material: substrate or insulator
combining |  |  | layer compositing match
sub | flag |  | draw in negative
auto | flag |  | padstacks draw their paste, mask and silk objects on the first layer (of matching type) that features the auto flag
clearance | coord |  | local, per-layer-type clearance doubled; applied if global padstack clearance is 0; WARNING: for historical reasons this field stores the DOUBLE of the actual clearance.
li:ps_poly |  |  | arbitrary convex polygon shape; contains a list of x;y coordinates
ha:ps_line |  |  | straight line shape, round or square cap
x1 | coord |  | line first endpoint, horizontal offset
y1 | coord |  | line first endpoint, vertical offset
x2 | coord |  | line second endpoint, horizontal offset
y2 | coord |  | line second endpoint, vertical offset
thickness | coord |  | width of the line
square | integer |  | 0=round cap; 1=square cap
ha:ps_circ |  |  | filled circle shape
x | coord |  | center, horizontal offset
y | coord |  | center, vertical offset
dia | coord |  | circle diameter
te:ps_hshadow |  | >=6 | hole/slot shadow
ha:subc.ID |  | >=3 | an instance (full copy) of a subcircuit
uid | minuid |  | UID assigned by the user to track subc history
ha:attributes |  |  | a hash of attribute key=value pairs
attrib-key | string |  | attribute value
ha:flags |  |  | flag bits of a subcircuit
found | flag |  | If set, this object has been found by FindConnection()
selected | flag |  | Set when the object is selected.
exportsel | flag |  | Set for objects that should be exported in a partial export.
lock | flag |  | Set for locked objects.
nonetlist | flag |  | subcircuit is not on the netlist and should not interfere with the netlist
termname | flag |  | when set the names of pins are shown.
floater | flag |  | subc part can be moved after subc placing
ha:data |  |  | Layers and global objects of the board ->
ha:element.ID |  | <3 | an instance (full copy) of an obsolete element footprint
x | coord |  | element origin (diamond), horizontal offset
y | coord |  | element origin (diamond), vertical offset
ha:attributes |  |  | a hash of attribute key=value pairs
attrib-key | string |  | attribute value
ha:flags_element |  |  | flag bits of an element
found | flag |  | If set, this object has been found by FindConnection()
selected | flag |  | Set when the object is selected.
auto | flag |  | For lines and vias, indicates that these were created by the autorouter.
drc | flag |  | Set for objects that fail DRC: flag like FOUND flag for DRC checking.
lock | flag |  | Set for locked objects.
nonetlist | flag |  | subcircuit is not on the netlist and should not interfere with the netlist
termname | flag |  | when set the names of pins are shown.
floater | flag |  | subc part can be moved after subc placing
onsolder | flag |  | element is placed on the solder side
li:objects |  |  | list of special objects that make up the element; lines and arcs are always on a silk layer
ha:line.ID |  |  | round cap line ->
ha:arc.ID |  |  | round cap elliptic arc (only width==height is fully supported at the moment) ->
ha:text.ID |  |  | single line text object ->
ha:pad.ID |  |  | SMD pad emulated using a line object; becomes a rectangle (but watch out for the cap-extended length!) when the square flag is set
x1 | coord |  | line first endpoint, horizontal offset
y1 | coord |  | line first endpoint, vertical offset
x2 | coord |  | line second endpoint, horizontal offset
y2 | coord |  | line second endpoint, vertical offset
thickness | coord |  | width of the line
clearance | coord |  | clearance around the line
mask | coord |  | size of the mask cutout, as interpreted by gEDA/PCB
name | string |  | symbolic name of the pad
number | string |  | "pin number" for the netlist
ha:attributes |  |  | a hash of attribute key=value pairs
attrib-key | string |  | attribute value
ha:flags_pad |  |  | flag bits of a pad
found | flag |  | If set, this object has been found by FindConnection()
hole | flag |  | For pins and vias, this flag means that the pin or via is a hole without a copper annulus.
clearline | flag |  | For lines and arcs, the line/arc will clear polygons instead of connecting to them.
selected | flag |  | Set when the object is selected.
auto | flag |  | For lines and vias, indicates that these were created by the autorouter.
warn | flag |  | For pins, vias, and pads, set to indicate a warning.
usetherm | flag |  | Obsolete, indicates that pins/vias should be drawn with thermal fingers.
drc | flag |  | Set for objects that fail DRC: flag like FOUND flag for DRC checking.
lock | flag |  | Set for locked objects.
nonetlist | flag |  | subcircuit is not on the netlist and should not interfere with the netlist
termname | flag |  | when set the names of pins are shown.
floater | flag |  | subc part can be moved after subc placing
pin | flag |  | object is a pin (in an element)
via | flag |  | object is a via
ha:pin.ID |  |  | thru-hole pin; emulated as an old-style via
x | coord |  | place padstack with origin at this horizontal coordinate
y | coord |  | place padstack with origin at this vertical coordinate
thickness | coord |  | copper shape dimension (diameter)
clearance | coord |  | copper clearance around the copper shape
mask | coord |  | mask cutout shape dimension (diameter)
hole | coord |  | drill/hole diameter
name | string |  | optional name attribute
number | string |  | for a pin (or to-be-pin) this is the terminal ID
ha:attributes |  |  | a hash of attribute key=value pairs
attrib-key | string |  | attribute value
ha:flags_pinvia |  |  | flag bits of a pin or via
found | flag |  | If set, this object has been found by FindConnection()
hole | flag |  | For pins and vias, this flag means that the pin or via is a hole without a copper annulus.
clearline | flag |  | For lines and arcs, the line/arc will clear polygons instead of connecting to them.
selected | flag |  | Set when the object is selected.
auto | flag |  | For lines and vias, indicates that these were created by the autorouter.
warn | flag |  | For pins, vias, and pads, set to indicate a warning.
usetherm | flag |  | Obsolete, indicates that pins/vias should be drawn with thermal fingers.
drc | flag |  | Set for objects that fail DRC: flag like FOUND flag for DRC checking.
lock | flag |  | Set for locked objects.
nonetlist | flag |  | subcircuit is not on the netlist and should not interfere with the netlist
termname | flag |  | when set the names of pins are shown.
floater | flag |  | subc part can be moved after subc placing
pin | flag |  | object is a pin (in an element)
via | flag |  | object is a via
ha:rat.ID |  |  | global rat line
x1 | coord |  | line first endpoint, horizontal offset
y1 | coord |  | line first endpoint, vertical offset
x2 | coord |  | line second endpoint, horizontal offset
y2 | coord |  | line second endpoint, vertical offset
lgrp1 | integer |  | first endpoint's layer group ID
lgrp2 | integer |  | second endpoint's layer group ID
anchor1 | string | >=7 | first endpoint's objet anchor written as an absolute idpath
anchor2 | string | >=7 | second endpoint's objet anchor written as an absolute idpath
ha:attributes |  |  | a hash of attribute key=value pairs
attrib-key | string |  | attribute value
ha:flags |  |  | flag bits of a line
found | flag |  | If set, this object has been found by FindConnection()
clearline | flag |  | For lines and arcs, the line/arc will clear polygons instead of connecting to them.
selected | flag |  | Set when the object is selected.
auto | flag |  | For lines and vias, indicates that these were created by the autorouter.
rubberend | flag |  | For lines, used internally for rubber band moves: indicates one end already rubber banding.
exportsel | flag |  | Set for objects that should be exported in a partial export.
lock | flag |  | Set for locked objects.
termname | flag |  | when set the names of pins are shown.
floater | flag |  | subc part can be moved after subc placing

### ha:pixmaps

type:name | value | ver | description
--- | --- | --- | ---
ha:pixmaps |  | >=7 | Collection of all unique pixmaps used by the board or footprint
ha:ulzw.ID |  |  | pixmap with payload ulzw-compressed
sx | integer |  | size in X direction (width), in pixels
sy | integer |  | size in Y direction (height), in pixels
transparent | string |  | color of the transparent pixel in #rrggbb form; omit node if there is no transparent pixel in the pixmap
pixmap | string |  | base64 encoded version of the ulzw compressed raw pixmap, whih is in 24 bit RGB format, stored row-major

### li:submenu

type:name | value | ver | description
--- | --- | --- | ---
li:submenu |  |  | ordered list of menu items for a submenu
m | string |  | mnemonic: single character that should be underlined and used as a hot key in the menu name
- | none |  | horizontal separator
@ANCHOR | none |  | an anchor is an invisible placeholder where a dynamically generated set of menu items should be inserted runtime
ha:SUBSUBMENUNAME |  |  | sub-submenu item: opens a new level of submenu when clicked
m | string |  | mnemonic: single character that should be underlined and used as a hot key in the menu name
li:submenu |  |  | ordered list of menu items for a submenu ->
ha:LEAFSUBMENUNAME |  |  | leaf submenu item: executes an action when clicked
m | string |  | mnemonic: single character that should be underlined and used as a hot key in the menu name
li:a |  |  | list of alternative hotkey sequences to activate the menu
a | string |  | a single hotkey sequences to activate the menu
li:action |  |  | list of actions to execute when the menu is activated
action | string |  | a single action to execute when the menu is activated
tip | string |  | tooltip text
checked | string |  | the menu item has a checkbox; value is the action to execute to determine whether the menu item's checkbox is checked or not
update_on | string |  | path of a conf node that triggers re-evaluation of the checkbox state

### te:path

type:name | value | ver | description
--- | --- | --- | ---
te:path |  |  | path to a menu item, starting from the menu tree root; e.g. /main_menu/File/Revert

## Types

type | description
--- | ---
angle | \tA decimal number without unit, representing an angle in degree. Can \tbe positive or negative.

coord

\tA decimal number with a unit suffix. If the unit suffix is missing, \tthe coordinate is loaded in the internal units (which is nanometer as of 2018, \tbut could change in the future, thus files shall not depend on it). Depending \ton the context, coordinates may have a sign (positive or negative). \t

\tExamples:

    x=10mil;
    y=1.5mm;
    dia=12cm;

coordtbl

\tA two-column table of coords. First column are X, second column are Y \tcoordinates. \t

\tExamples:

    ta:contour {
    \t1mm;   2.1mm;
    \t5mm;   5.2mm;
    \t3.7mm; 12mil;
    }
    ta:foo = { 1mm; 2.1mm;  5mm;   5.2mm;  3.7mm; 12mil; }

double | \tUnitless numeric value in decimal format. Depending on context it is \tsometimes signed.
flag | \tIf the flag is set, the value is "1", if the flag is not set, the \twhole key=value pair is omitted.
integer | \tUnitless integer value in decimal format. Depending on context it is \tsometimes signed.
minuid | \tAn unique ID as generated by libminuid (24 ASCII characters).
none | \tNo value.
string | \tFree form text data

## Comments

ver column: Format version range the subtree may appear in.