Getting started
A schematic is a list of parts and the connections between their pins.
Parts
Every component uses one form — part <ref> <kind> [value] [attrs] [{ pins }]:
part R1 res 10k
part C1 cap 100n
part U1 ic "NE555" pkg=DIP-8 { left 2:TRIG 6:THRES right 3:OUT top 8:VCC bottom 1:GND }res, cap, and friends draw iconic symbols with implicit pins 1 and 2. ic, connector, and mod are boxes whose pins you declare per side.
Connections
wire A.p -- B.q— a point-to-point connection (->is an equivalent alias).net name = A.p B.q C.r— a named net; 2 members route as a wire, 3+ become labels (as=wireforces routing).power NAME = …,gnd NAME = …,signal NAME = …— net symbols (rail flag, ground symbol, hollow-circle terminal). By default one symbol is stamped at each member pin; addroutableto draw a single symbol wired to all members.
part U1 ic "MCU" { left 1:IN right 2:OUT top 3:VCC bottom 4:GND }
part R1 res 220
part D1 led
wire U1.OUT -- R1.1
wire R1.2 -- D1.anode
signal TEST = U1.OUT
power VCC = U1.VCC
gnd GND = U1.GND D1.cathode routableMetadata
Attributes like pkg=, mpn=, footprint=, tol= are carried through untouched — they don't affect rendering but feed the netlist and BOM. link="uri" renders the ref as a hyperlink.
Layout hints
Layout is automatic; nudge it when needed:
place J1 right-of U1
near C1 U1.VCC
group "power supply" { U2 C3 C4 }
rotate Q1 90
mirror U3Reusable parts
Define a pinout once with def and instantiate it as many times as you like — the template name becomes the default label:
def NE555 ic pkg=DIP-8 {
left 2:TRIG 6:THRES 7:DISCH
right 3:OUT 4:~RESET
top 8:VCC
bottom 1:GND
}
part U1 NE555
part U2 NE555 pkg=SOIC-8Reuse across files
import pulls another file's declarations in; as puts them in a namespace (rails like power/gnd still merge with the parent). Given a psu.elmo:
part U1 ic "REG" { left 1:IN right 2:OUT bottom 3:GND }
gnd GND = U1.GNDanother file imports it and wires across the namespace:
import "psu.elmo" as psu
part U2 mod "ESP32-WROOM" { left 1:GND 2:3V3 }
wire psu.U1.OUT -- U2.3V3
gnd GND = psu.U1.GND U2.GNDSee How-to → split a design across files for resolvers.
Next: How-to for recipes, or the Language spec.