Phase 5 - BYOB Backend (TASK-007A/B): - LocalSQL Adapter with full CloudStore API compatibility - QueryBuilder translates Parse-style queries to SQL - SchemaManager with PostgreSQL/Supabase export - LocalBackendServer with REST endpoints - BackendManager with IPC handlers for Electron - In-memory fallback when better-sqlite3 unavailable Phase 3 - GitHub Panel (GIT-004): - Issues tab with list/detail views - Pull Requests tab with list/detail views - GitHub API client with OAuth support - Repository info hook integration Phase 3 - Editor UX Bugfixes (TASK-013): - Legacy runtime detection banners - Read-only enforcement for legacy projects - Code editor modal close improvements - Property panel stuck state fix - Blockly node deletion and UI polish Phase 11 - Cloud Functions Planning: - Architecture documentation for workflow automation - Execution history storage schema design - Canvas overlay concept for debugging Docs: Updated LEARNINGS.md and COMMON-ISSUES.md
45 KiB
Cloud Functions Revival: n8n Alternative Vision
Status: Planning / Not Yet Started
Strategic Goal: Transform Nodegx into a viable workflow automation platform competing with n8n
Proposed Phase: 4 (or standalone initiative)
Total Estimated Effort: 12-16 weeks
Executive Summary
This document outlines a comprehensive plan to revive and modernize Nodegx's cloud functions system, transforming it from a legacy Parse Server dependency into a powerful, self-hosted workflow automation platform. The vision includes dual-runtime support (JavaScript and Python), execution history, deployment automation, and production monitoring - positioning Nodegx as a serious alternative to tools like n8n, Zapier, and Make.
Current State Analysis
What Exists Today
1. Basic Cloud Function Infrastructure (Legacy)
Location: packages/noodl-viewer-cloud/
Current Architecture (Parse-dependent):
┌─────────────────────────────────────────┐
│ Editor: Cloud Functions Panel │
│ - Create/edit visual workflows │
│ - Components prefixed /#__cloud__/ │
└─────────────────┬───────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ CloudRunner (Runtime) │
│ - Executes visual workflows │
│ - Depends on Parse Server │
│ - Request/Response nodes │
└─────────────────┬───────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Parse Server (External Dependency) │
│ - Database │
│ - Authentication │
│ - Cloud function hosting │
└─────────────────────────────────────────┘
Available Nodes:
Cloud Request- Entry point for cloud functionsCloud Response- Exit point with status codesAggregate- Database aggregation queries- Standard data nodes (Query, Create, Update, Delete) - Parse-dependent
Limitations:
- ❌ Tightly coupled to Parse Server
- ❌ No local execution during development
- ❌ No execution history or debugging
- ❌ No deployment automation
- ❌ No monitoring or observability
- ❌ No webhook triggers or scheduled tasks
- ❌ No internal event system
- ❌ Cannot run independently of editor
2. In-Progress: Local Backend Integration (TASK-007)
Status: Planned but not implemented
Goal: Replace Parse dependency with local SQLite + Express server
Sub-tasks:
- TASK-007A: LocalSQL Adapter (data layer)
- TASK-007B: Backend Server (Express API + WebSocket)
- TASK-007C: Workflow Runtime (adapting CloudRunner)
- TASK-007D: Schema Management
- TASK-007E: Editor Integration
- TASK-007F: Standalone Deployment (Electron bundling only)
What This Provides:
- ✅ Local development without Parse
- ✅ SQLite database
- ✅ Visual workflow execution
- ✅ Database CRUD nodes
- ✅ Basic trigger nodes (Schedule, DB Change, Webhook)
What's Still Missing:
- ❌ Production deployment (cloud servers)
- ❌ Execution history
- ❌ Monitoring/observability
- ❌ Webhook endpoint management
- ❌ Advanced trigger types
- ❌ Error handling/retry logic
- ❌ Rate limiting
- ❌ Authentication/authorization
- ❌ Multi-environment support (dev/staging/prod)
3. Deployment Infrastructure (TASK-005 DEPLOY series)
Status: Frontend-only deployment automation
What Exists:
- GitHub Actions integration
- Deploy to Netlify, Vercel, Cloudflare Pages
- Deploy button in editor
- Environment management
What's Missing:
- ❌ Backend/cloud function deployment
- ❌ Docker container deployment to cloud
- ❌ Database migration on deploy
- ❌ Cloud function versioning
- ❌ Rollback capabilities
What's Missing: Gap Analysis
1. ❌ Trigger System (n8n equivalent)
Missing Capabilities:
| Feature | n8n | Nodegx Current | Nodegx Needed |
|---|---|---|---|
| Webhook triggers | ✅ | ❌ | ✅ |
| Schedule/Cron | ✅ | Planned (TASK-007C) | ✅ |
| Manual triggers | ✅ | ✅ (Request node) | ✅ |
| Database change events | ✅ | Planned (TASK-007C) | ✅ |
| Internal events | ✅ | ❌ | ✅ |
| Queue triggers | ✅ | ❌ | Future |
| File watch | ✅ | ❌ | Future |
| External integrations | ✅ | ❌ | Future Phase |
Required Nodes:
Trigger Nodes (Priority 1):
├── Webhook Trigger
│ └── Exposes HTTP endpoint
│ └── Captures request data
│ └── Supports authentication
│ └── CORS configuration
├── Schedule Trigger
│ └── Cron expressions
│ └── Interval-based
│ └── Timezone support
├── Manual Trigger
│ └── Test execution button
│ └── Input parameters
└── Internal Event Trigger
└── Event bus subscription
└── Custom event names
└── Event filtering
2. ❌ Execution History & Debugging
Missing Capabilities:
What n8n provides:
- Complete execution log for each workflow run
- Input/output data for every node
- Execution timeline visualization
- Error stack traces
- "Pin" execution data to canvas
- Search/filter execution history
- Export execution data
What Nodegx needs:
Execution History System:
┌─────────────────────────────────────────────────────┐
│ Execution Record │
├─────────────────────────────────────────────────────┤
│ - ID: exec_abc123xyz │
│ - Workflow: /#__cloud__/ProcessOrder │
│ - Trigger: webhook_payment_received │
│ - Started: 2025-01-15 14:23:45 │
│ - Duration: 1.2s │
│ - Status: Success / Error / Running │
│ - Input Data: { orderId: 12345, ... } │
│ │
│ Node Execution Steps: │
│ ├─ [Request] ─────────────── 0ms ✓ │
│ │ Input: { orderId: 12345 } │
│ │ Output: { orderId: 12345, userId: 789 } │
│ │ │
│ ├─ [Query DB] ────────────── 45ms ✓ │
│ │ Input: { userId: 789 } │
│ │ Output: { user: {...}, orders: [...] } │
│ │ │
│ ├─ [HTTP Request] ───────── 890ms ✓ │
│ │ Input: { endpoint: '/api/charge', ... } │
│ │ Output: { success: true, transactionId: ... } │
│ │ │
│ └─ [Response] ────────────── 5ms ✓ │
│ Input: { statusCode: 200, ... } │
│ Output: { statusCode: 200, body: {...} } │
└─────────────────────────────────────────────────────┘
Implementation Requirements:
- Persistent storage (SQLite or separate DB)
- Efficient querying (indexes on workflow, status, timestamp)
- Data retention policies
- Privacy controls (PII redaction)
- Canvas overlay UI to show pinned execution
- Timeline visualization component
3. ❌ Production Deployment System
Missing Infrastructure:
Current deployment stops at frontend. Cloud functions need:
Required Deployment Architecture:
┌─────────────────────────────────────────────────────┐
│ Local Development │
│ ├─ Editor (with cloud functions panel) │
│ ├─ Local Backend Server (SQLite + Express) │
│ └─ Hot-reload on changes │
└─────────────────┬───────────────────────────────────┘
│
│ Deploy Command
▼
┌─────────────────────────────────────────────────────┐
│ Build & Package │
│ ├─ Compile workflows to optimized format │
│ ├─ Bundle dependencies │
│ ├─ Generate Dockerfile │
│ ├─ Create docker-compose.yml │
│ └─ Package database schema + migrations │
└─────────────────┬───────────────────────────────────┘
│
│ Push to Registry
▼
┌─────────────────────────────────────────────────────┐
│ Container Registry │
│ ├─ Docker Hub │
│ ├─ GitHub Container Registry │
│ └─ AWS ECR / Google GCR │
└─────────────────┬───────────────────────────────────┘
│
│ Deploy to Platform
▼
┌─────────────────────────────────────────────────────┐
│ Cloud Hosting Options │
│ ├─ Fly.io (easiest, auto-scaling) │
│ ├─ Railway (developer-friendly) │
│ ├─ Render (simple, affordable) │
│ ├─ DigitalOcean App Platform │
│ ├─ AWS ECS / Fargate │
│ ├─ Google Cloud Run │
│ └─ Self-hosted VPS (Docker Compose) │
└─────────────────────────────────────────────────────┘
Deployment Providers to Support:
Priority 1 (Simple PaaS):
- Fly.io - Best for this use case (auto-scaling, global, simple)
- Railway - Developer favorite, easy setup
- Render - Affordable, straightforward
Priority 2 (Traditional Cloud):
- AWS (ECS/Fargate + RDS)
- Google Cloud (Cloud Run + Cloud SQL)
- DigitalOcean (App Platform + Managed DB)
Priority 3 (Self-hosted):
- Docker Compose templates for VPS deployment
- Kubernetes manifests (advanced users)
Required Features:
- One-click deploy from editor
- Environment variable management
- Database migration handling
- SSL/TLS certificate automation
- Domain/subdomain configuration
- Health checks and auto-restart
- Log streaming to editor
- Blue-green or rolling deployments
- Rollback capability
4. ❌ Monitoring & Observability
Missing Dashboards:
Required Monitoring Views:
┌─────────────────────────────────────────────────────┐
│ Workflow Monitoring Dashboard │
├─────────────────────────────────────────────────────┤
│ │
│ Active Workflows: │
│ ┌───────────────────────────────────────────────┐ │
│ │ ProcessOrder ● Running │ │
│ │ └─ Requests: 1,234 (24h) │ │
│ │ └─ Success: 98.5% │ │
│ │ └─ Avg Response: 450ms │ │
│ │ └─ Errors: 18 (last 24h) │ │
│ │ │ │
│ │ SendWelcomeEmail ● Running │ │
│ │ └─ Requests: 456 (24h) │ │
│ │ └─ Success: 100% │ │
│ │ └─ Avg Response: 1.2s │ │
│ │ │ │
│ │ GenerateReport ⏸ Paused │ │
│ │ └─ Last run: 2 hours ago │ │
│ └───────────────────────────────────────────────┘ │
│ │
│ Performance Metrics (Last 24h): │
│ ┌───────────────────────────────────────────────┐ │
│ │ Total Executions: 1,690 │ │
│ │ Success Rate: 98.9% │ │
│ │ Avg Duration: 680ms │ │
│ │ P95 Duration: 2.1s │ │
│ │ P99 Duration: 5.8s │ │
│ │ Total Errors: 18 │ │
│ └───────────────────────────────────────────────┘ │
│ │
│ Recent Errors: │
│ ┌───────────────────────────────────────────────┐ │
│ │ 14:23 ProcessOrder: Database timeout │ │
│ │ 13:45 ProcessOrder: Invalid JSON in request │ │
│ │ 12:10 ProcessOrder: HTTP 500 from Stripe API │ │
│ └───────────────────────────────────────────────┘ │
│ │
│ [View All Executions] [Export Logs] │
└─────────────────────────────────────────────────────┘
Metrics to Track:
- Execution count (by workflow, by time period)
- Success/error rates
- Response time percentiles (P50, P95, P99)
- Error types and frequency
- Resource usage (CPU, memory, disk)
- Active webhook endpoints
- Scheduled job status
- Queue depth (if implementing queues)
Alerting System:
- Email notifications on errors
- Webhook notifications
- Threshold alerts (e.g., error rate > 5%)
- Slack integration (future)
5. ❌ Advanced Workflow Features
Missing Flow Control:
n8n provides:
- IF/ELSE conditions
- Switch nodes (multiple branches)
- Loop nodes (iterate over arrays)
- Error handling nodes
- Merge nodes (combine branches)
- Split nodes (parallel execution)
- Wait/Delay nodes
- Code nodes (custom JavaScript/Python)
Nodegx currently has:
- Basic signal flow
- Limited logic nodes
Required Logic Nodes:
Control Flow Nodes:
├── IF Condition
│ └── Supports complex expressions
│ └── Multiple condition groups (AND/OR)
│ └── True/False branches
├── Switch
│ └── Multiple case branches
│ └── Default case
│ └── Expression-based routing
├── For Each
│ └── Iterate over arrays
│ └── Access item and index
│ └── Batch size control
├── Merge
│ └── Wait for all branches
│ └── Wait for any branch
│ └── Combine outputs
├── Error Handler
│ └── Try/catch equivalent
│ └── Retry logic
│ └── Fallback behavior
└── Wait/Delay
└── Configurable duration
└── Wait for webhook
└── Wait for condition
Required Data Nodes:
Data Manipulation Nodes:
├── Set Variable
│ └── Create/update variables
│ └── Expression support
├── Transform
│ └── Map/filter/reduce arrays
│ └── Object manipulation
│ └── JSON path queries
├── HTTP Request
│ └── All HTTP methods
│ └── Authentication support
│ └── Request/response transformation
├── Code (JavaScript)
│ └── Custom logic
│ └── Access to all inputs
│ └── Return multiple outputs
├── Code (Python) ← NEW
│ └── For AI/ML workflows
│ └── Access to Python ecosystem
│ └── Async/await support
└── JSON Parser
└── Parse/stringify
└── Validate schema
└── Extract values
Proposed Implementation: The "Cloud Functions Revival" Phase
Phase Structure
Suggested Placement: Between Phase 3 and Phase 5, or as Phase 4
Total Timeline: 12-16 weeks (3-4 months)
Team Size: 1-2 developers + 1 designer (for UI components)
SERIES 1: Core Workflow Runtime (4 weeks)
Building on TASK-007C, complete the workflow execution system.
WORKFLOW-001: Advanced Trigger System (1 week)
Implement:
- Webhook trigger nodes with URL management
- Enhanced schedule nodes with cron expressions
- Internal event trigger system
- Manual execution triggers with parameters
Files to Create:
packages/noodl-viewer-cloud/src/nodes/triggers/
├── webhook.ts
├── schedule.ts
├── internal-event.ts
└── manual.ts
packages/noodl-runtime/src/nodes/std-library/workflow-triggers/
├── webhook-trigger.js
├── schedule-trigger.js
└── event-trigger.js
Key Features:
- Webhook URL generation and management
- Request authentication (API keys, JWT)
- Cron expression editor with human-readable preview
- Event bus for internal triggers
- Test execution with sample data
WORKFLOW-002: Logic & Control Flow Nodes (1.5 weeks)
Implement:
- IF/ELSE condition nodes
- Switch nodes (multi-branch)
- For Each loop nodes
- Merge/Split nodes
- Error handling nodes
- Wait/Delay nodes
Files to Create:
packages/noodl-runtime/src/nodes/std-library/workflow-logic/
├── if-condition.js
├── switch.js
├── for-each.js
├── merge.js
├── error-handler.js
└── wait.js
Key Features:
- Visual expression builder
- Complex condition support (AND/OR groups)
- Parallel execution where appropriate
- Automatic error propagation
- Loop iteration controls
WORKFLOW-003: Data Manipulation Nodes (1 week)
Implement:
- Enhanced HTTP Request node
- JSON Parser/Stringifier
- Transform node (map/filter/reduce)
- Set Variable node
- Code nodes (JavaScript, preparation for Python)
Files to Create:
packages/noodl-runtime/src/nodes/std-library/workflow-data/
├── http-request-advanced.js
├── json-parser.js
├── transform.js
├── set-variable.js
└── code-javascript.js
Key Features:
- HTTP request builder UI
- JSONPath and JMESPath support
- Visual data transformation builder
- Variable scope management
- Monaco editor for code nodes
WORKFLOW-004: Error Handling & Retry Logic (0.5 weeks)
Implement:
- Automatic retry with exponential backoff
- Dead letter queue for failed executions
- Error categorization (retriable vs. fatal)
- Global error handlers
Files to Modify:
packages/noodl-viewer-cloud/src/LocalCloudRunner.ts
packages/noodl-runtime/src/nodes/std-library/workflow-logic/error-handler.js
SERIES 2: Execution History & Debugging (3 weeks)
HISTORY-001: Execution Storage System (1 week)
Implement:
- SQLite table schema for executions
- Efficient storage of execution data
- Data retention policies
- Query APIs for execution retrieval
Database Schema:
CREATE TABLE workflow_executions (
id TEXT PRIMARY KEY,
workflow_id TEXT NOT NULL,
workflow_name TEXT NOT NULL,
trigger_type TEXT NOT NULL,
trigger_data TEXT, -- JSON
status TEXT NOT NULL, -- running, success, error
started_at INTEGER NOT NULL,
completed_at INTEGER,
duration_ms INTEGER,
error_message TEXT,
error_stack TEXT,
FOREIGN KEY (workflow_id) REFERENCES components(id)
);
CREATE TABLE execution_steps (
id TEXT PRIMARY KEY,
execution_id TEXT NOT NULL,
node_id TEXT NOT NULL,
node_name TEXT NOT NULL,
step_index INTEGER NOT NULL,
started_at INTEGER NOT NULL,
completed_at INTEGER,
duration_ms INTEGER,
status TEXT NOT NULL,
input_data TEXT, -- JSON
output_data TEXT, -- JSON
error_message TEXT,
FOREIGN KEY (execution_id) REFERENCES workflow_executions(id)
);
CREATE INDEX idx_executions_workflow ON workflow_executions(workflow_id);
CREATE INDEX idx_executions_status ON workflow_executions(status);
CREATE INDEX idx_executions_started ON workflow_executions(started_at);
CREATE INDEX idx_steps_execution ON execution_steps(execution_id);
Files to Create:
packages/noodl-viewer-cloud/src/execution-history/
├── ExecutionStore.ts
├── ExecutionLogger.ts
└── RetentionManager.ts
HISTORY-002: Execution Logger Integration (0.5 weeks)
Implement:
- Hook into CloudRunner to log all execution steps
- Capture input/output for each node
- Track timing and performance
- Handle large data (truncation, compression)
Files to Modify:
packages/noodl-viewer-cloud/src/LocalCloudRunner.ts
Key Features:
- Minimal performance overhead
- Configurable data capture (full vs. minimal)
- Automatic PII redaction options
- Compression for large payloads
HISTORY-003: Execution History UI (1 week)
Implement:
- Execution list panel
- Search and filter controls
- Execution detail view
- Timeline visualization
Files to Create:
packages/noodl-editor/src/editor/src/views/ExecutionHistory/
├── ExecutionHistoryPanel.tsx
├── ExecutionList.tsx
├── ExecutionDetail.tsx
├── ExecutionTimeline.tsx
└── ExecutionHistoryPanel.module.scss
UI Components:
- Filterable list (by workflow, status, date range)
- Execution timeline with node-by-node breakdown
- Expandable step details (input/output viewer)
- Search across all execution data
- Export to JSON/CSV
HISTORY-004: Canvas Execution Overlay (0.5 weeks)
Implement:
- "Pin execution" feature
- Overlay execution data on canvas
- Show data flow between nodes
- Highlight error paths
Files to Create:
packages/noodl-editor/src/editor/src/views/nodeGraph/
├── ExecutionOverlay.tsx
├── NodeExecutionBadge.tsx
└── ConnectionDataFlow.tsx
Key Features:
- Click execution in history to pin to canvas
- Show input/output data on hover
- Animate data flow (optional)
- Highlight nodes that errored
- Time scrubbing through execution
SERIES 3: Production Deployment (3 weeks)
DEPLOY-CLOUD-001: Container Build System (1 week)
Implement:
- Dockerfile generator for workflows
- docker-compose template
- Environment variable management
- Database initialization scripts
Files to Create:
packages/noodl-editor/src/editor/src/services/deployment/
├── ContainerBuilder.ts
├── templates/
│ ├── Dockerfile.template
│ ├── docker-compose.yml.template
│ └── entrypoint.sh.template
└── DatabaseMigrationGenerator.ts
Generated Dockerfile Example:
FROM node:18-alpine
WORKDIR /app
# Copy workflow runtime
COPY packages/noodl-viewer-cloud /app/runtime
COPY packages/noodl-runtime /app/noodl-runtime
# Copy project workflows
COPY .noodl/backend-*/workflows /app/workflows
COPY .noodl/backend-*/schema.json /app/schema.json
# Install dependencies
RUN npm ci --production
# Health check
HEALTHCHECK --interval=30s --timeout=3s \
CMD node healthcheck.js || exit 1
# Expose port
EXPOSE 8080
# Start server
CMD ["node", "runtime/dist/server.js"]
DEPLOY-CLOUD-002: Platform Integrations (1.5 weeks)
Implement:
- Fly.io deployment provider
- Railway deployment provider
- Render deployment provider
- Generic Docker registry support
Files to Create:
packages/noodl-editor/src/editor/src/services/deployment/providers/
├── FlyProvider.ts
├── RailwayProvider.ts
├── RenderProvider.ts
└── GenericDockerProvider.ts
packages/noodl-editor/src/editor/src/views/deployment/
├── CloudDeployPanel.tsx
├── PlatformSelector.tsx
├── EnvironmentConfig.tsx
└── DeploymentStatus.tsx
Key Features:
- OAuth or API key authentication
- Automatic SSL/TLS setup
- Environment variable UI
- Database provisioning (where supported)
- Domain configuration
- Deployment logs streaming
DEPLOY-CLOUD-003: Deploy UI & Workflow (0.5 weeks)
Implement:
- "Deploy to Cloud" button
- Platform selection wizard
- Configuration validation
- Deployment progress tracking
- Rollback functionality
Integration Points:
- Add to EditorTopbar
- Add to Backend Services Panel
- Link from Workflow Monitoring Dashboard
SERIES 4: Monitoring & Observability (2 weeks)
MONITOR-001: Metrics Collection (0.5 weeks)
Implement:
- Execution metrics aggregation
- Time-series data storage
- Real-time metric updates via WebSocket
Database Schema:
CREATE TABLE workflow_metrics (
id TEXT PRIMARY KEY,
workflow_id TEXT NOT NULL,
date TEXT NOT NULL, -- YYYY-MM-DD
hour INTEGER NOT NULL, -- 0-23
execution_count INTEGER DEFAULT 0,
success_count INTEGER DEFAULT 0,
error_count INTEGER DEFAULT 0,
total_duration_ms INTEGER DEFAULT 0,
avg_duration_ms INTEGER DEFAULT 0,
p95_duration_ms INTEGER DEFAULT 0,
p99_duration_ms INTEGER DEFAULT 0,
UNIQUE(workflow_id, date, hour)
);
CREATE INDEX idx_metrics_workflow ON workflow_metrics(workflow_id);
CREATE INDEX idx_metrics_date ON workflow_metrics(date);
Files to Create:
packages/noodl-viewer-cloud/src/monitoring/
├── MetricsCollector.ts
├── MetricsAggregator.ts
└── MetricsStore.ts
MONITOR-002: Monitoring Dashboard (1 week)
Implement:
- Workflow status overview
- Performance metrics charts
- Error log viewer
- Real-time execution feed
Files to Create:
packages/noodl-editor/src/editor/src/views/WorkflowMonitoring/
├── MonitoringDashboard.tsx
├── WorkflowStatusCard.tsx
├── PerformanceChart.tsx
├── ErrorLogViewer.tsx
└── RealtimeExecutionFeed.tsx
Chart Libraries:
- Use Recharts (already used in Nodegx)
- Line charts for execution trends
- Bar charts for error rates
- Heatmaps for hourly patterns
MONITOR-003: Alerting System (0.5 weeks)
Implement:
- Alert configuration UI
- Email notifications
- Webhook notifications
- Alert history
Files to Create:
packages/noodl-viewer-cloud/src/monitoring/
├── AlertManager.ts
├── AlertEvaluator.ts
└── NotificationSender.ts
packages/noodl-editor/src/editor/src/views/WorkflowMonitoring/
└── AlertConfigPanel.tsx
Alert Types:
- Error rate threshold
- Execution failure
- Response time threshold
- Workflow didn't execute (schedule check)
BONUS: Python Runtime for AI Workflows (4 weeks)
This is the game-changer for AI agent development.
PYTHON-001: Architecture & Runtime Bridge (1 week)
Design Decision:
Instead of running Python in Node.js, create a parallel Python runtime that communicates with the Node.js server via HTTP/gRPC:
┌─────────────────────────────────────────────────────┐
│ Node.js Backend Server (Port 8080) │
│ ├─ Express API │
│ ├─ WebSocket server │
│ ├─ JavaScript CloudRunner │
│ └─ Python Runtime Proxy │
└─────────────────┬───────────────────────────────────┘
│
│ HTTP/gRPC calls
▼
┌─────────────────────────────────────────────────────┐
│ Python Runtime Server (Port 8081) │
│ ├─ FastAPI/Flask │
│ ├─ Python CloudRunner │
│ ├─ Workflow Executor │
│ └─ AI Integration Layer │
│ ├─ LangGraph support │
│ ├─ LangChain support │
│ ├─ Anthropic SDK │
│ └─ OpenAI SDK │
└─────────────────────────────────────────────────────┘
Why This Approach:
- Native Python execution (no PyNode.js hacks)
- Access to full Python ecosystem
- Better performance for AI workloads
- Easier debugging
- Independent scaling
Files to Create:
packages/noodl-python-runtime/
├── server.py # FastAPI server
├── runner.py # Python CloudRunner
├── executor.py # Workflow executor
├── nodes/ # Python node implementations
│ ├── triggers/
│ ├── ai/
│ ├── logic/
│ └── data/
└── requirements.txt
packages/noodl-viewer-cloud/src/python/
└── PythonRuntimeProxy.ts # Node.js → Python bridge
PYTHON-002: Core Python Nodes (1 week)
Implement:
- Python Code node (custom logic)
- IF/ELSE/Switch (Python expressions)
- For Each (Python iteration)
- Transform (Python lambdas)
- HTTP Request (using
requestsorhttpx)
Node Definition Format:
Keep the same JSON format but with Python execution:
# packages/noodl-python-runtime/nodes/logic/if_condition.py
from typing import Dict, Any
from runtime.node import Node, NodeInput, NodeOutput, Signal
class IfConditionNode(Node):
"""Python IF condition node"""
name = "python.logic.if"
display_name = "IF Condition"
category = "Logic"
inputs = [
NodeInput("condition", "boolean", display_name="Condition"),
NodeInput("trigger", "signal", display_name="Evaluate"),
]
outputs = [
NodeOutput("true", "signal", display_name="True"),
NodeOutput("false", "signal", display_name="False"),
]
async def execute(self, inputs: Dict[str, Any]) -> Dict[str, Any]:
condition = inputs.get("condition", False)
if condition:
return {"true": Signal()}
else:
return {"false": Signal()}
PYTHON-003: AI/LLM Integration Nodes (1.5 weeks)
Implement:
- Claude API node (Anthropic SDK)
- OpenAI API node
- LangChain Agent node
- LangGraph Workflow node
- Vector Store Query node (Pinecone, Qdrant, etc.)
- Embedding Generation node
Files to Create:
packages/noodl-python-runtime/nodes/ai/
├── claude_completion.py
├── openai_completion.py
├── langchain_agent.py
├── langgraph_workflow.py
├── vector_store_query.py
├── generate_embeddings.py
└── prompt_template.py
Example: Claude API Node
# packages/noodl-python-runtime/nodes/ai/claude_completion.py
from typing import Dict, Any
from runtime.node import Node, NodeInput, NodeOutput
import anthropic
import os
class ClaudeCompletionNode(Node):
"""Claude API completion node"""
name = "python.ai.claude"
display_name = "Claude Completion"
category = "AI"
inputs = [
NodeInput("prompt", "string", display_name="Prompt"),
NodeInput("system", "string", display_name="System Prompt", optional=True),
NodeInput("model", "string", display_name="Model",
default="claude-sonnet-4-20250514"),
NodeInput("max_tokens", "number", display_name="Max Tokens", default=1024),
NodeInput("temperature", "number", display_name="Temperature", default=1.0),
NodeInput("api_key", "string", display_name="API Key",
optional=True, secret=True),
NodeInput("execute", "signal", display_name="Execute"),
]
outputs = [
NodeOutput("response", "string", display_name="Response"),
NodeOutput("usage", "object", display_name="Usage Stats"),
NodeOutput("done", "signal", display_name="Done"),
NodeOutput("error", "string", display_name="Error"),
]
async def execute(self, inputs: Dict[str, Any]) -> Dict[str, Any]:
try:
api_key = inputs.get("api_key") or os.getenv("ANTHROPIC_API_KEY")
if not api_key:
raise ValueError("ANTHROPIC_API_KEY not configured")
client = anthropic.Anthropic(api_key=api_key)
message = client.messages.create(
model=inputs.get("model"),
max_tokens=inputs.get("max_tokens"),
temperature=inputs.get("temperature"),
system=inputs.get("system", ""),
messages=[
{"role": "user", "content": inputs.get("prompt")}
]
)
return {
"response": message.content[0].text,
"usage": {
"input_tokens": message.usage.input_tokens,
"output_tokens": message.usage.output_tokens,
},
"done": Signal()
}
except Exception as e:
return {
"error": str(e),
}
Example: LangGraph Agent Node
# packages/noodl-python-runtime/nodes/ai/langgraph_workflow.py
from typing import Dict, Any
from runtime.node import Node, NodeInput, NodeOutput
from langgraph.graph import StateGraph, END
from langchain_anthropic import ChatAnthropic
import json
class LangGraphWorkflowNode(Node):
"""LangGraph multi-agent workflow"""
name = "python.ai.langgraph"
display_name = "LangGraph Workflow"
category = "AI"
inputs = [
NodeInput("workflow_definition", "object",
display_name="Workflow Definition"),
NodeInput("input_data", "object", display_name="Input Data"),
NodeInput("execute", "signal", display_name="Execute"),
]
outputs = [
NodeOutput("result", "object", display_name="Result"),
NodeOutput("state_history", "array", display_name="State History"),
NodeOutput("done", "signal", display_name="Done"),
NodeOutput("error", "string", display_name="Error"),
]
async def execute(self, inputs: Dict[str, Any]) -> Dict[str, Any]:
try:
workflow_def = inputs.get("workflow_definition")
input_data = inputs.get("input_data", {})
# Build LangGraph workflow from definition
graph = self._build_graph(workflow_def)
# Execute
result = await graph.ainvoke(input_data)
return {
"result": result,
"state_history": result.get("_history", []),
"done": Signal()
}
except Exception as e:
return {"error": str(e)}
def _build_graph(self, definition: Dict) -> StateGraph:
# Implementation to build LangGraph from Nodegx definition
# This allows visual design of LangGraph workflows!
pass
PYTHON-004: Language Toggle & Node Registry (0.5 weeks)
Implement:
- Workflow language selector (JavaScript vs. Python)
- Node palette filtering based on language
- Validation to prevent mixing languages
- Migration helpers (JS → Python)
Files to Create:
packages/noodl-editor/src/editor/src/views/WorkflowLanguageSelector.tsx
packages/noodl-runtime/src/nodes/node-registry.ts
UI Changes:
Add language selector to Cloud Functions panel:
┌─────────────────────────────────────────────┐
│ Cloud Functions [+] │
├─────────────────────────────────────────────┤
│ Runtime Language: ○ JavaScript ● Python │
├─────────────────────────────────────────────┤
│ 📁 /#__cloud__/ │
│ ├─ ProcessOrder (JS) │
│ ├─ GenerateReport (JS) │
│ └─ ChatAssistant (Python) 🐍 │
└─────────────────────────────────────────────┘
Node Palette Changes:
When JavaScript selected:
├── HTTP Request (JS)
├── Code (JavaScript)
├── Transform (JS)
└── ...
When Python selected:
├── HTTP Request (Python)
├── Code (Python)
├── Transform (Python)
├── Claude Completion 🤖
├── OpenAI Completion 🤖
├── LangGraph Agent 🤖
├── Vector Store Query 🤖
└── ...
Success Metrics
How we'll know this phase was successful:
Functional Completeness
- Can create webhook endpoints that respond to HTTP requests
- Can schedule workflows with cron expressions
- Can view complete execution history with node-by-node data
- Can deploy workflows to production cloud (Fly.io, Railway, or Render)
- Can monitor workflow performance and errors in real-time
- Can create Python workflows for AI use cases
- Can use Claude/OpenAI APIs in visual workflows
User Experience
- Creating a webhook workflow takes < 5 minutes
- Debugging failed workflows takes < 2 minutes (using execution history)
- Deploying to production takes < 3 minutes
- Setting up AI chat assistant takes < 10 minutes
- No documentation needed for basic workflows (intuitive)
Technical Performance
- Workflow execution overhead < 50ms
- Execution history queries < 100ms
- Real-time monitoring updates < 1 second latency
- Python runtime performance within 20% of JavaScript
- Can handle 1000 concurrent workflow executions
Competitive Position
- Feature parity with n8n core features (triggers, monitoring, deployment)
- Better UX than n8n (visual consistency, execution debugging)
- Unique advantages: AI-first Python runtime, integrated with Nodegx frontend
Risk Assessment
High Risks
-
Python Runtime Complexity ⚠️⚠️⚠️
- Two separate runtimes to maintain
- Language interop challenges
- Deployment complexity increases
- Mitigation: Start with JavaScript-only, add Python in Phase 2
-
Deployment Platform Variability ⚠️⚠️
- Each platform has different constraints
- Difficult to test all scenarios
- User environment issues
- Mitigation: Focus on 2-3 platforms initially (Fly.io, Railway)
-
Execution History Storage Growth ⚠️⚠️
- Could fill disk quickly with large workflows
- Privacy concerns with stored data
- Query performance degradation
- Mitigation: Implement retention policies, data compression, pagination
Medium Risks
-
Monitoring Performance Impact ⚠️
- Metrics collection could slow workflows
- WebSocket connections scale issues
- Mitigation: Async metrics, batching, optional detailed logging
-
Migration from Parse ⚠️
- Users with existing Parse-based workflows
- No clear migration path
- Mitigation: Keep Parse adapter working, provide migration wizard
Low Risks
- UI Complexity ⚠️
- Many new panels and views
- Risk of overwhelming users
- Mitigation: Progressive disclosure, onboarding wizard
Open Questions
-
Database Choice for Production
- SQLite is fine for single-server deployments
- What about multi-region, high-availability?
- Should we support PostgreSQL/MySQL for production?
-
Python Runtime Packaging
- How do we handle Python dependencies?
- Should users provide requirements.txt?
- Do we use virtual environments?
- What about native extensions (requires compilation)?
-
AI Node Pricing
- Claude/OpenAI nodes require API keys
- Do we provide pooled API access with credits?
- Or user brings own keys only?
-
Workflow Versioning
- Should we track workflow versions?
- Enable rollback to previous versions?
- How does this interact with Git?
-
Multi-User Collaboration
- What if multiple people deploy the same workflow?
- How to handle concurrent edits?
- Environment separation (dev/staging/prod per user)?
Next Steps
Immediate Actions
- Validate Vision - Review this document with stakeholders
- Prioritize Features - Which series should we start with?
- Prototype Key Risks - Build proof-of-concept for Python runtime
- Design Review - UI/UX review for new panels and workflows
- Resource Allocation - Assign developers and timeline
Phased Rollout Recommendation
Phase 1 (MVP): Series 1 + Series 2
- Core workflow runtime with triggers and logic nodes
- Execution history and debugging
- Goal: Internal dogfooding, validate architecture
- Timeline: 7 weeks
Phase 2 (Beta): Series 3
- Production deployment to Fly.io
- Basic monitoring
- Goal: Early access users, prove deployment works
- Timeline: 3 weeks
Phase 3 (v1.0): Series 4
- Complete monitoring and alerting
- Polish and bug fixes
- Goal: Public release, compare with n8n
- Timeline: 2 weeks
Phase 4 (v2.0): Bonus - Python Runtime
- Python workflow support
- AI/LLM nodes
- Goal: Differentiation, AI use case enablement
- Timeline: 4 weeks
Appendix: Competitive Analysis
n8n Feature Comparison
| Feature | n8n | Nodegx Current | Nodegx After Phase |
|---|---|---|---|
| Visual workflow editor | ✅ | ✅ | ✅ |
| Webhook triggers | ✅ | ❌ | ✅ |
| Schedule triggers | ✅ | ❌ | ✅ |
| Execution history | ✅ | ❌ | ✅ |
| Error handling | ✅ | ⚠️ Basic | ✅ |
| Monitoring dashboard | ✅ | ❌ | ✅ |
| Self-hosting | ✅ | ⚠️ Local only | ✅ |
| Cloud deployment | ✅ | ❌ | ✅ |
| Custom code nodes | ✅ | ⚠️ Limited | ✅ |
| Python runtime | ❌ | ❌ | ✅ ⭐ |
| AI/LLM nodes | ⚠️ Basic | ❌ | ✅ ⭐ |
| Integrated frontend | ❌ | ✅ | ✅ ⭐ |
| Visual debugging | ⚠️ Limited | ❌ | ✅ ⭐ |
Nodegx Advantages After This Phase:
- ⭐ Native Python runtime for AI workflows
- ⭐ Integrated with visual frontend development
- ⭐ Better execution debugging (pin to canvas)
- ⭐ Single tool for full-stack development
- ⭐ AI-first node library
n8n Advantages:
- Mature ecosystem (400+ integrations)
- Established community
- Extensive documentation
- Battle-tested at scale
- Enterprise features (SSO, RBAC, etc.)
Conclusion
This "Cloud Functions Revival" phase would transform Nodegx from a frontend-focused tool into a true full-stack development platform. The combination of visual workflow design, execution history, production deployment, and especially the Python runtime for AI puts Nodegx in a unique position:
"The only visual development platform where you can design your frontend, build your backend logic, create AI agents, and deploy everything to production - all without leaving the canvas."
The total investment is significant (12-16 weeks) but positions Nodegx to compete directly with n8n while offering unique differentiation through:
- Integrated frontend development
- Python runtime for AI use cases
- Superior debugging experience
- Modern, consistent UI
This could be the feature set that makes Nodegx indispensable for full-stack developers and AI engineers.