Self-hosted workflow orchestration and RPA platform. Build automation visually, record browser interactions, clean data with local LLMs, and connect everything with pre-built integrations.
- Visual Workflow Editor — DAG-based canvas with drag-and-drop nodes, port connections, and live inspection.
- Browser Recording — Record clicks, typing, and navigation with "Smart Selectors" that self-heal.
- Local LLM Integration — Use Ollama for data normalization, extraction, and decision-making within workflows.
- Resilient Execution — Retries, exponential backoff, error handlers, and human-in-the-loop pauses.
- Secure Secrets — Centralized, encrypted storage for API keys and credentials.
- Enterprise Security — Optional SSO, role-based access control (RBAC), and audit logging.
- Data-Driven — Process CSV, JSON, Excel, and XML files as input sources.
- Collaboration — Edit locking, comments, and audit trails.

<!-- slide -->

- Premium Visual Experience — Modern Glassmorphism UI with Inter typography, polished node aesthetics, and helpful icons.
- Workflow Debugger — Pause, resume, and step through execution with live side-by-side context inspection.
- Real-time Validation — Instant feedback on disconnected nodes and missing required configurations.
- Canvas Superpowers — Multi-step Undo/Redo, persistent MiniMap, and Grid Snapping for pixel-perfect layouts.
- Interactive Tutorial — Built-in guided tour to help you build your first automation in minutes.
Securely store credentials and use them in workflows via {{secrets.API_KEY}}.

Upload and process datasets directly within your automation.

- Node.js 18+
- Ollama (for LLM features)
- Chrome/Chromium (installed via Playwright)
-
Clone the repository
git clone https://github.com/mackeh/Loomwork.git cd Loomwork -
Install dependencies
npm install npx playwright install chromium
-
Start the server
npm start
Open http://localhost:3000 in your browser.
Set SESSION_SECRET to enable authentication middleware. Then add one provider:
export SESSION_SECRET="replace-with-a-long-random-secret"
export BASE_URL="http://localhost:3000"
# Microsoft Entra ID
export ENTRAID_CLIENT_ID="..."
export ENTRAID_CLIENT_SECRET="..."
export ENTRAID_TENANT_ID="..."
# OR Google
export GOOGLE_CLIENT_ID="..."
export GOOGLE_CLIENT_SECRET="..."With auth enabled, API access follows RBAC roles (admin, developer, viewer).
- Go to Workflows > New Workflow.
- Drag nodes from the sidebar (e.g., Web Scraper, LLM Transform, Slack Notify).
- Connect the ports to define the flow.
- Click Run to execute immediately or set up a Trigger (Cron, Webhook).
- Go to Settings > Secrets.
- Add a new secret (e.g.,
OPENAI_API_KEY). - In any node configuration, use
{{secrets.OPENAI_API_KEY}}to inject the value securely.
You can also manage secrets over API:
curl -X POST http://localhost:3000/api/secrets \
-H "Content-Type: application/json" \
-d '{"key":"API_KEY","value":"sk-...","description":"Primary provider key"}'- Click Record in the workflow editor.
- Enter the URL to start from.
- Interact with the browser window. Loomwork captures your actions using robust multi-strategy selectors.
- Stop recording to generate the workflow steps automatically.
Loomwork is built with a modular driver-based architecture:
- Frontend: Hono (SSR) + htmx + Pico CSS
- Backend: Node.js + WebSocket + Better-SQLite3
- Automation: Playwright (Web) + Nut.js (Desktop)
- AI: Ollama (Local LLM)
We welcome contributions! Please see CONTRIBUTING.md for details on how to get started.
MIT. See LICENSE.
If Loomwork helps you, consider supporting the development on Buy Me a Coffee.
