Custom Nodes — Overview
QANode allows you to extend the platform with custom nodes created in any programming language. Through the HTTP provider system, you can create nodes that execute any logic — from integrations with internal tools to automations specific to your business.
How It Works
The custom node system is based on a simple HTTP contract:
┌────────────────┐ ┌────────────────────┐
│ QANode │ HTTP │ Your Provider │
│ (Worker) │ ◄─────► │ (Any Language) │
│ │ │ │
│ 1. GET /manifest │ ← Defines nodes │
│ 2. POST /execute │ ← Executes a node │
└────────────────┘ └────────────────────┘
- QANode calls
GET /manifeston your provider to discover which nodes are available - The nodes appear in the flow editor palette with a pink icon
- When a flow is executed, QANode calls
POST /executeon the provider to execute each node
Ways to Create Custom Nodes
1. HTTP Provider (Any Language) - Enterprise
Create an HTTP server that implements the API contract. It can be written in:
- Node.js (Express, Fastify, Koa)
- Python (Flask, FastAPI, Django)
- Java (Spring Boot)
- C# (.NET)
- Go (net/http, Gin)
- Any language with HTTP support
See Creating a Provider for the step-by-step guide.
2. Local Nodes in Desktop Version - Community Edition
In desktop, you can create .node.js, .node.mjs, or .node.cjs files in the custom nodes folder. QANode automatically detects and exposes these nodes without a separate HTTP server.
See Local Desktop Nodes for details.
Concepts
Provider
A provider is an HTTP server registered in QANode that supplies custom nodes. Each provider can offer multiple nodes.
Manifest
The manifest is the response from the GET /manifest route, which describes all available nodes in the provider, including:
- Name and type of each node
- Category for organization in the palette
- Input schema (configuration fields)
- Output schema (data produced)
Execution
Execution is done via POST /execute, where QANode sends the node's input data and the provider returns the result. Each node has a default timeout of 30 minutes, configurable via timeoutMs in the manifest for longer operations.
Registering a Provider
- Go to Settings → Custom Providers
- Click + Add Provider
- Fill in:
- Name: Descriptive name for the provider
- Base URL: Server URL (e.g.,
http://localhost:4010) - Token (optional): Bearer authentication token
- Click Test Connection to verify
- Save the provider
Image: Settings screen showing the provider list with an add button
After registration, the provider's nodes will automatically appear in the flow editor palette under the Custom Nodes category (or the category defined in the manifest).
Complete Flow
1. You create an HTTP server (provider)
2. Implement GET /manifest and POST /execute
3. Register the provider in QANode
4. Test the connection
5. Open the flow editor → nodes appear in the palette
6. Drag custom nodes onto the canvas
7. Configure the fields (defined in inputSchema)
8. Execute the flow → QANode calls POST /execute on the provider
9. Result is returned and available via expressions {{ }}
Next Steps
- Creating a Provider — Step-by-step guide
- API Contract — Complete endpoint specification
- Examples — Sample code in various languages
- Local Desktop Nodes — Local nodes in the desktop version
