Skip to content

slient-commit/node-connector

Repository files navigation

Note

A visual workflow automation platform. Build chains of executable plugins, trigger them via cron, webhook, or terminal, and monitor execution in real-time.

This project started from a single script file that automated repetitive tasks — manual deployments, server health checks, file operations — because I had no access to tools like n8n or a proper CI/CD pipeline. Over time that script grew too large to maintain, so I took inspiration from n8n and rebuilt it as a visual node-based editor. Node Connector is a personal project; while the codebase has been hardened with production-grade security practices, it was built for personal use and is not intended as a production platform.

Node Connector

A visual workflow automation platform. Build chains of executable plugins on an SVG canvas, connect them to form pipelines, and trigger execution via cron, webhook, or terminal. A visual workflow automation platform. Build chains of executable plugins, trigger them via cron, webhook, or terminal, and monitor execution in real-time.

Express.js 5 React 19 SQLite Docker This project started from a single script file that automated repetitive tasks — manual deployments, server health checks, file operations — because I had no access to tools like n8n or a proper CI/CD pipeline. Over time that script grew too large to maintain, so I took inspiration from n8n and rebuilt it as a visual node-based editor. Node Connector is a personal project; while the codebase has been hardened with production-grade security practices, it was built for personal use and is not intended as a production platform.

Node Connector Screenshot

Features

  • Visual Node Editor — Drag-and-drop SVG canvas with pan, zoom, and real-time connection drawing
  • Plugin System — Auto-discovered plugins from api/plugins/. Add a .js file and it appears instantly
  • Three Trigger Modes — Cron (scheduled), Webhook (HTTP POST), Terminal (CLI or UI)
  • Real-Time Execution — Live progress streaming via Server-Sent Events (SSE) with per-node status indicators
  • Multi-Input Execution — Nodes with multiple inputs wait for all upstream nodes to complete; failures propagate downstream
  • Data Flow{{variable}} template syntax with dot notation for referencing previous node outputs
  • Execution History — Track every cron/webhook/terminal execution with duration, status, and node count
  • Multi-User Auth — JWT-based authentication with access and refresh tokens
  • Single Docker Image — Nginx + API + Scheduler bundled in one container

Built-in Plugins

Plugin Tags Description
Custom Script script Execute custom Node.js code with async function main()
SSH network Run commands on remote servers via SSH
FTP network Upload files to FTP servers
HTTP Request network Make REST API calls (GET, POST, PUT, DELETE)
Download File network, io Download a file from a URL to the filesystem
Send Email notification Send emails via SMTP
Read/Write File io Read, write, or append content to files
Rename File io Move or rename files on the filesystem
Zip / Unzip io Compress or extract ZIP archives
JSON Transform data Parse, transform, and reshape JSON data
Database Query data Execute SQL queries against a SQLite database
If Condition flow Evaluate a condition and pass or block execution
Loop flow Re-execute all downstream nodes for each item in a list or count range
Loop End flow Marks the end of a loop body; nodes after this run once with aggregated results
Delay flow Wait for a specified duration before continuing
Linux Terminal terminal, linux Execute bash/shell commands
Windows CMD terminal, windows Execute CMD commands
PowerShell terminal, windows Execute PowerShell scripts

Quick Start

Without Docker (recommended)

Run directly on your machine for full access to host tools (Python, CMD, bash, etc.).

Prerequisites: Node.js 18+ installed.

# Windows
start.bat

# Linux / macOS
./start.sh

Or directly:

node start.js

This single command:

  1. Installs all dependencies (API, frontend, scheduler)
  2. Builds the frontend
  3. Starts the API + scheduler
  4. Opens on http://localhost:3001

Terminal plugins have full access to your host machine — run Python, CMD, bash, and any installed tool.

Auto-Start on Boot

To have Node Connector start automatically when the system boots:

# Windows (run as Administrator)
service-install.bat

# Linux (run as root)
sudo ./service-install.sh

To remove auto-start:

# Windows (run as Administrator)
service-uninstall.bat

# Linux (run as root)
sudo ./service-uninstall.sh

Docker

