Skip to content

Symbol Editor

alpCaner edited this page Jul 16, 2026 · 1 revision

Symbol Editor

The Symbol Editor authors .snxsym files — Signex's native schematic symbol format. A single .snxsym is a container: it holds many symbols, each with its own UUID, pins, body geometry and metadata. That's Altium SchLib parity, not one-file-per-symbol.

Shipped through v0.13.0 (unified Active Bar, .snxsym TOML envelope) and extended in v0.14.0 with first-class multi-unit parts — per-unit pins and per-unit body geometry.

Opening a symbol

  • Double-click a .snxsym in the project tree (single click only highlights; a second click within 500 ms opens)
  • Right-click a .snxlib library node → Add New ▸ Symbol Library — mints a fresh .snxsym and opens it
  • Right-click a project root → Add New to Project ▸ Symbol Library
  • Open Symbol Editor on the Symbol pane of a Component Preview tab

A .snxsym opens as a normal tab, so it can be undocked into its own window like any other — see Multi-window Editing.

The tab

┌───────────────────────────────────────────────────────────────┐
│ [Fit]              [←] Part 1 / 2 [→]  [+] [−]      [Save *]  │ ← toolbar
├───────────────────────────────────────────────────────────────┤
│  ┌──────────────────────────────────────────────┐             │
│  │ [Filter▾][Snap▾][Place▾][Select▾][Align▾]    │  ← Active Bar
│  │ [Pin▾][Text▾][Shapes▾] ║ [Select] [Place Pin]│             │
│  └──────────────────────────────────────────────┘             │
│                                                               │
│                        canvas                                 │
│                                                               │
├───────────────────────────────────────────────────────────────┤
│ X: +2.540 mm  Y: -1.270 mm │ 100% │ 8 pins │ Tool: Select │…  │ ← status
└───────────────────────────────────────────────────────────────┘

Toolbar

Button Action
Fit Zoom to fit the symbol
/ Previous / next unit
Part n / m Active unit out of declared units
+ Add a unit
Remove the active unit
Save Save. Reads Save * while the file is dirty

Status bar

Cursor X / Y in the active measurement unit, zoom percent, pin count, active tool, and two buttons: Grid: ON / Grid: OFF toggles the grid, and the spacing button cycles 0.635 mm → 1.27 mm → 2.54 mm → 5.08 mm (25 / 50 / 100 / 200 mil).

The hint on the right changes with the selection — with something selected it reads "Del removes · drag to move · scroll zooms · right-drag pans · Home fits", otherwise "Ctrl+Z undo · Ctrl+Y redo · scroll zooms · right-drag pans · Home fits".

The Active Bar

The symbol editor uses the same floating Active Bar widget as the schematic editor — same root highlight, same dropdown panels, same chevron, same right-click behaviour. See Active Bar for the general pattern.

Eight chevron-bearing dropdown triggers sit at the front of the bar, then a separator, then two direct tool buttons:

Button Left-click Right-click
Selection Filter opens the menu opens the menu
Snap Options opens the menu opens the menu
Place / Move (stub) opens the menu
Select arms the Select tool opens the selection-mode menu
Align / Distribute (stub) opens the menu
Pin arms Place Pin opens the pin-variant menu
Text arms Place Text (String) opens the menu
Shapes opens the menu opens the menu
Select (after the separator) arms the Select tool
Place Pin (after the separator) arms Place Pin

Clicking anywhere outside an open dropdown dismisses it.

Be aware: a lot of the dropdown rows are placeholders. Signex ships the full Altium-shaped menu, and a row that isn't implemented logs a "coming soon" note and closes the menu rather than doing something surprising. What actually works today:

Menu Live rows Stub rows
Shapes Line, Arc, Ellipse / Circle, Rectangle Round Rectangle, Polygon, Bezier, Pie Chart, Elliptical Arc
Pin Place Pin Input / Output / Passive / Bidirectional / Power (set these on the pin after placing, from the Properties panel)
Text String Text Frame
Selection Filter the seven per-kind chips toggle the All On / All Off chip
Snap Options all four (Pin Tips, Line Endpoints, Arc Centres, Text Origins)
Place / Move all six
Align / Distribute all ten
Select all nine

The Selection Filter chips (Pins, Drawings, Texts, Designators, Values, Parameters, Other) toggle and redraw, but nothing reads them during hit-testing yet — they do not filter what you can select. Don't rely on them.

Drawing tools

Every shape tool is click-to-click; none of them need a drag. New geometry is scoped to the active unit.

Tool Gesture
Line Click the start point, click the end point
Rectangle Click one corner, click the opposite corner (either direction — corners are normalised)
Ellipse / Circle Click the centre, click a point on the radius
Arc Click the centre, click to set radius + start angle, click to set the end angle

