# FlowDrop Node Type

> Configurable node type definitions for workflow nodes — enabling site builders to create custom node types without coding.

## Overview

The `flowdrop_node_type` module provides a config entity for defining workflow node types. Each node type maps to a NodeProcessor plugin and can be configured with custom labels, icons, colors, categories, and default configuration values.

Site builders can create and manage node types entirely through the admin UI, while developers can ship node types as config install files. The module also exposes REST API endpoints for the visual editor to discover available nodes, fetch metadata, and validate configuration.

## Dependencies

- [flowdrop](flowdrop.md) (NodeProcessor plugin manager)
- [flowdrop_node_category](flowdrop_node_category.md) (category organization)

## Configuration

### Admin Pages

| Path | Description |
|------|-------------|
| `/admin/flowdrop/config/node-types` | List all node types |
| `/admin/flowdrop/config/node-types/add` | Create a new node type |
| `/admin/flowdrop/config/node-types/{id}` | Edit a node type |
| `/admin/flowdrop/config/node-types/{id}/delete` | Delete a node type |
| `/admin/flowdrop/config/node-types/visual-types` | Visual types settings |

### Dynamic Configuration Forms

Node type edit forms are schema-driven — they are automatically generated based on the associated NodeProcessor plugin's configuration schema. This includes real-time validation and AJAX-powered dynamic updates when configuration values change.

### Permissions

| Permission | Description |
|------------|-------------|
| `administer flowdrop_node_type` | Full CRUD access to node type definitions |

## Tips and Tricks

### Choosing Icons

FlowDrop uses [Material Design Icons (MDI)](https://pictogrammers.com/library/mdi/) for node type icons, specified with the `mdi:` prefix.

**Format:** `mdi:<icon-name>` (e.g., `mdi:cog`, `mdi:robot`, `mdi:database`)

**Finding icons:**

1. Browse [pictogrammers.com/library/mdi](https://pictogrammers.com/library/mdi/)
2. Search by keyword
3. Copy the icon name and prefix with `mdi:`

**Recommended icons by category:**

| Category | Recommended Icons |
|----------|-------------------|
| Input/Output | `mdi:import`, `mdi:export`, `mdi:keyboard`, `mdi:file-document` |
| AI/Models | `mdi:robot`, `mdi:brain`, `mdi:head-cog`, `mdi:chat` |
| Data Processing | `mdi:cog`, `mdi:filter`, `mdi:swap-horizontal`, `mdi:merge` |
| Storage | `mdi:database`, `mdi:folder`, `mdi:content-save` |
| Network/API | `mdi:web`, `mdi:api`, `mdi:cloud`, `mdi:webhook` |
| Logic/Flow | `mdi:call-split`, `mdi:source-fork`, `mdi:repeat` |

**Icon tips:** Choose icons that are descriptive, consistent within related types, and recognizable at small sizes (16-24px).

### Shipping Node Types via Config

To include node types with a contrib module, add config install files:

```yaml
# config/install/flowdrop_node_type.flowdrop_node_type.my_node.yml
id: my_node
label: 'My Custom Node'
description: 'Does something custom'
enabled: true
category: processing
icon: 'mdi:cog'
color: '#007cba'
executor_plugin: my_node_processor
config: {}
tags: ['custom']
```

## Developer API

> All PHP classes in this module are `@internal` and not part of the stable public API. They may change without notice in any release. See the [BC Policy](../reference/api/bc-policy.md) for details.

### Services

| Service ID | Class | Description |
|-----------|-------|-------------|
| `flowdrop_node_type.manager` | `FlowDropNodeTypeManager` | Manages node types with access to the NodeProcessor plugin manager, entity storage, and category loading |

### Entities

#### FlowDropNodeType (Config Entity)

**Core Properties:**

| Property | Type | Description |
|----------|------|-------------|
| `id` | string | Unique machine name |
| `label` | string | Human-readable name |
| `description` | string | Description of the node type |
| `enabled` | boolean | Whether the node type is active |
| `category` | string | Category ID for organization |
| `icon` | string | MDI icon identifier |
| `color` | string | Hex color code |
| `version` | string | Version string |
| `config` | array | Configuration schema and defaults |
| `tags` | array | Tags for search and filtering |
| `executor_plugin` | string | NodeProcessor plugin ID |

### API Endpoints

| Method | Path | Description |
|--------|------|-------------|
| GET | `/api/flowdrop/nodes` | List all available nodes |
| GET | `/api/flowdrop/nodes/{category}` | List nodes in a category |
| GET | `/api/flowdrop/nodes/{plugin_id}/metadata` | Get node metadata and schema |
| GET | `/api/flowdrop/port-config` | Get port configuration |
| POST | `/api/flowdrop/nodes/{plugin_id}/validate` | Validate node configuration |

## References

- [flowdrop_node_category](flowdrop_node_category.md) — category definitions used by node types
- [flowdrop_node_processor](flowdrop_node_processor.md) — processor plugins that node types reference
- [Defining Node — Quick Reference](../development/quick-reference/define-node.md)
- [Port Configuration](../development/port-configuration.md)
- [Material Design Icons](https://pictogrammers.com/library/mdi/)