Use Docker if you prefer an isolated container (note: host tools like Python won't be accessible).

docker build -t node-connector .
docker run -d -p 80:80 --name node-connector node-connector

Open http://localhost in your browser, register an account, and start building workflows.

With host volume (for file access only, not host tools):

# Linux / macOS
docker run -d -p 80:80 --name node-connector -v /path/on/host:/data node-connector

# Windows
docker run -d -p 80:80 --name node-connector -v C:\Users\You\Desktop:/data node-connector

Environment Variables

Variable Default Description
JWT_SECRET change_me_jwt_secret Secret for signing JWT access tokens
REFRESH_TOKEN_SECRET change_me_refresh_secret Secret for signing refresh tokens
INTERNAL_API_KEY change_me_internal_key Key for scheduler/CLI to API communication
docker run -d -p 80:80 \
  -e JWT_SECRET=my_secret \
  -e REFRESH_TOKEN_SECRET=my_refresh_secret \
  -e INTERNAL_API_KEY=my_internal_key \
  node-connector

Architecture

+---------------------------------------------------+
|                   Docker Container                 |
|                                                    |
|   +----------+    +-------------+    +-----------+ |
|   |  Nginx   |    |   API       |    | Scheduler | |
|   |  :80     |--->|  :3001      |<---|           | |
|   |          |    |  Express.js |    | node-cron | |
|   +----------+    +------+------+    +-----------+ |
|        |                 |                         |
|        |          +------+------+                  |
|   Static Files    |   SQLite    |                  |
|   (React build)   |   + JSON    |                  |
|                   +-------------+                  |
+---------------------------------------------------+

Project Structure

node-connector/
├── api/                        # Express.js REST API
│   ├── index.js                # Server entry point
│   ├── cli.js                  # CLI execution tool
│   ├── plugins/                # Plugin files (auto-loaded)
│   │   ├── custom-script.js
│   │   ├── ssh.js
│   │   ├── ftp.js
│   │   ├── http-request.js
│   │   ├── download-file.js
│   │   ├── send-email.js
│   │   ├── read-write-file.js
│   │   ├── rename-file.js
│   │   ├── zip.js
│   │   ├── json-transform.js
│   │   ├── database-query.js
│   │   ├── if-condition.js
│   │   ├── loop.js
│   │   ├── loop-end.js
│   │   ├── delay.js
│   │   ├── linux-terminal.js
│   │   ├── windows-cmd.js
│   │   ├── powershell.js
│   │   └── example.js
│   └── src/
│       ├── routes/             # auth.js, sheet.js
│       ├── models/             # user.js, plugin.js, execution-history.js
│       ├── middleware/         # JWT auth, internal key auth
│       ├── executer.js         # Execution engine
│       └── tool-loader.js      # Plugin discovery
├── scheduler/                  # Cron scheduler service
├── front/                      # React 19 + Vite 6
│   └── src/
│       ├── components/         # Sheet editor, list, modals
│       ├── services/           # API clients
│       └── models/             # SVG node rendering
├── Dockerfile                  # Single-image build
├── nginx.conf                  # Reverse proxy config
├── docs.html                   # Full documentation
├── start.js                    # Cross-platform launcher
├── start.bat                   # Windows start wrapper
├── start.sh                    # Linux/macOS start wrapper
├── service-install.bat         # Windows auto-start installer
├── service-uninstall.bat       # Windows auto-start uninstaller
├── service-install.sh          # Linux auto-start installer (systemd)
└── service-uninstall.sh        # Linux auto-start uninstaller

Creating a Plugin

Add a .js file in api/plugins/ — it's auto-discovered on restart:

const Plugin = require("./../src/models/plugin");

class MyPlugin extends Plugin {
  name()        { return "My Plugin"; }
  description() { return "What it does"; }
  icon()        { return "🚀"; }
  // iconBase64() { return "data:image/png;base64,..."; }  // Optional image icon
  tags()        { return ["custom"]; }

  paramsDefinition() {
    return [
      { name: "My Param", alias: "my_param", type: "string", default: "", value: undefined }
    ];
  }

  async logic(params = {}) {
    const myParam = params.my_param;
    const input = params.input || {};

    this.log("Processing...");

    return {
      status: { error: false, message: "Done" },
      output: { result: "value" }  // Passed to downstream nodes
    };
  }
}

module.exports = MyPlugin;

CLI Usage

# From inside the container
node api/cli.js <sheet-uid>

# From host
docker exec node-connector node api/cli.js <sheet-uid>

Documentation

Full documentation is available at docs.html — open it in a browser for the complete API reference, plugin guide, and architecture details.

License

See LICENSE for details. This project is available for personal, non-commercial use only. See docs.html for full documentation.

About

Small project to execute chaines of commands (for deployment for example)

Topics

Resources

License

Stars

2 stars

Watchers

0 watching

Forks

Contributors

Languages