Unified n8n-style Mainframe Workflow Platform
FlowASM combines IPLLab (assembly engine), ZeroFrame (3270 automation), TK5/Hercules, and z/OS into a single visual workflow platform with drag-and-drop capabilities.
- 🎨 Visual Workflow Builder - n8n-style drag-and-drop interface
- 🔧 Sandboxed ASM Engine - Built-in IPLLab engine for deterministic demos
- 🔌 Multiple Connectors - TK5, z/OS, 3270 terminal automation
- 📊 Live Execution - Watch workflows run with real-time logs
- 💾 Import/Export - Save and share workflows as JSON
- 🔄 Template Variables - Pass data between nodes
- 🚀 Node.js Only - No Python, pure npm
cd FlowASM
npm install
npm startOpen http://localhost:3000 and start building workflows!
Or run the CLI demo:
npm run demoFlowASM is a visual workflow platform that chains mainframe operations:
Assemble Code → Execute → Submit JCL → Verify 3270 → Output
- Sandboxed Execution - Run assembly code locally without external dependencies
- TK5 Integration - Connect to TK5/Hercules emulator for real mainframe ops
- z/OS Integration - Submit jobs to real z/OS systems (secure credentials)
- 3270 Automation - Automate terminal interactions
- Visual Builder - Create workflows with drag-and-drop UI
┌─────────────────────────────────────────────────┐
│ FlowASM Core Engine │
│ (n8n-style orchestrator) │
└──────────┬──────────────────────────────────────┘
│
┌──────┴──────┬──────────┬──────────┐
│ │ │ │
┌───▼────┐ ┌───▼────┐ ┌───▼────┐ ┌───▼────┐
│ ASM │ │ TK5 │ │ z/OS │ │3270/ZF │
│Sandbox │ │Connector│ │Connector│ │Connector│
└────────┘ └────────┘ └────────┘ └────────┘
FlowASM/
├── core/
│ ├── runner.js ← Workflow orchestrator
│ ├── flow-engine.js ← Execution engine
│ └── api.js ← REST API
├── engines/
│ └── asm-sandbox/
│ ├── adapter.js ← Connector adapter
│ └── engine.js ← ASM engine (IPLLab port)
├── connectors/
│ ├── tk5/ ← TK5/Hercules connector
│ ├── zos/ ← z/OS connector
│ └── zeroframe/ ← 3270 terminal connector
├── workflows/
│ ├── payroll-demo.json ← Sandbox demo
│ ├── tk5-demo.json ← TK5 demo
│ └── zos-integration.json ← z/OS demo
├── ui/
│ ├── index.html ← Web interface
│ ├── app.js ← UI logic
│ └── styles.css ← Styling
├── docs/
│ ├── README_DEMO.md ← Demo guide
│ └── CREDENTIALS_TEMPLATE.md ← Security guide
├── server.js ← Main entry point
├── cli-demo.js ← CLI demo runner
└── package.json
No setup required - Runs entirely in asm-sandbox
- Compile payroll assembly code
- Execute calculation (1000 + 250 = 1250)
- Debug and verify result
- Submit JCL via 3270 (stubbed)
- Wait for completion (stubbed)
npm run demoRequires: TK5/Hercules running on localhost:8038
- Compile assembly code
- IPL TK5 system
- Submit job to TK5
- Check job status
export TK5_ENDPOINT=http://localhost:8038
npm start
# Load "TK5 Emulator Demo" in UIRequires: z/OS credentials (see docs/CREDENTIALS_TEMPLATE.md)
- Compile program
- Submit job to real z/OS
- Fetch SMF records
- Read output dataset
export ZOS_ENDPOINT=https://your-zos.com
export ZOS_USERNAME=user
export ZOS_PASSWORD=pass
npm start
# Load "z/OS Integration Example" in UIasm.compile
- Compiles assembly source code
- Returns: bytecode, instructions, labels
asm.run
- Executes compiled bytecode
- Returns: registers, output, exitCode
asm.debug
- Debug session with breakpoints
- Returns: breakpointsHit, stepsExecuted, finalState
tk5.ipl
- IPL (boot) TK5 system
- Config:
{ volume: "SYSRES" }
tk5.submit
- Submit JCL job to TK5
- Config:
{ jobName, jcl }
tk5.status
- Get job status
- Config:
{ jobId }
zos.submit
- Submit JCL to real z/OS
- Config:
{ jcl }
zos.smf
- Fetch SMF records
- Config:
{ dataset }
zos.dataset
- Read dataset content
- Config:
{ dataset }
zeroframe.send
- Send action to 3270 terminal
- Config:
{ action, text }
zeroframe.read
- Read screen content
- Config:
{}
zeroframe.wait
- Wait for expected text
- Config:
{ expectedText, timeout }
Pass data between nodes:
{
"nodes": [
{
"id": "compile",
"type": "asm.compile",
"config": { "sourceCode": "..." }
},
{
"id": "run",
"type": "asm.run",
"config": {
"bytecode": "{{node.compile.artifacts.bytecode}}"
}
}
]
}Health check and connector status
List all workflows
Get workflow definition
Execute a workflow
NEVER commit credentials!
All sensitive configuration via environment variables:
export TK5_ENDPOINT=http://localhost:8038
export ZOS_ENDPOINT=https://zos.example.com
export ZOS_USERNAME=user
export ZOS_PASSWORD=pass
export ZEROFRAME_ENDPOINT=http://localhost:3270See docs/CREDENTIALS_TEMPLATE.md for details.
Connectors automatically fallback to stubbed mode when unavailable:
- asm-sandbox: Always available (built-in)
- tk5: Stubbed if TK5_ENDPOINT not set
- zos: Stubbed if credentials not configured
- zeroframe: Stubbed if ZEROFRAME_ENDPOINT not set
Stubbed connectors return deterministic responses marked with stubbed: true.
- Open http://localhost:3000
- Select workflow from sidebar
- Click nodes to edit configuration
- Click "
▶️ Run Workflow" - Watch execution in real-time
Create workflows/my-workflow.json:
{
"id": "my-workflow",
"name": "My Custom Workflow",
"nodes": [
{
"id": "step1",
"type": "asm.compile",
"description": "Compile code",
"config": {
"sourceCode": ".TEXT\nmain:\n MOV R0, #42\n HLT"
}
}
]
}Execute via API:
curl -X POST http://localhost:3000/api/workflows/execute \
-H "Content-Type: application/json" \
-d @workflows/my-workflow.jsonPort 3000 in use:
PORT=3001 npm startConnector stubbed:
- Check environment variables
- Verify endpoint availability
- See docs/CREDENTIALS_TEMPLATE.md
Workflow fails:
- Check execution log in UI
- Verify JSON syntax
- Inspect node configuration
express- HTTP server (only dependency!)
Theme: Combining separate systems into a unified whole
FlowASM demonstrates this by unifying:
- IPLLab (assembly engine)
- ZeroFrame (3270 automation)
- TK5/Hercules (emulator)
- z/OS (real mainframe)
Into a single n8n-style visual workflow platform.
- Demo Guide - 60-90 second demo script
- Credentials Template - Security configuration
- Try the demo -
npm run demo - Explore UI -
npm start→ http://localhost:3000 - Configure connectors - See docs/CREDENTIALS_TEMPLATE.md
- Build workflows - Create custom automation
- Integrate systems - Connect TK5, z/OS, 3270
Built with Node.js only - No Python, pure npm! 🚀