# Custom Nodes

Creating a custom node for Logic is as easy as creating a new C# file.

1. Simply right click in the project view and select: Create / Databrain / Logic / New Node
2. Name the node
3. Done

You can of course also just create a new class file and derive from **NodeData**

```cpp
using Databrain.Logic.Attributes;

namespace Databrain.Logic
{
    [NodeTitle("My Node")]
    [NodeCategory("Custom")]
    [NodeOutputs(new string[] {"Out"})]
    [NodeDescription("This is a node description")]
    public class MyNode : NodeData
    {
        public override void ExecuteNode()
        {
            // Execute code there
        
            // Execute next node connected to output index 0
            ExecuteNextNode(0);
        }
    }
}
```

### Overridable methods

#### ExecuteNode

Gets called upon node execution. Usually this is where you want to add your code.

#### InitNode

Gets called upon graph initialization at runtime

#### CustomGUI

Override this method to return a custom UI for your node.

#### EditorInitialize

Gets called on node editor start-up.

#### SelectNode

Gets called when node gets selected.

#### DeselectNode

Gets called when node gets deselected.

## Node Attributes

All node properties such as **title**, **color**, **icon** or **outputs** are defined with class attributes. Please read following documentation for a list of all available node attributes.

{% content-ref url="custom-nodes/node-attributes" %}
[node-attributes](custom-nodes/node-attributes)
{% endcontent-ref %}

