OwlFlow is a lightweight, high-performance, and extensible workflow automation engine written in Go. It enables event-driven and scheduled workflow execution with declarative YAML/JSON configurations, dynamic templating, conditional branching, and modular connectors.
Try the OwlFlow Studio Live Playground directly in your browser.
Live Studio β’ Roadmap β’ Documentation β’ Ask DeepWiki
- β‘ Declarative Workflows: Define complex workflows, step transitions, and error handling in clean YAML or JSON.
- π Conditional Branching & DAG Execution: Execute steps sequentially, conditionally, or in parallel branches based on dynamic step outputs.
- β° Flexible Triggers:
- Webhooks: REST endpoints supporting payload parsing (
JSON,form-data), header inspection, and secret validation (GitLab token & GitHub HMAC SHA-256 signatures). - Cron Schedules: Sub-minute and second-precision scheduling with optional timezone support.
- Webhooks: REST endpoints supporting payload parsing (
- π Extensible Connectors: Built-in connectors for HTTP, GitLab, Jira, Logger, and Internal Data Processing, with an interface to easily register custom connectors.
- π Powerful Templating Engine: Evaluate dynamic parameters and condition expressions using Go templating with built-in helpers (
toJson,toPrettyJson,first,index,hasPrefix,regexMatch,matches). - π₯οΈ Developer Studio & Visualizer: Interactive web UI (React + Vite + Tailwind) hosted on GitHub Pages with real-time YAML validation, interactive DAG flowcharts, built-in Component Guide & Cheat Sheet, and client-side dry-run simulation.
- βοΈ Cloud Native & Serverless Ready: Runs seamlessly as a standalone microservice, Docker container, or AWS Lambda function (via AWS Lambda Web Adapter).
ββββββββββββββββββββββββββ
β Trigger / Ingestion β
βββββββββββββ¬βββββββββββββ
β
ββββββββββββββββββββ΄βββββββββββββββββββ
βΌ βΌ
βββββββββββββββββββββββ βββββββββββββββββββββββ
β Webhook Ingress β β Cron Scheduler β
β (Gin REST Server) β β (robfig/cron) β
ββββββββββββ¬βββββββββββ ββββββββββββ¬βββββββββββ
β β
ββββββββββββββββββββ¬βββββββββββββββββββ
β
βΌ
ββββββββββββββββββββββββββ
β Execution Engine β
β - Parameter Resolution β
β - Condition Evaluator β
β - Retry & Error Handle β
βββββββββββββ¬βββββββββββββ
β
ββββββββββββββββββββββββΌβββββββββββββββββββββββ
βΌ βΌ βΌ
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
β HTTP β β GitLab β β Jira β
β Connector β β Connector β β Connector β
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
β β β
βΌ βΌ βΌ
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
β Logger β β Internal β β Custom β
β Connector β β Data Filters β β Connectors β
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
owlflow/
βββ cmd/
β βββ server/
β βββ main.go # Application entrypoint & scheduler boot
βββ configs/
β βββ workflows/ # Declarative workflow definitions (.yaml / .json)
β βββ github-monitor.yaml
β βββ gitlab-monitor.yaml
β βββ schedule_test.yaml
β βββ test-workflow.yaml
βββ docs/ # Detailed documentation and guides
β βββ overview.md # Architecture and execution lifecycle
β βββ getting-started.md # Quickstart and setup tutorial
β βββ configuration.md # Workflow syntax and schema reference
β βββ connectors.md # Built-in connectors reference & custom connectors
β βββ templating-and-conditions.md # Templating helpers & condition expressions
β βββ deployment.md # Docker, AWS (Lambda/ECS), and CloudFormation deployment guide
β βββ ui.md # Developer UI and simulator reference
βββ internal/
β βββ connectors/ # Connector implementations
β β βββ base.go # Connector interface and registry
β β βββ gitlab.go # GitLab API actions
β β βββ http.go # Generic HTTP client actions
β β βββ internal.go # JSON/data extraction & regex utilities
β β βββ jira.go # Jira Cloud transitions & search
β β βββ logger.go # Structured JSON logger
β βββ core/ # Core execution engine
β β βββ condition.go # Condition evaluation & parameter resolution
β β βββ execution.go # Step execution queue & context management
β β βββ scheduler.go # Cron scheduler runner
β β βββ template.go # Go template helper functions
β β βββ workflow.go # Workflow domain models and validation
β βββ server/
β βββ api.go # Gin API routes and webhook security
βββ ui/ # Standalone React + Vite + Tailwind Developer UI
β βββ src/ # UI components, DAG canvas, simulator engine
β βββ Dockerfile # Dev container with hot reloading
β βββ package.json # Managed with pnpm
βββ AGENTS.md # Architecture & guidelines for AI coding agents
βββ docker-compose.yaml # Multi-service local setup (Go engine + UI)
βββ Dockerfile # Multi-stage container build with Lambda Adapter
βββ go.mod
βββ go.sum
βββ README.md
# Run latest image from GitHub Container Registry
docker run -d \
-p 8080:8080 \
--name owlflow \
-v $(pwd)/configs/workflows:/app/configs/workflows \
ghcr.io/divmora/owlflow:latestDownload the pre-compiled binary for Linux (AMD64/ARM64), macOS (Apple Silicon/Intel), or Windows from GitHub Releases.
# Clone the repository
git clone git@github.com:divmora/owlflow.git
cd owlflow
# Build binary
go build -o owlflow cmd/server/main.go
# Run
./owlflowdocker compose up --build- Backend API:
http://localhost:8080 - Developer UI:
http://localhost:5173
curl -X POST http://localhost:8080/webhook/test-workflow \
-H "Content-Type: application/json" \
-d '{
"event": "ping",
"data": "test_event",
"timestamp": "2026-08-20T12:00:00Z"
}'Here is a sample webhook workflow with conditional branching and Slack alerting:
id: "github-monitor"
name: "GitHub Repository Monitor"
status: "active"
trigger:
type: "webhook"
config:
path: "/github-webhook"
initial_step: "check_commit"
steps:
- id: "check_commit"
action: "http.get"
params:
url: "https://api.github.com/repos/{{ .trigger.payload.repo }}/commits"
next_steps:
- step_id: "notify_slack"
condition: '{{ .steps.check_commit.output.status_code }} != 200'
- step_id: "log_success"
condition: '{{ .steps.check_commit.output.status_code }} == 200'
- id: "notify_slack"
action: "http.post"
params:
url: "https://hooks.slack.com/services/YOUR/WEBHOOK/URL"
headers:
Content-Type: "application/json"
body: '{"text": "GitHub API Error: {{ .steps.check_commit.output.body }}"}'
- id: "log_success"
action: "logger.info"
params:
message: "Successfully verified commits for repo {{ .trigger.payload.repo }}"| Variable | Description | Default |
|---|---|---|
PORT |
Port for the HTTP API server | 8080 |
GITLAB_TOKEN |
Private / Personal Access Token for GitLab API | None |
JIRA_USER |
Jira Cloud username / email | None |
JIRA_TOKEN |
Jira Cloud API token / password | None |
JIRA_BASE_URL |
Base URL for Jira Cloud instance | None |
SYSLOG_ENABLED |
Enable forwarding all logger events to Syslog (true / false) |
false |
SYSLOG_ADDR |
Remote Syslog host and port (e.g. 127.0.0.1:514) |
Local socket |
SYSLOG_NETWORK |
Protocol for remote Syslog (udp or tcp) |
udp |
SYSLOG_TAG |
Program identifier tag in Syslog messages | owlflow |
SYSLOG_ONLY |
When true, suppresses stdout logging and only outputs to Syslog |
false |
AWS_LAMBDA_FUNCTION_NAME |
Set by AWS Lambda runtime (activates synchronous execution mode) | None |
Comprehensive guides and references are available in the docs/ directory:
- π Architecture & Overview: Deep dive into the execution lifecycle, execution context, and design principles.
- π Getting Started Guide: Step-by-step setup, creating your first workflow, and testing.
- βοΈ Configuration Guide: Complete YAML schema, triggers, step options, retries, and variables.
- π Connectors Reference: Details on all built-in actions (
http,gitlab,jira,logger,internal) and how to build custom connectors. - π£ Templating & Conditions: Template functions (
toJson,first,index,hasPrefix), context variables, and condition evaluation syntax. - π₯οΈ Developer UI & Visualizer: Interactive web UI, real-time validator, DAG flowchart, and dry-run simulator.
- π³ Deployment Guide: Running via Docker, Docker Compose, Kubernetes, AWS Lambda (Serverless), ECS Fargate, and CloudFormation.
- π€ Agent Guidelines: Architecture, coding conventions, testing procedures, and guidelines for AI coding agents.
OwlFlow provides standardized build and testing automation via make:
# Compile server binary into bin/owlflow
make build
# Run Go unit test suite with race detector
make test
# Generate HTML code coverage report
make test-coverage
# Format Go source code and run static analysis
make fmt
make lint
# Run UI tests and build production assets
make ui-test
make ui-build
# Build unified GitHub Pages documentation and Studio bundle
make ui-pages
# Build container image
make docker-buildContributions, bug reports, and feature requests are welcome! Please read our community guidelines:
- π Contributing Guide: Local setup, Conventional Commits, and pull request checklist.
- π Code of Conduct: Standards for a welcoming and respectful community.
- π Security Policy: Vulnerability disclosure procedure and 48-hour response SLA.
This project is licensed under the Business Source License 1.1 (BSL 1.1).
- Non-Production Use: Free of charge for local development, staging, QA, testing, CI/CD automated validation, educational purposes, and proof-of-concept evaluation.
- Production Deployments: Requires a commercial license (EULA) from DIVMORA Technologies.
- Change Date: Converts automatically to Apache License 2.0 three (3) years after the release date of the specific version.
For commercial inquiries and enterprise licensing, please contact licensing@divmora.com or visit divmora.com. See LICENSE and DIVMORA Licensing Policy for full terms.