# Socket Shapes Design
| Shape in Prototype | Input Meaning | Output Meaning |
| -------------------------------------------------- | ------------------------ | ----------------------- |
| ![image](https://hackmd.io/_uploads/HJtNQONhR.png) | Multiple Supported Types | Multiple Possible Types |
| ![image](https://hackmd.io/_uploads/BJLHQ_E2C.png) | Requires Single Value | Is Single Value |
| ![image](https://hackmd.io/_uploads/BJLc7dEnA.png) | Requires Field | Is Field |
| ![image](https://hackmd.io/_uploads/SJuf4O4n0.png) | Requires Grid | Is Grid |
* Still need a name for these differences. Currently I call it the **Structure Type**.
* Structure type of **group inputs**.
* ![image](https://hackmd.io/_uploads/BJOKVdE3C.png)
* By default it is automatically determined if possible.
* Can be choosen manually.
* Structure type of **group outputs**.
* Currently, I think it's possible to automatically determine it in all cases.
* If not, we need the same dropdown for outputs too.
* There is *no* visible **inferencing** between nodes.
* E.g. currently the math node changes its socket shapes depending on what you connect. That would not happen anymore.
* The socket shapes describe the behavior of a node on its own.
* There *is* automatic inferencing for the group inputs/outputs though.
* The **link visualization** of fields can still work as before.
* It's somewhat nice to not communicate the field state twice (before the diamond shape and dashed lines communicated pretty much the same).
* For field inputs, there is no difference anymore between sockets that have a **default field value** and those that don't like we had in the Set Position node.
* ![image](https://hackmd.io/_uploads/rkU4POEhA.png)
* This may require a new visualization, or we say that socket inspection is good enough.
* Actual **socket shapes** (besides what is used in the prototype).
* For single values we could start using **line** sockets based on a [design](https://projects.blender.org/blender/blender/issues/74967) by William Reynish.
* ![image](https://hackmd.io/_uploads/HklB8uEhR.png)
* If the line socket is used for single values, then we could use the **circle** for "dynamic" types.
* Need to think about whether it's fine to change geometry/data-block/shader(?) sockets to use the thin socket too.
* The **diamond** shape for fields is probably good to keep.
* Still need proper socket shapes for `Volume Grid`, `List` and `Image` (+ `Single`?).