Resources for building custom nodes, extending NodeTool, and integrating workflows programmatically.
Quick Start: Custom Nodes
Creating custom nodes in TypeScript:
import { BaseNode, prop } from "@nodetool/node-sdk";
export class MyCustomNode extends BaseNode {
static readonly nodeType = "mypackage.text.Upper";
static readonly title = "Uppercase Text";
static readonly description =
"A simple custom node that converts text to uppercase.\n" +
" text, processing, custom";
static readonly metadataOutputTypes = {
output: "str",
};
@prop({ type: "str", default: "", title: "Input Text", description: "Text to process" })
declare input_text: any;
async process(inputs: Record<string, unknown>): Promise<Record<string, unknown>> {
const text = String(inputs.input_text ?? this.input_text ?? "");
return { output: text.toUpperCase() };
}
}
Register this class in your package’s index file and NodeTool discovers the node automatically.
-> Full Custom Node Tutorial – Templates, patterns, and detailed examples
Guides
Custom Node Development
- Node Implementation Quick Reference – Start here! Templates and common
@prop/process()patterns - Node Implementation Patterns – Architectural patterns: multi-output, streaming, stateful, secrets
- Node Implementation Examples – Real-world examples from the codebase
- Suspendable Nodes – Build nodes that can pause and resume workflows
Programmatic Workflows
- TypeScript DSL Guide – Type-safe workflow definitions with auto-generated factory functions
- Gradio Conversion Guide – Convert NodeTool workflows to Gradio applications
API Integration
- API Reference – REST API endpoints and authentication
- Headless Mode – Run workflows via CLI and HTTP API
- Chat API – OpenAI-compatible chat endpoints
- Workflow API – Execute workflows programmatically
Documentation Development
- Docs README – How to build and serve the documentation site locally
- Theme Guide – Notes on the custom docs theme
Contributing
Contribute to NodeTool on GitHub.
Share Custom Nodes
Options:
- Publish as a separate package
- Contribute to the core node library
- Share workflow examples on Discord