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