Portal Community

What You Need to Build

LayerWhat to BuildGuide
Database + FormNodeType record in DB + Atlas Form for configurationGuide 12
Frontend rendererReact class extending BaseNode, registered in WorkflowCanvas.nodeTypesThis guide
Backend executorC# class implementing IProcessElementExecutionGuide 14

The TypeCode Contract

Every layer uses the same typeCode string to identify the node kind. All three must match:

// 1. NodeType DB record
typeCode: "my-custom-node"

// 2. Frontend canvas registration
const nodeTypes = {
  'my-custom-node': withNodeHooks(MyCustomNode)
}

// 3. Backend DI registration
services.AddTransient<IProcessElementExecution, MyCustomNodeExecutor>();
// MyCustomNodeExecutor.TypeCode = "my-custom-node"

Built-In Renderer Reference

Four built-in renderers cover most node shapes:

RendererShapeUse For
CustomNodeRectangle with header barMost integration and data nodes
CircleNodeCircleTrigger and terminal nodes
DiamondNodeDiamondDecision/gateway nodes (if, switch)
AIAgentNodeRectangle with multiple handle groupsMulti-handle AI nodes

If your node fits one of these shapes, you can use the built-in renderer by setting shape in the NodeType template — no custom renderer code needed.