Knowledge Base

Custom Components

Custom components let you extend Nodlyn with your own workflow nodes — proprietary APIs, internal protocols, or business logic — as .NET plugins. Built plugins appear in the Studio palette under the Custom section, with Inspector settings generated automatically from your schema.

When to use

  • Wrap an internal REST API or legacy system not covered by built-in connectors.
  • Package domain-specific validation or transformation reusable across workflows.
  • Ship proprietary logic to customers inside an exported runtime agent (DLLs in plugins/custom/ are bundled automatically).

Official sample project

Start from the reference plugin on GitHub — full source, three example nodes, and step-by-step comments:

Nodlyn.CustomComponent on GitHub

git clone https://github.com/nodlyn-dev/custom-component.git
cd custom-component/Nodlyn.CustomComponent
dotnet build -c Release

The sample includes:

NodeNode typeTypeWhat it demonstrates
Hello Worldcustom.example.helloWorldActionSettings, outputs, minimal executor.
Text Transformcustom.example.textTransformTransformReading pipeline input, passing data downstream.
Number Checkcustom.example.numberCheckConditionThreshold comparison, true/false branching.

How plugins work

  1. At startup, Nodlyn scans plugins/custom/ for *.dll files.
  2. Each DLL may define a Connector Definition (DeviceConnectorDefinition) and one or more Executors (CapabilityExecutor).
  3. Capabilities become draggable nodes; node type is {ConnectorId}.{CapabilityId} (e.g. custom.example.helloWorld).
  4. Executors run when the node executes — same engine path as built-in connectors.

Plugins load in an isolated assembly context. A invalid DLL is logged and skipped; other plugins still load. There is no hot reload — restart Studio or the runtime agent after deploying changes.

Quick start (deploy sample)

  1. Build the sample (see above). Output DLL: Nodlyn.CustomComponent/bin/Release/net8.0/Nodlyn.CustomComponent.dll
  2. Copy to your Nodlyn install: plugins/custom/Nodlyn.CustomComponent.dll
  3. Restart the platform (Studio API or runtime agent).
  4. Open the workflow editor — nodes appear under Custom → Example Plugin.

Build your own plugin

1. Connector definition

Create a class extending DeviceConnectorDefinition. Declare identity and capabilities (Inspector fields, security level, inputs/outputs):

  • ConnectorId — globally unique, e.g. custom.mycompany
  • DisplayName, Icon, Color, Description — palette appearance
  • Capabilities — list of CapabilityContract entries with CapabilityId, settings schema, CapabilityType

2. Executor

Create a class extending CapabilityExecutor with matching ConnectorId and CapabilityId:

  • Read settings from node.Settings (Inspector labels map to setting names).
  • Read upstream data via ResolveInput(node, context).
  • Return StepOutcome.Ok(...) with output object for downstream nodes.
  • For side effects (HTTP, hardware), honour Dry Run via context.ExecutionMode.

3. Project rules

RuleDetail
ReferencesReference Nodlyn.Core only — not Nodlyn.Api or Nodlyn.Connectors.
ConstructorsParameterless constructors required (loaded via Activator.CreateInstance).
Unique IDsConnectorId and each CapabilityId must not collide with built-in or other plugins.
ValidationIf any type in the DLL fails validation, the entire plugin is rejected.
RestartDeploy DLL → restart — no hot reload.

Inspector setting types

TypeUI control
textSingle-line input
numberNumeric input
toggleOn/off switch ("true" / "false")
selectDropdown with Options
textareaMulti-line text

Capability types

TypeUse for
ActionOperations with side effects
ConditionTrue/false branching
TransformReshape pipeline data
TriggerStart workflow from external events
FlowControlDelays, forks, merges

Security levels

LevelBehaviour
SafeNo special permission
SensitiveCredential or confirmation
DangerousOperator approval before execution
ArmedRequiredApproval plus arm signal (two-person rule)

Sample node — Hello World properties

From Nodlyn.CustomComponent (Inspector labels):

PropertyTypeDescription
Your NametextName to greet. Required.
Greeting StyleselectFriendly, Formal, or Casual.
Include TimestamptoggleAppend ISO timestamp to output.

Outputs: message, greetedAt (when timestamp enabled).

Runtime export

When you export a runtime agent, any DLL present in Studio’s plugins/custom/ at export time is copied into the ZIP under plugins/custom/. The headless runtime loads them the same way — custom nodes work on edge deployments without Studio installed.

If a workflow references a custom node but the DLL is missing on the target machine, Studio shows a missing-component banner until the plugin is deployed.

Related samples on GitHub

See also

Nodlyn Assistant
Ask me anything about Nodlyn
Hi! 👋 I'm the Nodlyn assistant. Ask me about the product, workflow components, connectors, agent runtime, agent capabilities, deployment, and more. If I don't know an answer, I'll point you to our contact form.