@d34dman/flowdrop 0.0.19 → 0.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +168 -344
- package/dist/components/App.svelte +229 -282
- package/dist/components/ConfigForm.svelte +0 -3
- package/dist/components/ConfigSidebar.svelte +5 -23
- package/dist/components/Navbar.svelte +2 -1
- package/dist/components/NodeStatusOverlay.svelte +1 -0
- package/dist/components/NodeStatusOverlay.svelte.d.ts +1 -0
- package/dist/components/WorkflowEditor.svelte +33 -25
- package/dist/components/layouts/MainLayout.svelte +513 -0
- package/dist/components/layouts/MainLayout.svelte.d.ts +50 -0
- package/dist/components/{GatewayNode.svelte → nodes/GatewayNode.svelte} +3 -3
- package/dist/components/{GatewayNode.svelte.d.ts → nodes/GatewayNode.svelte.d.ts} +1 -1
- package/dist/components/{NotesNode.svelte → nodes/NotesNode.svelte} +2 -2
- package/dist/components/{NotesNode.svelte.d.ts → nodes/NotesNode.svelte.d.ts} +1 -1
- package/dist/components/{SimpleNode.svelte → nodes/SimpleNode.svelte} +2 -2
- package/dist/components/{SimpleNode.svelte.d.ts → nodes/SimpleNode.svelte.d.ts} +1 -1
- package/dist/components/{SquareNode.svelte → nodes/SquareNode.svelte} +2 -2
- package/dist/components/{SquareNode.svelte.d.ts → nodes/SquareNode.svelte.d.ts} +1 -1
- package/dist/components/{TerminalNode.svelte → nodes/TerminalNode.svelte} +2 -2
- package/dist/components/{TerminalNode.svelte.d.ts → nodes/TerminalNode.svelte.d.ts} +1 -1
- package/dist/components/{ToolNode.svelte → nodes/ToolNode.svelte} +2 -2
- package/dist/components/{ToolNode.svelte.d.ts → nodes/ToolNode.svelte.d.ts} +1 -1
- package/dist/components/{WorkflowNode.svelte → nodes/WorkflowNode.svelte} +3 -3
- package/dist/components/{WorkflowNode.svelte.d.ts → nodes/WorkflowNode.svelte.d.ts} +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/index.js +6 -6
- package/dist/registry/builtinNodes.js +7 -7
- package/dist/styles/base.css +15 -1
- package/package.json +7 -2
package/README.md
CHANGED
|
@@ -1,429 +1,253 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="static/logo.svg" alt="FlowDrop" width="120" />
|
|
3
|
+
</p>
|
|
2
4
|
|
|
3
|
-
|
|
5
|
+
<h1 align="center">FlowDrop</h1>
|
|
4
6
|
|
|
5
|
-
|
|
7
|
+
<p align="center">
|
|
8
|
+
<img src="https://img.shields.io/github/actions/workflow/status/d34dman/flowdrop/docker-publish.yml?style=flat-square&label=Build" alt="GitHub pages build status" />
|
|
9
|
+
<a href="https://www.npmjs.com/package/@d34dman/flowdrop"><img src="https://img.shields.io/npm/v/@d34dman/flowdrop?style=flat-square" alt="npm" /></a>
|
|
10
|
+
<img src="https://img.shields.io/npm/unpacked-size/%40d34dman%2Fflowdrop?style=flat-square" alt="NPM Unpacked Size" />
|
|
11
|
+
<img src="https://img.shields.io/npm/types/@d34dman/flowdrop?style=flat-square" alt="npm type definitions" />
|
|
12
|
+
<a href="http://npmjs.com/package/@d34dman/flowdrop"><img src="https://img.shields.io/npm/dt/@d34dman/flowdrop.svg?maxAge=2592000&style=flat-square" alt="npm downloads" /></a>
|
|
13
|
+
</p>
|
|
6
14
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
- **Runtime Configuration**: Build once, deploy anywhere with environment variables
|
|
11
|
-
- **Node System**: Extensible node types with customizable configuration
|
|
12
|
-
- **Real-time Updates**: Live workflow state management with stores
|
|
13
|
-
- **Framework Agnostic**: Can be integrated into any web application
|
|
14
|
-
- **TypeScript Support**: Full type definitions included
|
|
15
|
-
- **Docker Ready**: Production-ready Dockerfile and Docker Compose configuration
|
|
15
|
+
<p align="center">
|
|
16
|
+
<strong>Build beautiful workflow editors in minutes, not months.</strong>
|
|
17
|
+
</p>
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
<p align="center">
|
|
20
|
+
An awesome workflow editor built with Svelte 5 and @xyflow/svelte.<br/>
|
|
21
|
+
You own the backend. You own the data. You own the orchestration.
|
|
22
|
+
</p>
|
|
18
23
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
+
<p align="center">
|
|
25
|
+
<a href="#quickstart">Quickstart</a> •
|
|
26
|
+
<a href="#features">Features</a> •
|
|
27
|
+
<a href="#integration">Integration</a> •
|
|
28
|
+
<a href="#documentation">Docs</a>
|
|
29
|
+
</p>
|
|
24
30
|
|
|
25
|
-
|
|
31
|
+
<p align="center">
|
|
32
|
+
<img src="static/FlowDrop-Screenshot.jpg" alt="FlowDrop Screenshot" width="800" />
|
|
33
|
+
</p>
|
|
34
|
+
<p align="center">
|
|
35
|
+
<em>Build AI-powered workflows with drag-and-drop simplicity. Connect nodes, configure inputs/outputs, and visualize your entire pipeline.</em>
|
|
36
|
+
</p>
|
|
26
37
|
|
|
27
|
-
|
|
28
|
-
npm install @d34dman/flowdrop
|
|
29
|
-
```
|
|
38
|
+
## Why FlowDrop?
|
|
30
39
|
|
|
31
|
-
|
|
40
|
+
Most workflow tools are SaaS platforms that lock you in. Your data lives on their servers. Your execution logic runs in their cloud. You pay per workflow, per user, per run.
|
|
32
41
|
|
|
33
|
-
|
|
34
|
-
@d34dman/flowdrop/
|
|
35
|
-
├── dist/ # Built library files
|
|
36
|
-
│ ├── components/ # Svelte components
|
|
37
|
-
│ ├── types/ # TypeScript definitions
|
|
38
|
-
│ ├── services/ # API and state management
|
|
39
|
-
│ ├── utils/ # Utility functions
|
|
40
|
-
│ └── styles/ # CSS styles
|
|
41
|
-
├── src/ # Source code
|
|
42
|
-
│ └── lib/ # Library source
|
|
43
|
-
│ ├── components/ # Svelte components
|
|
44
|
-
│ ├── services/ # Services and APIs
|
|
45
|
-
│ ├── stores/ # State management
|
|
46
|
-
│ └── types/ # Type definitions
|
|
47
|
-
└── api/ # API documentation
|
|
48
|
-
```
|
|
42
|
+
**FlowDrop is different.**
|
|
49
43
|
|
|
50
|
-
|
|
44
|
+
FlowDrop is a pure visual editor. You implement the backend. You control the orchestration. Your workflows run on your infrastructure, with your security policies, at your scale.
|
|
51
45
|
|
|
52
|
-
|
|
46
|
+
No vendor lock-in. No data leaving your walls. No surprise bills.
|
|
53
47
|
|
|
54
|
-
```
|
|
55
|
-
|
|
56
|
-
import '@d34dman/flowdrop/styles/base.css';
|
|
48
|
+
```bash
|
|
49
|
+
npm install @d34dman/flowdrop
|
|
57
50
|
```
|
|
58
51
|
|
|
59
|
-
|
|
52
|
+
You get a production-ready workflow UI. You keep full control of everything else.
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
## Quickstart
|
|
60
56
|
|
|
61
57
|
```svelte
|
|
62
58
|
<script lang="ts">
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
let nodes: NodeMetadata[] = [
|
|
67
|
-
{
|
|
68
|
-
id: 'text_input',
|
|
69
|
-
name: 'Text Input',
|
|
70
|
-
category: 'input_output',
|
|
71
|
-
description: 'User input field',
|
|
72
|
-
inputs: [],
|
|
73
|
-
outputs: [{ id: 'value', name: 'Value', type: 'output', dataType: 'string' }]
|
|
74
|
-
}
|
|
75
|
-
];
|
|
76
|
-
|
|
77
|
-
let workflow: Workflow = {
|
|
78
|
-
id: 'workflow_1',
|
|
79
|
-
name: 'My Workflow',
|
|
80
|
-
nodes: [],
|
|
81
|
-
edges: []
|
|
82
|
-
};
|
|
59
|
+
import { WorkflowEditor } from "@d34dman/flowdrop";
|
|
60
|
+
import "@d34dman/flowdrop/styles/base.css";
|
|
83
61
|
</script>
|
|
84
62
|
|
|
85
|
-
<WorkflowEditor
|
|
63
|
+
<WorkflowEditor />
|
|
86
64
|
```
|
|
87
65
|
|
|
88
|
-
|
|
66
|
+
**5 lines. One fully-functional workflow editor.**
|
|
89
67
|
|
|
90
|
-
|
|
68
|
+
|
|
69
|
+
## Features
|
|
70
|
+
|
|
71
|
+
| | |
|
|
72
|
+
| --------------------------- | ------------------------------------------------------------------------- |
|
|
73
|
+
| 🎨 **Visual Editor Only** | Pure UI component. No hidden backend, no external dependencies |
|
|
74
|
+
| 🔐 **You Own Everything** | Your data, your servers, your orchestration logic, your security policies |
|
|
75
|
+
| 🔌 **Backend Agnostic** | Connect to any API: Drupal, Laravel, Express, FastAPI, or your own |
|
|
76
|
+
| 🧩 **7 Built-in Node Types** | From simple icons to complex gateway logic |
|
|
77
|
+
| 🎭 **Framework Flexible** | Use as Svelte component or mount into React, Vue, Angular, or vanilla JS |
|
|
78
|
+
| 🐳 **Deploy Anywhere** | Runtime config means build once, deploy everywhere |
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
## Node Types
|
|
82
|
+
|
|
83
|
+
FlowDrop ships with 7 beautifully designed node types:
|
|
84
|
+
|
|
85
|
+
| Type | Purpose |
|
|
86
|
+
| ---------- | --------------------------------------- |
|
|
87
|
+
| `default` | Full-featured nodes with inputs/outputs |
|
|
88
|
+
| `simple` | Compact, space-efficient layout |
|
|
89
|
+
| `square` | Icon-only minimal design |
|
|
90
|
+
| `tool` | AI agent tool nodes |
|
|
91
|
+
| `gateway` | Conditional branching logic |
|
|
92
|
+
| `terminal` | Start/end workflow points |
|
|
93
|
+
| `note` | Markdown documentation blocks |
|
|
94
|
+
|
|
95
|
+
<p align="center">
|
|
96
|
+
<img src="static/Node-Types.jpg" alt="FlowDrop Node Types" width="800" />
|
|
97
|
+
</p>
|
|
98
|
+
<p align="center">
|
|
99
|
+
<em>From simple triggers to complex branching logic, each node type is designed for specific workflow patterns.</em>
|
|
100
|
+
</p>
|
|
101
|
+
|
|
102
|
+
## Integration
|
|
103
|
+
|
|
104
|
+
### Svelte (Native)
|
|
91
105
|
|
|
92
106
|
```svelte
|
|
93
107
|
<script>
|
|
94
|
-
|
|
108
|
+
import { WorkflowEditor, NodeSidebar } from "@d34dman/flowdrop";
|
|
95
109
|
</script>
|
|
96
110
|
|
|
97
|
-
<div class="
|
|
98
|
-
|
|
99
|
-
|
|
111
|
+
<div class="flex h-screen">
|
|
112
|
+
<NodeSidebar {nodes} />
|
|
113
|
+
<WorkflowEditor {nodes} />
|
|
100
114
|
</div>
|
|
101
115
|
```
|
|
102
116
|
|
|
103
|
-
|
|
117
|
+
### Vanilla JS / React / Vue / Angular
|
|
104
118
|
|
|
105
119
|
```javascript
|
|
106
|
-
import {
|
|
107
|
-
|
|
108
|
-
const
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
list: '/workflows',
|
|
116
|
-
get: '/workflows/{id}',
|
|
117
|
-
create: '/workflows',
|
|
118
|
-
update: '/workflows/{id}'
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
}
|
|
120
|
+
import { mountFlowDropApp, createEndpointConfig } from "@d34dman/flowdrop";
|
|
121
|
+
|
|
122
|
+
const app = await mountFlowDropApp(document.getElementById("editor"), {
|
|
123
|
+
workflow: myWorkflow,
|
|
124
|
+
endpointConfig: createEndpointConfig("/api/flowdrop"),
|
|
125
|
+
eventHandlers: {
|
|
126
|
+
onDirtyStateChange: (isDirty) => console.log("Unsaved changes:", isDirty),
|
|
127
|
+
onAfterSave: (workflow) => console.log("Saved!", workflow)
|
|
128
|
+
}
|
|
122
129
|
});
|
|
123
130
|
|
|
124
|
-
//
|
|
125
|
-
|
|
131
|
+
// Full control over the editor
|
|
132
|
+
app.save();
|
|
133
|
+
app.getWorkflow();
|
|
134
|
+
app.destroy();
|
|
126
135
|
```
|
|
127
136
|
|
|
128
|
-
|
|
137
|
+
### Enterprise Integration
|
|
129
138
|
|
|
130
139
|
```javascript
|
|
131
|
-
import { mountFlowDropApp,
|
|
140
|
+
import { mountFlowDropApp, CallbackAuthProvider } from "@d34dman/flowdrop";
|
|
132
141
|
|
|
133
142
|
const app = await mountFlowDropApp(container, {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
// Feature configuration
|
|
153
|
-
features: {
|
|
154
|
-
autoSaveDraft: true,
|
|
155
|
-
autoSaveDraftInterval: 30000,
|
|
156
|
-
showToasts: true
|
|
157
|
-
}
|
|
143
|
+
// Dynamic token refresh
|
|
144
|
+
authProvider: new CallbackAuthProvider({
|
|
145
|
+
getToken: () => authService.getAccessToken(),
|
|
146
|
+
onUnauthorized: () => authService.refreshToken()
|
|
147
|
+
}),
|
|
148
|
+
|
|
149
|
+
// Lifecycle hooks
|
|
150
|
+
eventHandlers: {
|
|
151
|
+
onBeforeUnmount: (workflow, isDirty) => {
|
|
152
|
+
if (isDirty) saveDraft(workflow);
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
|
|
156
|
+
// Auto-save, toasts, and more
|
|
157
|
+
features: {
|
|
158
|
+
autoSaveDraft: true,
|
|
159
|
+
autoSaveDraftInterval: 30000
|
|
160
|
+
}
|
|
158
161
|
});
|
|
159
|
-
|
|
160
|
-
// Access instance methods
|
|
161
|
-
if (app.isDirty()) {
|
|
162
|
-
await app.save();
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
// Get current workflow data
|
|
166
|
-
const workflow = app.getWorkflow();
|
|
167
|
-
|
|
168
|
-
// Cleanup
|
|
169
|
-
app.destroy();
|
|
170
|
-
```
|
|
171
|
-
|
|
172
|
-
#### 3. Integration with Backend Frameworks
|
|
173
|
-
|
|
174
|
-
##### Drupal Example
|
|
175
|
-
|
|
176
|
-
```javascript
|
|
177
|
-
Drupal.behaviors.flowdropEditor = {
|
|
178
|
-
attach: function (context, settings) {
|
|
179
|
-
const container = context.querySelector('.flowdrop-container');
|
|
180
|
-
if (container && window.FlowDrop) {
|
|
181
|
-
window.FlowDrop.mountWorkflowEditor(container, {
|
|
182
|
-
endpointConfig: settings.flowdrop.endpointConfig,
|
|
183
|
-
nodes: settings.flowdrop.nodes
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
};
|
|
188
162
|
```
|
|
189
163
|
|
|
190
|
-
## 📚 Core Components
|
|
191
|
-
|
|
192
|
-
### WorkflowEditor
|
|
193
|
-
|
|
194
|
-
Main editor component for creating and editing workflows.
|
|
195
|
-
|
|
196
|
-
**Props:**
|
|
197
|
-
|
|
198
|
-
- `nodes`: Array of available node types
|
|
199
|
-
- `endpointConfig`: API endpoint configuration
|
|
200
|
-
- `height`: Editor height (default: "100vh")
|
|
201
|
-
- `width`: Editor width (default: "100%")
|
|
202
|
-
- `lockWorkflow`: Disable editing
|
|
203
|
-
- `readOnly`: Read-only mode
|
|
204
|
-
|
|
205
|
-
### NodeSidebar
|
|
206
|
-
|
|
207
|
-
Sidebar displaying available node types.
|
|
208
|
-
|
|
209
|
-
**Props:**
|
|
210
|
-
|
|
211
|
-
- `nodes`: Array of node types to display
|
|
212
|
-
|
|
213
|
-
### ConfigSidebar
|
|
214
|
-
|
|
215
|
-
Configuration panel for selected nodes.
|
|
216
164
|
|
|
217
|
-
|
|
165
|
+
## API Configuration
|
|
218
166
|
|
|
219
|
-
|
|
220
|
-
- `configSchema`: JSON schema for configuration
|
|
221
|
-
- `configValues`: Current configuration values
|
|
222
|
-
- `onSave`: Save handler
|
|
223
|
-
- `onClose`: Close handler
|
|
224
|
-
|
|
225
|
-
## 🔧 API Configuration
|
|
226
|
-
|
|
227
|
-
Configure the API client to connect to your backend:
|
|
167
|
+
Connect to any backend in seconds:
|
|
228
168
|
|
|
229
169
|
```typescript
|
|
230
|
-
import { createEndpointConfig } from
|
|
170
|
+
import { createEndpointConfig } from "@d34dman/flowdrop";
|
|
231
171
|
|
|
232
172
|
const config = createEndpointConfig({
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
execute: '/workflows/{id}/execute'
|
|
246
|
-
}
|
|
247
|
-
},
|
|
248
|
-
timeout: 30000,
|
|
249
|
-
auth: {
|
|
250
|
-
type: 'bearer',
|
|
251
|
-
token: 'your-token'
|
|
252
|
-
}
|
|
173
|
+
baseUrl: "https://api.example.com",
|
|
174
|
+
endpoints: {
|
|
175
|
+
nodes: { list: "/nodes", get: "/nodes/{id}" },
|
|
176
|
+
workflows: {
|
|
177
|
+
list: "/workflows",
|
|
178
|
+
get: "/workflows/{id}",
|
|
179
|
+
create: "/workflows",
|
|
180
|
+
update: "/workflows/{id}",
|
|
181
|
+
execute: "/workflows/{id}/execute"
|
|
182
|
+
}
|
|
183
|
+
},
|
|
184
|
+
auth: { type: "bearer", token: "your-token" }
|
|
253
185
|
});
|
|
254
186
|
```
|
|
255
187
|
|
|
256
|
-
## 🎨 Customization
|
|
257
188
|
|
|
258
|
-
|
|
189
|
+
## Customization
|
|
259
190
|
|
|
260
|
-
|
|
191
|
+
Make it yours with CSS custom properties:
|
|
261
192
|
|
|
262
193
|
```css
|
|
263
194
|
:root {
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
195
|
+
--flowdrop-background-color: #0a0a0a;
|
|
196
|
+
--flowdrop-primary-color: #6366f1;
|
|
197
|
+
--flowdrop-border-color: #27272a;
|
|
198
|
+
--flowdrop-text-color: #fafafa;
|
|
268
199
|
}
|
|
269
200
|
```
|
|
270
201
|
|
|
271
|
-
### Node Types
|
|
272
|
-
|
|
273
|
-
FlowDrop includes 7 built-in visual node types that control how nodes are rendered:
|
|
274
|
-
|
|
275
|
-
| Type | Description | Use Case |
|
|
276
|
-
| ---------- | ------------------------------------------------------- | ------------------------ |
|
|
277
|
-
| `default` | Full-featured workflow node with inputs/outputs display | Standard nodes |
|
|
278
|
-
| `simple` | Compact layout with header, icon, and description | Space-efficient nodes |
|
|
279
|
-
| `square` | Minimal square node showing only an icon | Icon-only representation |
|
|
280
|
-
| `tool` | Specialized node for agent tools with tool metadata | AI agent tools |
|
|
281
|
-
| `gateway` | Branching control flow with multiple output branches | Conditional logic |
|
|
282
|
-
| `terminal` | Circular node for workflow start/end/exit points | Workflow boundaries |
|
|
283
|
-
| `note` | Documentation note with markdown support | Comments/documentation |
|
|
284
|
-
|
|
285
|
-
#### Terminal Nodes
|
|
286
|
-
|
|
287
|
-
Terminal nodes are special circular nodes for workflow boundaries:
|
|
288
|
-
|
|
289
|
-
```typescript
|
|
290
|
-
// Start node - output only
|
|
291
|
-
const startNode: NodeMetadata = {
|
|
292
|
-
id: 'workflow-start',
|
|
293
|
-
name: 'Start',
|
|
294
|
-
type: 'terminal',
|
|
295
|
-
tags: ['start'],
|
|
296
|
-
inputs: [],
|
|
297
|
-
outputs: [{ id: 'trigger', name: 'Go', type: 'output', dataType: 'trigger' }]
|
|
298
|
-
};
|
|
299
|
-
|
|
300
|
-
// End node - input only
|
|
301
|
-
const endNode: NodeMetadata = {
|
|
302
|
-
id: 'workflow-end',
|
|
303
|
-
name: 'End',
|
|
304
|
-
type: 'terminal',
|
|
305
|
-
tags: ['end'],
|
|
306
|
-
inputs: [{ id: 'done', name: 'Done', type: 'input', dataType: 'trigger' }],
|
|
307
|
-
outputs: []
|
|
308
|
-
};
|
|
309
|
-
```
|
|
310
|
-
|
|
311
202
|
|
|
312
|
-
##
|
|
203
|
+
## Deploy
|
|
313
204
|
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
### Required Endpoints
|
|
317
|
-
|
|
318
|
-
- `GET /api/nodes` - List available node types
|
|
319
|
-
- `GET /api/workflows` - List workflows
|
|
320
|
-
- `GET /api/workflows/{id}` - Get workflow
|
|
321
|
-
- `POST /api/workflows` - Create workflow
|
|
322
|
-
- `PUT /api/workflows/{id}` - Update workflow
|
|
323
|
-
- `DELETE /api/workflows/{id}` - Delete workflow
|
|
324
|
-
- `POST /api/workflows/{id}/execute` - Execute workflow
|
|
325
|
-
|
|
326
|
-
See `API.md` for detailed endpoint specifications.
|
|
327
|
-
|
|
328
|
-
## 🧪 Testing
|
|
205
|
+
### Docker (Recommended)
|
|
329
206
|
|
|
330
207
|
```bash
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
# E2E tests
|
|
335
|
-
npm run test:e2e
|
|
336
|
-
|
|
337
|
-
# All tests
|
|
338
|
-
npm test
|
|
208
|
+
cp env.example .env
|
|
209
|
+
docker-compose up -d
|
|
339
210
|
```
|
|
340
211
|
|
|
341
|
-
|
|
212
|
+
### Node.js
|
|
342
213
|
|
|
343
214
|
```bash
|
|
344
|
-
# Install dependencies
|
|
345
|
-
npm install
|
|
346
|
-
|
|
347
|
-
# Development server
|
|
348
|
-
npm run dev
|
|
349
|
-
|
|
350
|
-
# Build library
|
|
351
215
|
npm run build
|
|
352
|
-
|
|
353
|
-
# Build for production
|
|
354
|
-
npm run build:production
|
|
355
|
-
|
|
356
|
-
# Linting
|
|
357
|
-
npm run lint
|
|
358
|
-
|
|
359
|
-
# Format code
|
|
360
|
-
npm run format
|
|
216
|
+
FLOWDROP_API_BASE_URL=http://your-backend/api node build
|
|
361
217
|
```
|
|
362
218
|
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
- **API.md** - REST API specification
|
|
366
|
-
- **CHANGELOG.md** - Version history
|
|
367
|
-
|
|
368
|
-
## 🤝 Contributing
|
|
219
|
+
Runtime configuration means you build once and deploy to staging, production, or anywhere else with just environment variables.
|
|
369
220
|
|
|
370
|
-
Not accepting contributions until the library stabilizes. Stay tuned.
|
|
371
221
|
|
|
372
|
-
## 📄 License
|
|
373
222
|
|
|
374
|
-
|
|
223
|
+
## Documentation
|
|
375
224
|
|
|
376
|
-
|
|
225
|
+
| Resource | Description |
|
|
226
|
+
| ---------------------------------- | ------------------------ |
|
|
227
|
+
| [API.md](./API.md) | REST API specification |
|
|
228
|
+
| [DOCKER.md](./DOCKER.md) | Docker deployment guide |
|
|
229
|
+
| [QUICK_START.md](./QUICK_START.md) | Get running in 5 minutes |
|
|
230
|
+
| [CHANGELOG.md](./CHANGELOG.md) | Version history |
|
|
377
231
|
|
|
378
|
-
|
|
379
|
-
- Create an issue in the project repository
|
|
380
|
-
- Review the examples in `src/lib/examples/`
|
|
381
|
-
|
|
382
|
-
## 🚢 Deployment
|
|
383
|
-
|
|
384
|
-
FlowDrop uses **runtime configuration** instead of build-time environment variables, allowing you to build once and deploy to multiple environments.
|
|
385
|
-
|
|
386
|
-
### Quick Start with Docker
|
|
232
|
+
## Development
|
|
387
233
|
|
|
388
234
|
```bash
|
|
389
|
-
#
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
#
|
|
393
|
-
# Set FLOWDROP_API_BASE_URL to your backend API URL
|
|
394
|
-
|
|
395
|
-
# Start with Docker Compose
|
|
396
|
-
docker-compose up -d
|
|
235
|
+
npm install # Install dependencies
|
|
236
|
+
npm run dev # Start dev server
|
|
237
|
+
npm run build # Build library
|
|
238
|
+
npm test # Run all tests
|
|
397
239
|
```
|
|
398
240
|
|
|
399
|
-
### Environment Variables
|
|
400
|
-
|
|
401
|
-
**Production (Runtime):**
|
|
402
|
-
|
|
403
|
-
- `FLOWDROP_API_BASE_URL` - Backend API URL
|
|
404
|
-
- `FLOWDROP_THEME` - UI theme (light/dark/auto)
|
|
405
|
-
- `FLOWDROP_TIMEOUT` - Request timeout in milliseconds
|
|
406
|
-
- `FLOWDROP_AUTH_TYPE` - Authentication type (none/bearer/api_key/custom)
|
|
407
|
-
- `FLOWDROP_AUTH_TOKEN` - Authentication token
|
|
408
|
-
|
|
409
|
-
### Build for Production
|
|
410
241
|
|
|
411
|
-
|
|
412
|
-
# Install dependencies
|
|
413
|
-
npm ci
|
|
414
|
-
|
|
415
|
-
# Build the application
|
|
416
|
-
npm run build
|
|
417
|
-
|
|
418
|
-
# Set environment variables and start
|
|
419
|
-
export FLOWDROP_API_BASE_URL=http://your-backend:8080/api/flowdrop
|
|
420
|
-
node build
|
|
421
|
-
```
|
|
242
|
+
## Contributing
|
|
422
243
|
|
|
423
|
-
|
|
244
|
+
FlowDrop is stabilizing. Contributions will open soon. Star the repo to stay updated.
|
|
424
245
|
|
|
425
|
-
- [DOCKER.md](./DOCKER.md) - Docker quick start
|
|
426
246
|
|
|
427
|
-
|
|
247
|
+
<p align="center">
|
|
248
|
+
<strong>FlowDrop</strong> - The visual workflow editor you own completely
|
|
249
|
+
</p>
|
|
428
250
|
|
|
429
|
-
|
|
251
|
+
<p align="center">
|
|
252
|
+
Built with ❤️ Svelte 5 and @xyflow/svelte
|
|
253
|
+
</p>
|