Schematic KDL
Schematic KDL glossary
This page summarizes every KDL node and property accepted by the schematic loader.
Glossary
- Top-level nodes:
panelvariants,object_3d,line_3d,vector_arrow,window. - EQL: expressions are evaluated in the runtime EQL context. Vector-like fields expect 3 components;
world_posis a 7-component array (quat + position). - Colors:
color r g b [a]or named (black,white,blue,orange,yellow,yalk,pink,cyan,gray,green,mint,turquoise,slate,pumpkin,yolk,peach,reddish,hyperblue); alpha optional; can be inline or incolor/colourchild nodes. Defaults to white when omitted unless noted.
window
path/file/name: optional secondary schematic file. Relative paths resolve against the parent schematic directory (or CWD). If absent, the entry configures the primary window instead of loading a secondary file.title/display: optional window title.screen: optional zero-based display index.rect { x y width height }: optional child; four percentages (clamped 0β100). Used for placement of primary or secondary windows. Secondary windows default toDEFAULT_SECONDARY_RECTwhen unset.
panel containers
tabs { ... }: children are panels. No extra props.hsplit/vsplit: children are panels. Childshare=<f32>controls the weight within the split.active(bool) is parsed but not currently used. Optionalname.
panel content
viewport:fov(default 45.0),active(bool, default false),show_grid(default false),hdr(default false),name(optional label), camerapos/look_at(optional EQL).graph: positionaleql(required),name(optional),type(line/point/bar, defaultline),auto_y_range(default true),y_min/y_max(default0.0..1.0), childcolornodes (optional list; otherwise palette).component_monitor:component_name(required).action_pane: positionallabel(required),luascript (required).query_table: positionalquery(defaults to empty),type(eqldefault, orsql).query_plot: positionallabel(required),query(required),refresh_intervalin ms (default 1000),auto_refresh(default false),color(default white),type(eqldefault, orsql).inspector,hierarchy,schematic_tree: no properties.dashboard: layout node (Bevy UI style). Key properties:label(optional),display(flexdefault, orgrid/block/none),box_sizing(border-boxdefault orcontent-box),position_type(relativedefault orabsolute),overflow(per-axis; defaults visible),overflow_clip_margin(visual_box + margin, defaults content-box / 0), sizing (left/right/top/bottom/width/height/min_*/max_*acceptauto,px,%,vw,vh,vmin,vmax; defaultauto),aspect_ratio(optional f32), alignment (align_items/justify_items/align_self/justify_self/align_content/justify_content, all default todefaultvariants), flex (flex_direction,flex_wrap,flex_growdefault 0,flex_shrinkdefault 1,flex_basisdefaultauto,row_gap/column_gapdefaultauto),children(nested dashboard nodes), colors viabg/backgroundchild (default transparent),text(optional),font_size(default 16),text_colorchild (default white), spacing viamargin/padding/borderchildren withleft/right/top/bottom.
object_3d
- Positional
eql: required. Evaluated to aworld_pos-like value to place the mesh. - Mesh child (required, exactly one):
glb:path(required),scale(default 1.0),translate(x,y,z)(default 0s),rotate(deg_x,deg_y,deg_z)in degrees (default 0s).sphere:radius(required);color(default white).box:x,y,z(all required);color(default white).cylinder:radius,height(both required);color(default white).plane:width/depth(defaultsizeif set, else 10.0); optionalsizeshorthand;color(default white).ellipsoid:scale(EQL string, default"(1, 1, 1)"),color(default white).
line_3d
- Positional
eql: required; expects 3 values (or 7 where the last 3 are XYZ). line_width: default 1.0.color: default white.perspective: default true (set false for screen-space lines).
vector_arrow
vector: EQL expression yielding a 3-component vector (required).origin: EQL for arrow base;world_posor 3-tuple (optional).scale: numeric multiplier (default 1.0).normalize:#true/#false; normalize before scaling (default false).body_frame/in_body_frame: apply origin rotation to the vector (default false).color: arrow color (default white).name: label text; used for legend/overlay (optional).display_name: show/hide overlay label (default true).arrow_thickness:small|middle|big(defaultsmall).label_position: 0.0β1.0 along the arrow (0=base, 1=tip) for label anchor (default 1.0).
Schema at a glance
Legend: parentheses group alternatives; | means βorβ; square brackets [...] are optional; curly braces {...} repeat; * is zero-or-more, + is one-or-more; angle brackets <...> mark positional args.
schematic =
( window
| panel
| object_3d
| line_3d
| vector_arrow
)*
window = "window"
[path|file|name=string]
[title=string]
[screen=int]
[rect x y w h]
panel =
viewport
| graph
| component_monitor
| action_pane
| query_table
| query_plot
| inspector
| hierarchy
| schematic_tree
| dashboard
| split
| tabs
split = ("hsplit" | "vsplit")
[active=bool]
[name=string]
{ panel [share=float] }+
tabs = "tabs" { panel }+
viewport = "viewport"
[fov=float]
[active=bool]
[show_grid=bool]
[hdr=bool]
[name=string]
[pos=eql]
[look_at=eql]
graph = "graph" eql
[name=string]
[type=line|point|bar]
[auto_y_range=bool]
[y_min=float]
[y_max=float]
{ color }*
component_monitor = "component_monitor"
[component_name=string]
action_pane = "action_pane"
<label>
[lua=string]
query_table = "query_table"
[query=string]
[type=eql|sql]
query_plot = "query_plot"
<label>
[query=string]
[refresh_interval=ms]
[auto_refresh=bool]
[color]
[type=eql|sql]
inspector = "inspector"
hierarchy = "hierarchy"
schematic_tree = "schematic_tree"
dashboard = "dashboard" { dashboard_node }+
object_3d = "object_3d"
<eql>
{ glb
| sphere
| box
| cylinder
| plane
| ellipsoid
}
line_3d = "line_3d"
<eql>
[line_width=float]
[color]
[perspective=bool]
vector_arrow = "vector_arrow"
<vector-eql>
[origin=eql]
[scale=float]
[normalize=bool]
[body_frame|in_body_frame=bool]
[color]
[name=string]
[display_name=bool]
[arrow_thickness=small|middle|big]
[label_position=0..1]
color = "color"
( r g b [a]
| name [alpha]
)
Examples
Minimal viewport + graph:
viewport name="Main"
fov=45.0
active=#true
show_grid=#true
pos="drone.world_pos"
look_at="(0, 0, 0)"
graph "drone.altitude"
name="Altitude"
auto_y_range=#true
Vector arrow with custom color and label:
vector_arrow
"drone.vel_x,drone.vel_y,drone.vel_z"
origin="drone.world_pos"
scale=1.5
name="Velocity"
normalize=#true
body_frame=#true
arrow_thickness="middle"
label_position=0.9 {
color 64 128 255
}