A live preview tracks the cursor between clicks. Esc cancels an in-progress shape, and so does a right-click — right-clicking with a shape half-drawn cancels the shape instead of starting a pan.

Arcs handle sweeps past ±180° correctly: the end angle is tracked unwrapped as you move, so a wide arc is stored as you drew it rather than flipping to the short way round.

Rectangles and circles can take a solid fill — set it from the Properties panel; new shapes start unfilled.

Placing pins

Arm Place Pin (the Active Bar's Pin button, or the bar's trailing Place Pin button) and click. Each new pin gets:

  • the next free integer number (one above the highest numeric pin number, or 1 on an empty symbol)
  • the name PIN<n>
  • length 2.54 mm, orientation Right, direction Unspecified
  • the active unit as its part number

Everything after that is a Properties-panel edit — the placement tool deliberately doesn't ask you 12 questions up front.

Editing pins — the Properties panel

Select a pin and the right-edge Properties Panel shows its full field set:

Field Notes
Designator the pin number — the key that binds to a footprint pad
Name the label drawn beside the pin
Electrical Input, I/O, Output, Open Collector, Passive, HiZ, Open Emitter, Power, Not Connected, Unspecified
X / Y the tip position in mm
Orientation Right, Up, Left, Down
Length the drawn stub length (2.54 mm on a new pin)
Part Number which unit the pin belongs to (0 = shared)
Description free text stored on the pin
Function alternate names for multi-function pins, comma-separated (MOSI, PA7)
Designator visible / Name visible the Altium "eye" toggles
Hidden (Pin Hide) stored on the pin — see the note below
Locked stored on the pin — see the note below

Be aware: Hidden and Locked toggle and persist to the file, but nothing acts on them yet — a hidden pin is still drawn on the canvas, and a locked pin can still be dragged and deleted. Treat them as metadata you're recording for later, not as protection.

Under Symbols, four IEEE glyph slots — Inside, Inside Edge, Outside Edge, Outside — each take one of: None, Dot (active-low bubble), Clock edge, Active-low input, Active-low output, Schmitt trigger, Analog (≈), Digital (square wave), Shift-right (▷), Shift-left (◁), Pi (π), Sigma (Σ), Open collector, Open emitter, Hi-Z (tri-state). The inverted-pin dot conventionally goes in Outside Edge.

With nothing selected, the panel shows the symbol itself, in three sections:

  • SymbolDesign Item ID (editable name), plus read-only UUID, Pins count, Graphics count, and Part (reads Part 1 / of Parts 2, or Single-part).
  • Graphical — a Mirrored toggle.
  • Local Colors — per-symbol overrides for Fills, Lines and Pins; cleared, they inherit the theme.

This is deliberately visual and geometric only. Component metadata — designator, comment, description, component type, parameters — lives on the component row in the library, not on the symbol, so it's edited from the Library Browser and the Component Preview tab.

Selection and movement

  • Click a pin or a graphic to select it. Clicking a graphic selects only that graphic.
  • Drag on empty space for an AutoCAD-style rubber-band box select. The drag direction picks the mode: drag left → right for a window box (items must be fully inside), or right → left for a crossing box (anything the box touches is caught). If the box catches every item visible on the active unit, the selection promotes to select-all.
  • Ctrl+A selects the whole symbol.
  • Clicking an item that's already part of a multi-selection drags the whole group.
  • Rectangles show corner and edge handles — drag to resize, with the cursor switching to the matching resize hint. Lines, arcs, circles and text anchors have grab handles too.
  • Hit-testing uses the raw cursor position, not the snapped one, so an object sitting off-grid is still clickable. Placement tools snap.

Two behaviours are worth knowing before they surprise you:

  • Delete does nothing while select-all is active. That's a deliberate guard against wiping a symbol with one keystroke. Delete a box-selection or an individual item instead.
  • Dragging with select-all active moves every pin and graphic in the active symbol — including the units you aren't looking at. (Other symbols in the same .snxsym are untouched.) Box-select the active unit's items if you only want to move those.

By default only a pin's body/tip is grabbable. Tools ▸ Preferences… ▸ Appearance ▸ Pin Selection switches this to Text and pin, which makes the name/number labels grabbable too and glows them with the selected pin. Default is Pin only (Altium parity).

Keyboard and mouse

Read out of the canvas input handler — these are the bindings that actually fire:

Key Action
Esc Cancel the in-progress shape
Delete / Backspace Delete the selection (no-op under select-all)
Home Fit the view
Ctrl+A Select all
Space Rotate the selected item clockwise
Shift+Space Rotate counter-clockwise
Alt+Space Rotate a graphic about its own geometry centre instead of the symbol origin
Ctrl+Z Undo
Ctrl+Y / Ctrl+Shift+Z Redo

Rotation acts on one selected pin or graphic. A rotated pin pivots its tip around the body end, so the point where the pin meets the body stays put, and its orientation steps round with it. Rotating a multi-selection or a select-all is not implemented — the keystroke is ignored.

