Skip to content

Latest commit

Β 

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

OwlFlow

Latest Release License: BSL 1.1 CI/CD Go Version Live Studio Ask DeepWiki Security Policy

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


Key Features

  • ⚑ 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.
  • πŸ”Œ 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).

Architecture Overview

                          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                          β”‚   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  β”‚
        β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Directory Structure

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

Quick Start

Option A: Run Pre-Built Docker Image (Multi-Arch AMD64 & ARM64)

# 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:latest

Option B: Download Pre-Compiled Binary

Download the pre-compiled binary for Linux (AMD64/ARM64), macOS (Apple Silicon/Intel), or Windows from GitHub Releases.

Option C: Build from Source

# Clone the repository
git clone git@github.com:divmora/owlflow.git
cd owlflow

# Build binary
go build -o owlflow cmd/server/main.go

# Run
./owlflow

Option D: Run with Docker Compose (Backend + UI)

docker compose up --build
  • Backend API: http://localhost:8080
  • Developer UI: http://localhost:5173

Trigger a Webhook Workflow

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"
  }'

Example Workflow

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 }}"

Environment Variables

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

Documentation

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.

Development & Building

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-build

Contributing & Community

Contributions, 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.

πŸ“„ License & Commercial Use

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.

About

Lightweight, high-performance workflow automation engine in Go with event-driven webhooks, cron scheduling, and visual DAG studio

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages