MeshHook is an MIT-licensed, webhook-first workflow engine with a visual builder (SvelteKit/Svelte 5) and Temporal-like durability via event sourcing on Postgres (Supabase).
- UI/API: SvelteKit (Svelte 5)
- DB/Queues/Realtime/Storage: Supabase (Postgres, Realtime, Storage)
- Workers: Node.js (or Bun), stateless
- Queue: pg-boss or pgmq (Postgres-native)
- Transforms: JMESPath
Feature | n8n | Windmill | Temporal | MeshHook |
---|---|---|---|---|
License | Fair-code (restrictive) | AGPLv3 | MIT | MIT |
Primary Use Case | No-code automation | Script orchestration | Microservice workflows | Webhook-first workflows |
Durability | Database polling | Database + queues | Custom event sourcing | Event sourcing on Postgres |
Visual Builder | ✅ Drag-and-drop | ❌ Code-first | ❌ Code-first | ✅ Visual + Code |
Webhook-Native | ❌ Not primary | ✅ Built-in | ||
Self-Hosted | ✅ Yes | ✅ Yes | ✅ Yes | ✅ Yes |
Database | MySQL/Postgres | Postgres | Custom | Postgres (Supabase) |
Transforms | JavaScript | TypeScript/Python | Any language | JMESPath |
Realtime Logs | ❌ Polling | ❌ Polling | ❌ Polling | ✅ Supabase Realtime |
Deployment | Complex (multiple services) | Complex (workers + API) | Complex (server + workers) | Simple (single service) |
Learning Curve | Low (no-code) | Medium (scripts) | High (SDK required) | Low (visual + simple) |
- Webhook-first: Built specifically for webhook orchestration and transformation
- Simple deployment: Single service on one port, no complex infrastructure
- MIT licensed: Truly open source, use anywhere without restrictions
- Event sourcing: Temporal-like durability without the complexity
- Visual + Code: Low-code visual builder with JMESPath for power users
- Postgres-native: Leverage Supabase for database, queues, realtime, and storage
-
Install dependencies
pnpm install
-
Setup environment (interactive)
pnpm run setup
Select "Local Development" when prompted. This creates
.env.local
with Supabase local defaults. -
Start Supabase locally
pnpx supabase start
-
Run migrations
pnpm run db:migrate
-
Start the orchestrator
pnpm run start
Runs on port 8080 (configurable via PORT environment variable)
-
Install dependencies
pnpm install
-
Setup environment (interactive)
pnpm run setup
Select "Production" or "Staging" and enter your Supabase credentials.
-
Run migrations
pnpm run db:migrate
Automatically detects environment and pushes migrations to remote database.
-
Start the server
pnpm run start
Runs on port 8080 by default. Configure your reverse proxy to forward traffic to this port.
pnpm run setup
- Interactive environment configuration (local/staging/production)pnpm run db:migrate
- Run database migrations (auto-detects environment)pnpm run start
- Start the orchestrator worker (production)pnpm mh --help
- CLI help
.env.local
- Local development (committed to repo with safe defaults).env.staging
- Staging environment (not committed).env.production
- Production environment (not committed).env
- Symlink to active environment (created by setup script)
./docs/Environment-Setup.md
- Detailed environment setup guide./docs/Event-Partitioning.md
- Event partitioning strategy and maintenance./docs/PRD.md
- Product requirements./docs/Architecture.md
- System architecture./docs/diagrams/*.puml
- PlantUML diagrams
MeshHook runs as a single service on port 8080 that handles:
- Webhook intake and processing
- Workflow orchestration
- Background job execution
- HTTP request execution with retries
All components communicate via Supabase (Postgres) - no inter-service HTTP calls needed.