Mouse Action
Left click Place / select, per the armed tool
Left drag Move the selection, or rubber-band select from empty space
Right drag Pan
Right click Cancel an in-progress shape (otherwise starts a pan)
Scroll Zoom at the cursor

Keyboard shortcuts are configurable — Tools ▸ Preferences… ▸ Keyboard Shortcuts (v0.14). See Keyboard Shortcuts.

Multi-unit parts

A multi-unit symbol is one component drawn as several sub-parts — the four gates of a 74HC00, the two halves of a dual op-amp. Signex models this the way Altium does, and as of v0.14 it is first-class on both pins and body geometry.

Unit scoping. Every pin and every graphic carries a part number:

  • 0 — Part Zero. Shared: drawn and editable on every unit. This is where power and ground pins usually go.
  • 1..=N. Scoped to that one unit.

Drawing, rendering and hit-testing are all scoped to the active unit, so editing Part 2 can't disturb Part 1's body. New pins and new shapes take the active unit automatically. Box-select only catches what's visible on the active unit. (The one exception is a Ctrl+A select-all, which spans every unit of the symbol — see Selection and movement.)

Legacy files whose geometry predates unit scoping load with part number 0 and keep drawing on every unit — exactly as they did before.

Navigating. The toolbar's / Part n / m / navigator switches units. Switching drops the current selection so a stale index can't act (via Delete or Space) on geometry that just went hidden.

The SCH Library panel expands the active multi-unit symbol into one clickable row per unit — Part 0 (shared) when the symbol has Part Zero pins, then Part 1Part N.

Adding. + on the toolbar, or Tools ▸ New Part. The new unit becomes active immediately. The declared unit count is stored in the file, so an empty new unit survives navigate-and-save — it isn't inferred from whether any pin happens to claim it.

Removing. on the toolbar, or Tools ▸ Remove Part. Removing a unit drops its pins and its graphics, renumbers every higher unit down by one, and decrements the declared count.

Remove only acts on Part 2 or higher. Part 0 (shared) and Part 1 are never removed, and neither is the last remaining unit — with Part 1 active the button silently does nothing rather than leave you with a symbol that has no units. To drop a unit, navigate to it first.

Both are undoable.

The .snxsym format

A .snxsym is a TOML envelope with TSV bulk blocks — the same shape as .snxsch / .snxpcb / .snxlib:

format = "snxsym/v1"
file_uuid = "018f2c3a-…"
display_name = "Analog"

[[symbols]]
uuid = "018f2c3b-…"
name = "OPAMP-DUAL-8"
designator = "U?"
comment = "*"
part_count = 2
version = "0.0.1"
released = false
pins_tsv = '''
number	name	electrical	pos_x	pos_y	orientation	length	…	part_number
1	OUT1	Output	5.08	2.54	Right	2.54	…	1
2	IN1-	Input	-5.08	1.27	Left	2.54	…	1
'''

The pin table is TSV so it diffs line-by-line in git and opens in a spreadsheet. Graphics, parameter maps and per-symbol metadata stay inline TOML — they're variant-shaped or sparse, and TSV would only make them worse.

The format token is snxsym/v1. Adding or reordering a pin column is a wire-format break and bumps it.

Every symbol carries its own semver version and a released flag, stored per-symbol and independent of any component row that binds it. Neither field is edited from the symbol canvas today — the editor's Save writes the file as-is and does not bump the version for you.

The parser checks the format token and refuses anything it doesn't recognise rather than half-reading it. Pre-envelope JSON .snxsym files from early builds do not load in v0.14 — the reader is TOML-only.

Limitations

Known gaps as of v0.14.0:

  • A symbol you author cannot yet be placed on a schematic. The conversion from a .snxsym symbol to the schematic's placed-symbol representation does not exist — issue #365 and issue #364. This is the single biggest gap in the symbol workflow: you can draw the symbol, bind it to a component row, and preview it, but not place it. Per-unit bodies are affected by the same gap.
  • Most Active Bar dropdown rows are stubs — see the table above. Place / Move, Align / Distribute, Select-mode and Snap menus are entirely placeholder today.
  • The Selection Filter chips don't filter anything. They toggle, but hit-testing ignores them.
  • A pin's Hidden and Locked flags aren't enforced — they persist to the file, but the canvas draws hidden pins and moves locked ones.
  • The SCH Library panel's Place and Edit buttons are greyed stubs.
  • Polygon, Bezier, Round Rectangle, Pie Chart and Elliptical Arc are not implemented — Line / Arc / Ellipse / Rectangle are the shape set.
  • Rotation is single-item only and Delete is disabled under select-all (see above).
  • The designator / value field drags on canvas are no-ops — those fields belong to the component row, not the symbol.

See also

Clone this wiki locally