sverchok-syntax-sockets
Quick Reference
All 16 Socket Types
| Socket Class |
Color (RGBA) |
Data Type |
nesting_level |
SNLite |
SvStringsSocket |
(0.6, 1.0, 0.6, 1.0) |
int, float, generic lists |
2 |
s |
SvVerticesSocket |
(0.9, 0.6, 0.2, 1.0) |
3D coordinates (x,y,z) |
3 |
v |
SvMatrixSocket |
(0.2, 0.8, 0.8, 1.0) |
4x4 mathutils.Matrix |
1 |
m |
SvQuaternionSocket |
(0.9, 0.4, 0.7, 1.0) |
mathutils.Quaternion |
2 |
— |
SvColorSocket |
(0.9, 0.8, 0.0, 1.0) |
RGBA tuples (r,g,b,a) |
3 |
— |
SvCurveSocket |
(0.5, 0.6, 1.0, 1.0) |
SvCurve instances |
2 |
C |
SvSurfaceSocket |
(0.4, 0.2, 1.0, 1.0) |
SvSurface instances |
2 |
S |
SvSolidSocket |
(0.0, 0.65, 0.3, 1.0) |
Part.Shape (FreeCAD) |
2 |
So |
SvScalarFieldSocket |
(0.9, 0.4, 0.1, 1.0) |
SvScalarField instances |
2 |
SF |
SvVectorFieldSocket |
(0.1, 0.1, 0.9, 1.0) |
SvVectorField instances |
2 |
VF |
SvDictionarySocket |
(1.0, 1.0, 1.0, 1.0) |
Python dict objects |
2 |
D |
SvObjectSocket |
(0.69, 0.74, 0.73, 1.0) |
Blender bpy.types.Object |
2 |
o |
SvFilePathSocket |
(0.9, 0.9, 0.3, 1.0) |
File path strings |
2 |
FP |
SvTextSocket |
(0.68, 0.85, 0.90, 1.0) |
Text strings |
2 |
— |
SvDummySocket |
(0.8, 0.8, 0.8, 0.3) |
Type placeholder only |
2 |
— |
SvChameleonSocket |
dynamic |
Adopts linked socket type |
dynamic |
— |
Critical Warnings
NEVER connect mismatched socket types without understanding the implicit conversion policy — silent data transformations can corrupt geometry.
NEVER use SvStringsSocket for structured geometry objects (curves, surfaces, fields) — the data will pass through but lose type safety and trigger silent conversion failures downstream.
ALWAYS use sv_get(default=[[]]) with a default value on input sockets to avoid SvNoDataError when the socket is unconnected.
ALWAYS call sv_forget() before replace_socket() to clear stale cached data — the old socket_id becomes invalid after replacement.
NEVER read socket.other on an output socket with multiple connections — it returns one arbitrary linked socket, not all of them.
Decision Trees
Choosing the Right Socket Type
What data do you need to transport?
Numbers, booleans, or generic Python objects?
└── SvStringsSocket (green)
3D point coordinates?
└── SvVerticesSocket (orange)
4x4 transformation matrix?
└── SvMatrixSocket (teal)
Rotation only (no translation/scale)?
└── SvQuaternionSocket (pink)
RGBA color values?
└── SvColorSocket (yellow)
Parametric curve object (maps t -> point)?
└── SvCurveSocket (blue)
Parametric surface object (maps u,v -> point)?
└── SvSurfaceSocket (deep purple)
CAD solid (requires FreeCAD/OpenCascade)?
└── SvSolidSocket (green)
Scalar field (maps R³ -> R)?
└── SvScalarFieldSocket (dark orange)
Vector field (maps R³ -> R³)?
└── SvVectorFieldSocket (deep blue)
Python dict / key-value data?
└── SvDictionarySocket (white)
Blender scene object reference?
└── SvObjectSocket (grey-green)
File system path?
└── SvFilePathSocket (yellow-green)
Raw text string?
└── SvTextSocket (light blue)
Placeholder for dynamic socket (not yet typed)?
└── SvDummySocket (grey, semi-transparent)
Socket that should mirror the connected socket type?
└── SvChameleonSocket (dynamic color)
Debugging Socket Compatibility Errors
Connection refused or TypeError on sv_get?
Are socket colors the same?
├── Yes → socket types match, error is in data structure
└── No → implicit conversion will be attempted
Check the to_socket's default_conversion_name:
├── 'DefaultImplicitConversionPolicy'
│ └── See DefaultImplicitConversionPolicy conversion table
├── 'FieldImplicitConversionPolicy'
│ └── Matrices/vertices/strings auto-convert to fields
├── 'LenientImplicitConversionPolicy'
│ └── Any data passes through unchanged
├── 'SolidImplicitConversionPolicy'
│ └── Attempts to_solid_recursive(); raises on failure
└── None / no policy
└── Connection is blocked — ImplicitConversionProhibited raised
Is from_socket a lenient type?
├── SvStringsSocket, SvObjectSocket, SvColorSocket, SvVerticesSocket → YES, data passes
└── Otherwise → conversion policy decides
Essential Patterns
Pattern 1: Read and Write Socket Data in process()
# Sverchok v1.4.0+: inside a custom node's process() method
def process(self):
# Read input — ALWAYS provide default to handle unconnected socket
verts_in = self.inputs['Vertices'].sv_get(default=[[]])
# deepcopy=False safe ONLY if you will NOT mutate the list
numbers_in = self.inputs['Count'].sv_get(default=[[1]], deepcopy=False)
# ... compute result ...
# Write output — data MUST match nesting_level of socket
# SvVerticesSocket nesting_level=3: [[(x,y,z), ...], ...]
self.outputs['Vertices'].sv_set([[(0.0, 0.0, 0.0)]])
# SvStringsSocket nesting_level=2: [[val, val, ...], ...]
self.outputs['Count'].sv_set([[1, 2, 3]])
# SvMatrixSocket nesting_level=1: [Matrix, Matrix, ...]
import mathutils
self.outputs['Matrix'].sv_set([mathutils.Matrix.Identity(4)])
Pattern 2: Replace a Socket Type at Runtime
# Sverchok v1.4.0+: inside sv_update() or sv_init()
def sv_update(self):
# ALWAYS call sv_forget() before replace_socket()
old_socket = self.inputs.get('Data')
if old_socket is not None:
old_socket.sv_forget()
new_socket = old_socket.replace_socket('SvCurveSocket', 'Curve')
# new_socket is the replacement; old_socket reference is now invalid
Pattern 3: Access socket_id and other
# Sverchok v1.4.0+
import bpy
tree = bpy.data.node_groups["MyTree"]
node = tree.nodes["MyNode"]
sock = node.inputs['Vertices']
# socket_id: unique string key for the data cache
cache_key = sock.socket_id
# Returns: str (hash of node_id + identifier + direction)
# other: the socket on the far end of the link
if sock.is_linked:
upstream = sock.other
# For INPUT sockets: returns the single connected output socket
# For OUTPUT sockets: returns ONE of the connected input sockets (arbitrary)
print(upstream.node.name, upstream.name)
Pattern 4: Set Socket Processing Flags
# Sverchok v1.4.0+: define allowed flags in sv_init()
def sv_init(self, context):
sock = self.inputs.new('SvVerticesSocket', 'Vertices')
# Enable which processing flags the user can toggle in the UI
sock.allow_flatten = True
sock.allow_graft = True
sock.allow_wrap = True
sock.allow_unwrap = True
sock.allow_simplify = True
# The actual use_* flags are set by the user in the socket UI
# Processing flag *behavior* is handled by the sv_get() pipeline
# See: sverchok-syntax-data for how flags transform data
Pattern 5: Implicit Conversion: Field Sockets
# Sverchok v1.4.0+: SvScalarFieldSocket and SvVectorFieldSocket
# use FieldImplicitConversionPolicy automatically
# When a SvStringsSocket (numbers) is connected to SvScalarFieldSocket:
# → numbers are wrapped in SvConstantScalarField automatically
# When a SvVerticesSocket is connected to SvVectorFieldSocket:
# → vectors are wrapped in SvConstantVectorField automatically
# When a SvMatrixSocket is connected to SvVectorFieldSocket:
# → matrix creates SvMatrixVectorField automatically
# This means: nodes producing numbers/vectors can feed field-consuming nodes
# without explicit conversion nodes in the node tree.
# Reading field data in process():
def process(self):
from sverchok.utils.field.scalar import SvScalarField
fields = self.inputs['Field'].sv_get()
# fields is [[SvScalarField, ...], ...]
for field in fields[0]:
point_value = field.evaluate(0.0, 0.0, 0.0) # Returns float
Socket Properties Reference
SvSocketCommon Properties
| Property |
Type |
Default |
Purpose |
color |
tuple |
class-defined |
RGBA display color in node editor |
label |
StringProperty |
'' |
Override display name in UI |
use_prop |
BoolProperty |
False |
Show embedded property widget |
prop_name |
StringProperty |
'' |
Node attribute to display as property |
objects_number |
IntProperty |
0 |
Count of data objects (informational) |
is_mandatory |
BoolProperty |
False |
Block node execution if unconnected |
nesting_level |
IntProperty |
2 |
Expected list nesting depth |
default_mode |
EnumProperty |
'EMPTY_LIST' |
Fallback when no data: NONE / EMPTY_LIST / MATRIX / MASK |
pre_processing |
EnumProperty |
'NONE' |
Pre-processing: NONE / ONE_ITEM |
quick_link_to_node |
str |
class-defined |
Node bl_idname shown in quick-link button |
default_conversion_name |
str |
class-defined |
Conversion policy class name |
SvSocketProcessing Flags
| Flag Property |
Enable Property |
Default |
Effect |
allow_flatten |
use_flatten |
False |
Flattens nested list to single level |
allow_flatten_topology |
use_flatten_topology |
False |
Flattens preserving topology structure |
allow_simplify |
use_simplify |
False |
Removes redundant outer nesting |
allow_graft |
use_graft |
False |
Adds a nesting level |
allow_unwrap |
use_unwrap |
False |
Removes one nesting level |
allow_wrap |
use_wrap |
False |
Adds one nesting level |
Note: allow_* properties control whether the flag is visible in the UI. use_* properties are the actual state set by the user. Processing flag behavior (how data is transformed) is documented in sverchok-syntax-data.
quick_link_to_node Values
| Socket |
quick_link_to_node |
SvMatrixSocket |
'SvMatrixInNodeMK4' |
SvVerticesSocket |
'GenVectorsNode' |
SvFilePathSocket |
'SvFilePathNode' |
SvDictionarySocket |
'SvDictionaryIn' |
SvScalarFieldSocket |
'SvNumberNode' |
SvVectorFieldSocket |
'GenVectorsNode' |
SvLoopControlSocket |
'SvLoopInNode' |
Implicit Conversion Policies
DefaultImplicitConversionPolicy: Explicit Conversions
| From |
To |
Conversion Applied |
SvVerticesSocket |
SvMatrixSocket |
Creates translation matrices from vertices |
SvVerticesSocket |
SvColorSocket |
Appends alpha=1.0: (x,y,z) → (x,y,z,1) |
SvMatrixSocket |
SvVerticesSocket |
Extracts translation column |
SvMatrixSocket |
SvQuaternionSocket |
mat.to_quaternion() |
SvQuaternionSocket |
SvMatrixSocket |
quat.to_matrix().to_4x4() |
SvStringsSocket |
SvVerticesSocket |
Number v → vector (v, 0, 0) |
SvStringsSocket |
SvColorSocket |
Number v → color (v, v, v, 1) |
Lenient socket types accept data from any socket without conversion:
lenient_socket_types = {
'SvStringsSocket', 'SvObjectSocket', 'SvColorSocket', 'SvVerticesSocket',
}
FieldImplicitConversionPolicy: Additional Field Conversions
Used by SvScalarFieldSocket and SvVectorFieldSocket.
| From |
To |
Conversion Applied |
SvStringsSocket |
SvScalarFieldSocket |
Numbers → SvConstantScalarField |
SvVerticesSocket |
SvVectorFieldSocket |
Vertices → SvConstantVectorField |
SvMatrixSocket |
SvVectorFieldSocket |
Matrix → SvMatrixVectorField |
Falls through to DefaultImplicitConversionPolicy for all other type pairs.
Policy Assignment Per Socket
# Sverchok v1.4.0+: source: core/sockets.py
class SvVerticesSocket:
default_conversion_name = ConversionPolicies.DEFAULT.conversion_name
# → 'DefaultImplicitConversionPolicy'
class SvScalarFieldSocket:
default_conversion_name = ConversionPolicies.FIELD.conversion_name
# → 'FieldImplicitConversionPolicy'
class SvVectorFieldSocket:
default_conversion_name = ConversionPolicies.FIELD.conversion_name
# → 'FieldImplicitConversionPolicy'
class SvTextSocket:
default_conversion_name = ConversionPolicies.LENIENT.conversion_name
# → 'LenientImplicitConversionPolicy'
class SvSolidSocket:
default_conversion_name = ConversionPolicies.SOLID.conversion_name
# → 'SolidImplicitConversionPolicy'
Advanced Data Types
SvCurve
Abstract base class from sverchok/utils/curve/__init__.py. Maps parameter t ∈ [t_min, t_max] to a 3D point. Not necessarily arc-length parametrized.
curve.get_u_bounds() → (t_min, t_max)
curve.evaluate(t) → numpy.ndarray shape (3,)
curve.evaluate_array(ts) → numpy.ndarray shape (N, 3)
SvSurface
Abstract base class from sverchok/utils/surface/__init__.py. Maps (u, v) to 3D points.
surface.get_u_min(), surface.get_u_max()
surface.get_v_min(), surface.get_v_max()
surface.evaluate(u, v) → numpy.ndarray shape (3,)
surface.evaluate_array(us, vs) → numpy.ndarray shape (N, 3)
SvScalarField
From sverchok/utils/field/scalar.py. Maps R³ → R.
field.evaluate(x, y, z) → float
field.evaluate_grid(xs, ys, zs) → numpy.ndarray
- Supports: addition, multiplication, composition, gradient
SvVectorField
From sverchok/utils/field/vector.py. Maps R³ → R³.
field.evaluate(x, y, z) → tuple(dx, dy, dz)
field.evaluate_grid(xs, ys, zs) → three numpy.ndarray (dxs, dys, dzs)
- Two interpretations: relative (P + field(P)) or absolute (field(P))
Part.Shape (Solids)
FreeCAD/OpenCascade BRep objects. Requires FreeCAD installed alongside Blender. Transported by SvSolidSocket. SolidImplicitConversionPolicy attempts to_solid_recursive() on connected data.
dict (Dictionaries)
Python dict objects in SvDictionarySocket. Use unzip_dict_recursive(data) from sverchok.utils.dictionary to convert nested list-of-dicts to dict-of-nested-lists.
Reference Links
- references/methods.md — Complete API signatures: SvSocketCommon, SvSocketProcessing, ConversionPolicies, replace_socket, socket_id, other
- references/examples.md — Working code examples: custom socket types, field conversions, dynamic socket replacement
- references/anti-patterns.md — What NOT to do with sockets, with WHY explanations
Official Sources
1---2name: sverchok-syntax-sockets3description: Use when connecting Sverchok nodes, debugging socket compatibility errors, or choosing the right socket type. Prevents the common mistake of connecting incompatible socket types without understanding implicit conversions. Covers all 16 socket types (vertices, strings, matrices, curves, surfaces, fields), socket properties, and type conversion rules. Keywords: socket type, SvVerticesSocket, SvStringsSocket, SvMatrixSocket, socket conversion, compatible sockets, data processing flags, Sverchok sockets, connect different types, socket color meaning.4license: MIT5---67# sverchok-syntax-sockets89## Quick Reference1011### All 16 Socket Types1213| Socket Class | Color (RGBA) | Data Type | `nesting_level` | SNLite |14|---|---|---|---|---|15| `SvStringsSocket` | `(0.6, 1.0, 0.6, 1.0)` | int, float, generic lists | 2 | `s` |16| `SvVerticesSocket` | `(0.9, 0.6, 0.2, 1.0)` | 3D coordinates `(x,y,z)` | 3 | `v` |17| `SvMatrixSocket` | `(0.2, 0.8, 0.8, 1.0)` | 4x4 `mathutils.Matrix` | 1 | `m` |18| `SvQuaternionSocket` | `(0.9, 0.4, 0.7, 1.0)` | `mathutils.Quaternion` | 2 | — |19| `SvColorSocket` | `(0.9, 0.8, 0.0, 1.0)` | RGBA tuples `(r,g,b,a)` | 3 | — |20| `SvCurveSocket` | `(0.5, 0.6, 1.0, 1.0)` | `SvCurve` instances | 2 | `C` |21| `SvSurfaceSocket` | `(0.4, 0.2, 1.0, 1.0)` | `SvSurface` instances | 2 | `S` |22| `SvSolidSocket` | `(0.0, 0.65, 0.3, 1.0)` | `Part.Shape` (FreeCAD) | 2 | `So` |23| `SvScalarFieldSocket` | `(0.9, 0.4, 0.1, 1.0)` | `SvScalarField` instances | 2 | `SF` |24| `SvVectorFieldSocket` | `(0.1, 0.1, 0.9, 1.0)` | `SvVectorField` instances | 2 | `VF` |25| `SvDictionarySocket` | `(1.0, 1.0, 1.0, 1.0)` | Python `dict` objects | 2 | `D` |26| `SvObjectSocket` | `(0.69, 0.74, 0.73, 1.0)` | Blender `bpy.types.Object` | 2 | `o` |27| `SvFilePathSocket` | `(0.9, 0.9, 0.3, 1.0)` | File path strings | 2 | `FP` |28| `SvTextSocket` | `(0.68, 0.85, 0.90, 1.0)` | Text strings | 2 | — |29| `SvDummySocket` | `(0.8, 0.8, 0.8, 0.3)` | Type placeholder only | 2 | — |30| `SvChameleonSocket` | dynamic | Adopts linked socket type | dynamic | — |3132### Critical Warnings3334**NEVER** connect mismatched socket types without understanding the implicit conversion policy — silent data transformations can corrupt geometry.3536**NEVER** use `SvStringsSocket` for structured geometry objects (curves, surfaces, fields) — the data will pass through but lose type safety and trigger silent conversion failures downstream.3738**ALWAYS** use `sv_get(default=[[]])` with a default value on input sockets to avoid `SvNoDataError` when the socket is unconnected.3940**ALWAYS** call `sv_forget()` before `replace_socket()` to clear stale cached data — the old socket_id becomes invalid after replacement.4142**NEVER** read `socket.other` on an output socket with multiple connections — it returns one arbitrary linked socket, not all of them.4344---4546## Decision Trees4748### Choosing the Right Socket Type4950```51What data do you need to transport?5253Numbers, booleans, or generic Python objects?54└── SvStringsSocket (green)55563D point coordinates?57└── SvVerticesSocket (orange)58594x4 transformation matrix?60└── SvMatrixSocket (teal)6162Rotation only (no translation/scale)?63└── SvQuaternionSocket (pink)6465RGBA color values?66└── SvColorSocket (yellow)6768Parametric curve object (maps t -> point)?69└── SvCurveSocket (blue)7071Parametric surface object (maps u,v -> point)?72└── SvSurfaceSocket (deep purple)7374CAD solid (requires FreeCAD/OpenCascade)?75└── SvSolidSocket (green)7677Scalar field (maps R³ -> R)?78└── SvScalarFieldSocket (dark orange)7980Vector field (maps R³ -> R³)?81└── SvVectorFieldSocket (deep blue)8283Python dict / key-value data?84└── SvDictionarySocket (white)8586Blender scene object reference?87└── SvObjectSocket (grey-green)8889File system path?90└── SvFilePathSocket (yellow-green)9192Raw text string?93└── SvTextSocket (light blue)9495Placeholder for dynamic socket (not yet typed)?96└── SvDummySocket (grey, semi-transparent)9798Socket that should mirror the connected socket type?99└── SvChameleonSocket (dynamic color)100```101102### Debugging Socket Compatibility Errors103104```105Connection refused or TypeError on sv_get?106107Are socket colors the same?108├── Yes → socket types match, error is in data structure109└── No → implicit conversion will be attempted110111Check the to_socket's default_conversion_name:112├── 'DefaultImplicitConversionPolicy'113│ └── See DefaultImplicitConversionPolicy conversion table114├── 'FieldImplicitConversionPolicy'115│ └── Matrices/vertices/strings auto-convert to fields116├── 'LenientImplicitConversionPolicy'117│ └── Any data passes through unchanged118├── 'SolidImplicitConversionPolicy'119│ └── Attempts to_solid_recursive(); raises on failure120└── None / no policy121 └── Connection is blocked — ImplicitConversionProhibited raised122123Is from_socket a lenient type?124├── SvStringsSocket, SvObjectSocket, SvColorSocket, SvVerticesSocket → YES, data passes125└── Otherwise → conversion policy decides126```127128---129130## Essential Patterns131132### Pattern 1: Read and Write Socket Data in process()133134```python135# Sverchok v1.4.0+: inside a custom node's process() method136def process(self):137 # Read input — ALWAYS provide default to handle unconnected socket138 verts_in = self.inputs['Vertices'].sv_get(default=[[]])139 # deepcopy=False safe ONLY if you will NOT mutate the list140 numbers_in = self.inputs['Count'].sv_get(default=[[1]], deepcopy=False)141142 # ... compute result ...143144 # Write output — data MUST match nesting_level of socket145 # SvVerticesSocket nesting_level=3: [[(x,y,z), ...], ...]146 self.outputs['Vertices'].sv_set([[(0.0, 0.0, 0.0)]])147 # SvStringsSocket nesting_level=2: [[val, val, ...], ...]148 self.outputs['Count'].sv_set([[1, 2, 3]])149 # SvMatrixSocket nesting_level=1: [Matrix, Matrix, ...]150 import mathutils151 self.outputs['Matrix'].sv_set([mathutils.Matrix.Identity(4)])152```153154### Pattern 2: Replace a Socket Type at Runtime155156```python157# Sverchok v1.4.0+: inside sv_update() or sv_init()158def sv_update(self):159 # ALWAYS call sv_forget() before replace_socket()160 old_socket = self.inputs.get('Data')161 if old_socket is not None:162 old_socket.sv_forget()163 new_socket = old_socket.replace_socket('SvCurveSocket', 'Curve')164 # new_socket is the replacement; old_socket reference is now invalid165```166167### Pattern 3: Access socket_id and other168169```python170# Sverchok v1.4.0+171import bpy172173tree = bpy.data.node_groups["MyTree"]174node = tree.nodes["MyNode"]175176sock = node.inputs['Vertices']177178# socket_id: unique string key for the data cache179cache_key = sock.socket_id180# Returns: str (hash of node_id + identifier + direction)181182# other: the socket on the far end of the link183if sock.is_linked:184 upstream = sock.other185 # For INPUT sockets: returns the single connected output socket186 # For OUTPUT sockets: returns ONE of the connected input sockets (arbitrary)187 print(upstream.node.name, upstream.name)188```189190### Pattern 4: Set Socket Processing Flags191192```python193# Sverchok v1.4.0+: define allowed flags in sv_init()194def sv_init(self, context):195 sock = self.inputs.new('SvVerticesSocket', 'Vertices')196 # Enable which processing flags the user can toggle in the UI197 sock.allow_flatten = True198 sock.allow_graft = True199 sock.allow_wrap = True200 sock.allow_unwrap = True201 sock.allow_simplify = True202 # The actual use_* flags are set by the user in the socket UI203 # Processing flag *behavior* is handled by the sv_get() pipeline204 # See: sverchok-syntax-data for how flags transform data205```206207### Pattern 5: Implicit Conversion: Field Sockets208209```python210# Sverchok v1.4.0+: SvScalarFieldSocket and SvVectorFieldSocket211# use FieldImplicitConversionPolicy automatically212213# When a SvStringsSocket (numbers) is connected to SvScalarFieldSocket:214# → numbers are wrapped in SvConstantScalarField automatically215# When a SvVerticesSocket is connected to SvVectorFieldSocket:216# → vectors are wrapped in SvConstantVectorField automatically217# When a SvMatrixSocket is connected to SvVectorFieldSocket:218# → matrix creates SvMatrixVectorField automatically219220# This means: nodes producing numbers/vectors can feed field-consuming nodes221# without explicit conversion nodes in the node tree.222223# Reading field data in process():224def process(self):225 from sverchok.utils.field.scalar import SvScalarField226 fields = self.inputs['Field'].sv_get()227 # fields is [[SvScalarField, ...], ...]228 for field in fields[0]:229 point_value = field.evaluate(0.0, 0.0, 0.0) # Returns float230```231232---233234## Socket Properties Reference235236### SvSocketCommon Properties237238| Property | Type | Default | Purpose |239|---|---|---|---|240| `color` | `tuple` | class-defined | RGBA display color in node editor |241| `label` | `StringProperty` | `''` | Override display name in UI |242| `use_prop` | `BoolProperty` | `False` | Show embedded property widget |243| `prop_name` | `StringProperty` | `''` | Node attribute to display as property |244| `objects_number` | `IntProperty` | `0` | Count of data objects (informational) |245| `is_mandatory` | `BoolProperty` | `False` | Block node execution if unconnected |246| `nesting_level` | `IntProperty` | `2` | Expected list nesting depth |247| `default_mode` | `EnumProperty` | `'EMPTY_LIST'` | Fallback when no data: NONE / EMPTY_LIST / MATRIX / MASK |248| `pre_processing` | `EnumProperty` | `'NONE'` | Pre-processing: NONE / ONE_ITEM |249| `quick_link_to_node` | `str` | class-defined | Node bl_idname shown in quick-link button |250| `default_conversion_name` | `str` | class-defined | Conversion policy class name |251252### SvSocketProcessing Flags253254| Flag Property | Enable Property | Default | Effect |255|---|---|---|---|256| `allow_flatten` | `use_flatten` | `False` | Flattens nested list to single level |257| `allow_flatten_topology` | `use_flatten_topology` | `False` | Flattens preserving topology structure |258| `allow_simplify` | `use_simplify` | `False` | Removes redundant outer nesting |259| `allow_graft` | `use_graft` | `False` | Adds a nesting level |260| `allow_unwrap` | `use_unwrap` | `False` | Removes one nesting level |261| `allow_wrap` | `use_wrap` | `False` | Adds one nesting level |262263**Note:** `allow_*` properties control whether the flag is visible in the UI. `use_*` properties are the actual state set by the user. Processing flag behavior (how data is transformed) is documented in `sverchok-syntax-data`.264265### quick_link_to_node Values266267| Socket | quick_link_to_node |268|---|---|269| `SvMatrixSocket` | `'SvMatrixInNodeMK4'` |270| `SvVerticesSocket` | `'GenVectorsNode'` |271| `SvFilePathSocket` | `'SvFilePathNode'` |272| `SvDictionarySocket` | `'SvDictionaryIn'` |273| `SvScalarFieldSocket` | `'SvNumberNode'` |274| `SvVectorFieldSocket` | `'GenVectorsNode'` |275| `SvLoopControlSocket` | `'SvLoopInNode'` |276277---278279## Implicit Conversion Policies280281### DefaultImplicitConversionPolicy: Explicit Conversions282283| From | To | Conversion Applied |284|---|---|---|285| `SvVerticesSocket` | `SvMatrixSocket` | Creates translation matrices from vertices |286| `SvVerticesSocket` | `SvColorSocket` | Appends alpha=1.0: `(x,y,z)` → `(x,y,z,1)` |287| `SvMatrixSocket` | `SvVerticesSocket` | Extracts translation column |288| `SvMatrixSocket` | `SvQuaternionSocket` | `mat.to_quaternion()` |289| `SvQuaternionSocket` | `SvMatrixSocket` | `quat.to_matrix().to_4x4()` |290| `SvStringsSocket` | `SvVerticesSocket` | Number `v` → vector `(v, 0, 0)` |291| `SvStringsSocket` | `SvColorSocket` | Number `v` → color `(v, v, v, 1)` |292293Lenient socket types accept data from any socket without conversion:294```python295lenient_socket_types = {296 'SvStringsSocket', 'SvObjectSocket', 'SvColorSocket', 'SvVerticesSocket',297}298```299300### FieldImplicitConversionPolicy: Additional Field Conversions301302Used by `SvScalarFieldSocket` and `SvVectorFieldSocket`.303304| From | To | Conversion Applied |305|---|---|---|306| `SvStringsSocket` | `SvScalarFieldSocket` | Numbers → `SvConstantScalarField` |307| `SvVerticesSocket` | `SvVectorFieldSocket` | Vertices → `SvConstantVectorField` |308| `SvMatrixSocket` | `SvVectorFieldSocket` | Matrix → `SvMatrixVectorField` |309310Falls through to `DefaultImplicitConversionPolicy` for all other type pairs.311312### Policy Assignment Per Socket313314```python315# Sverchok v1.4.0+: source: core/sockets.py316class SvVerticesSocket:317 default_conversion_name = ConversionPolicies.DEFAULT.conversion_name318 # → 'DefaultImplicitConversionPolicy'319320class SvScalarFieldSocket:321 default_conversion_name = ConversionPolicies.FIELD.conversion_name322 # → 'FieldImplicitConversionPolicy'323324class SvVectorFieldSocket:325 default_conversion_name = ConversionPolicies.FIELD.conversion_name326 # → 'FieldImplicitConversionPolicy'327328class SvTextSocket:329 default_conversion_name = ConversionPolicies.LENIENT.conversion_name330 # → 'LenientImplicitConversionPolicy'331332class SvSolidSocket:333 default_conversion_name = ConversionPolicies.SOLID.conversion_name334 # → 'SolidImplicitConversionPolicy'335```336337---338339## Advanced Data Types340341### SvCurve342343Abstract base class from `sverchok/utils/curve/__init__.py`. Maps parameter `t ∈ [t_min, t_max]` to a 3D point. Not necessarily arc-length parametrized.344345- `curve.get_u_bounds()` → `(t_min, t_max)`346- `curve.evaluate(t)` → `numpy.ndarray` shape `(3,)`347- `curve.evaluate_array(ts)` → `numpy.ndarray` shape `(N, 3)`348349### SvSurface350351Abstract base class from `sverchok/utils/surface/__init__.py`. Maps `(u, v)` to 3D points.352353- `surface.get_u_min(), surface.get_u_max()`354- `surface.get_v_min(), surface.get_v_max()`355- `surface.evaluate(u, v)` → `numpy.ndarray` shape `(3,)`356- `surface.evaluate_array(us, vs)` → `numpy.ndarray` shape `(N, 3)`357358### SvScalarField359360From `sverchok/utils/field/scalar.py`. Maps `R³ → R`.361362- `field.evaluate(x, y, z)` → `float`363- `field.evaluate_grid(xs, ys, zs)` → `numpy.ndarray`364- Supports: addition, multiplication, composition, gradient365366### SvVectorField367368From `sverchok/utils/field/vector.py`. Maps `R³ → R³`.369370- `field.evaluate(x, y, z)` → `tuple(dx, dy, dz)`371- `field.evaluate_grid(xs, ys, zs)` → three `numpy.ndarray` (dxs, dys, dzs)372- Two interpretations: relative (P + field(P)) or absolute (field(P))373374### Part.Shape (Solids)375376FreeCAD/OpenCascade BRep objects. Requires FreeCAD installed alongside Blender. Transported by `SvSolidSocket`. `SolidImplicitConversionPolicy` attempts `to_solid_recursive()` on connected data.377378### dict (Dictionaries)379380Python `dict` objects in `SvDictionarySocket`. Use `unzip_dict_recursive(data)` from `sverchok.utils.dictionary` to convert nested list-of-dicts to dict-of-nested-lists.381382---383384## Reference Links385386- [references/methods.md](references/methods.md) — Complete API signatures: SvSocketCommon, SvSocketProcessing, ConversionPolicies, replace_socket, socket_id, other387- [references/examples.md](references/examples.md) — Working code examples: custom socket types, field conversions, dynamic socket replacement388- [references/anti-patterns.md](references/anti-patterns.md) — What NOT to do with sockets, with WHY explanations389390### Official Sources391392- https://github.com/nortikin/sverchok/blob/master/core/sockets.py393- https://github.com/nortikin/sverchok/blob/master/core/socket_conversions.py394- https://github.com/nortikin/sverchok/blob/master/core/socket_data.py