Skip to content
GFlow v1.2.0 released — approval config rework · upcoming approver preview · mobile web app

AI pre-screens · Humans approve ·automation follows.

GFlow Workflow Platform

AI pre-screens: LLMs judge the risk; low-risk items pass straight through
Humans approve: countersign, add-sign, return anywhere — every Chinese-style approval action
Automation follows: the moment it is approved, booking, notifications and ERP write-back run on rule chains

Built on the Apache-2.0 open-source GFlow Engine (on a RuleGo base), with the GFlow Workflow Platform on top providing process, form, rule chain and AI agent designers.

Go 1.24+PostgreSQL / MySQLMulti-tenantSingle-binary deployment
Leave Approval Form
GFLOW-2026-0819-0001 · process_key: leave_approval
ApplicantWang Qiang · R&D
ReasonFamily matters, 5 days of leave
Variablesmsg.days = 5 · msg.reason = "Family matters"
Start→Direct Manager→AI Pre-screen→Auto Booking
After approval✓ Leave ledger updated · ✉ Notifications sent · 0.8s
GFLOW APPROVAL SEALRULEGO-BPM
6
core data tables · runtime/history split
12+
Chinese-style approval actions: add-sign · reject · countersign …
7
BPM extension node types + RuleGo native node library
4
in-house components: process/form/rule chain designers + AI agent
Section 01 · Demo

Watch GFlow run end to end

Start an expense request, watch the amount pick the approval chain, the manager and finance sign in turn, and the admin dashboard close the loop — recorded live from the demo environment.

GFlow · Product demo
Section 00 · Open Source

An open-source core, ready for commercial use

The engine layer, GFlow Engine, is fully open source (Apache-2.0) and free to embed into your systems; the GFlow Workflow Platform builds a complete out-of-the-box product on top of it.

gflow-engine · Apache-2.0

GFlow Engine approval workflow engine

An embeddable Go approval engine: a rule chain DSL is the process definition, 7 tables hold all runtime state — no separate workflow middleware needed.

terminal
$ go get github.com/rulego/gflow-engine
RuleGo · Apache-2.0

The rule engine underneath

A lightweight, high-performance, embeddable component-based Go rule engine — the shared foundation for orchestration, data cleansing and message routing.

terminal
$ go get github.com/rulego/rulego
Section 02 · Capabilities

Countersign everything, then let it run

Countersign, add-sign, reject, transfer, withdraw — Chinese-style approval semantics are the complete foundation. What others cannot tell you is the automation that kicks in after approval.

✦

AI Approval

The aiAgent node hands requests to an LLM: it recognizes amount/reason risk, auto-approves low risk and escalates high risk to humans.

aiAgentauto-approve
☑

Countersign · OR-sign

Parallel or sequential countersigning, unanimous or by ratio; with OR-sign the first approval settles it. Rules are stored as JSON on the task row.

countersignsingleunanimous/majority
✚

Dynamic add-sign / remove-sign

Insert approvers before or after mid-flight, or remove extra countersigners — the parent-child task chain maintains itself.

parent_idsequence_order
↩

Return anywhere

Send a request back to the initiator or any past node; variables and form snapshots travel with it, and the flow stays editable after return.

returnedreturn to initiator
⇄

Transfer · Delegate

Hand a task to someone else; after delegation the original owner stays traceable — every delegate step is recorded.

ownerdelegate_from
⚑

Claim / Race-to-claim

Tasks in the candidate pool (roles/departments) are claimed first-come-first-served, with claim time and handler fully recorded.

claimed_atcandidate
⌫

Withdraw · Retrieve

Initiators can withdraw in-flight requests; completed tasks can be retrieved for rework before the next node acts on them.

withdrawncancelled
◎

CC · Communication

The ccTask node produces CC records; listeners call back into the host app to drive in-app and email notifications.

ccTaskCCTaskCreatedListener
⑂

Conditional · Parallel · Inclusive

jsSwitch gates branch on form variables; fork/join runs branches in parallel; inclusive activates only the matching subset.

jsSwitchforkinclusive
✉

IM Work Notifications

To-dos and CCs pushed straight into DingTalk / WeCom / Feishu; tap the card, land login-free, approve on the phone. Directory sync binds accounts automatically.

dingtalk-workwecom-workfeishu-work
Section 03 · Products

Two shapes, one core

Embed GFlow Engine into your existing systems, or take away a ready-to-use GFlow Workflow Platform.

GFLOW / ENGINE

Open-Source Approval Engine

For developers. One Go library plus 7 tables embeds Chinese-style approval into any existing system — Apache-2.0, modify it freely.

¥ 0Apache-2.0 · Free forever
  • Full approval-engine semantics: countersign / add-sign / reject / transfer / withdraw / suspend
  • Rule chain DSL process definitions (ruleChain + metadata)
  • Multi-tenant tenant_id isolation end to end
  • Versioned process definitions — existing instances keep running the old version
  • Pluggable identity via IdentityService
  • Runtime / history table separation
View source
COMMERCIAL
GFLOW / PLATFORM

GFlow Workflow Platform

For enterprises. A ready-made product out of the box: server + frontend + designers, delivered with source — a business admin configures the first process in 30 minutes.

¥ 15,00050% OFF · Limited timeOne-time license · Source delivery · 1 year of support included
  • Process Designer: tree-style visual orchestration (in-house)
  • Form Designer: gform-designer + template library (in-house)
  • Rule Chain Designer: visual automation orchestration (in-house)
  • AI Agent: AI approval · skills · agent management (in-house)
  • Complete frontend app: initiate / todo / done / CC / stats / tracking
  • Automation orchestration: triggers, HTTP / service task configuration
  • Organization, roles, positions and multi-tenant admin console
  • Monitoring dashboards, notification center, operation audit
  • Full source delivery of server + frontend, unlimited customization
See the full comparison
Section 04 · Designer

A WYSIWYG tree-style designer

Our in-house process designer: tree structure, node drawers, conditional branches with automatic default routes — business admins write zero code. The form designer is built on the same stack.

GFlow · Process Designer / Expense Approval
GFlow process designer — expense approval flow with the approver drawer open
Section 06 · Data Model

The whole engine is only 7 tables

Runtime and history archiving on separate tracks: in-flight data stays minimal, and reporting/audit queries hit the history tables without dragging down production. No relational maze — each table is self-explanatory at a glance.

RUNTIME · in flight (5 tables)
wf_processProcess definition
process_key + versionbusiness key + version, multiple versions per key
definition_jsonfull rule chain DSL text
statusactive / retired
wf_instanceRuntime instance
process_id → wf_processwhich version the instance runs
business_keybusiness order no. (e.g. expense no.)
variablesprocess variables (form data goes into msg)
parent_idsub-process back-link to its parent
wf_taskRuntime task
assignee / ownerhandler / pre-delegation owner
parent_id + sequence_orderparent-child chain for countersign & add-sign
approval_type + approval_ruleOR-sign / countersign rules
wf_task_assigneeCandidate pool
task_id → wf_taskcandidates attached to a task
entity_typerole / department / person
entity_idraw reference, expanded via the identity service on query
wf_task_commentTask comments
task_id → wf_taskstill readable/writable after the task is archived
content + user_idwho said what, and when
HISTORY · archive (2 tables)
wf_hi_instanceHistory instance
ended_at + durationend time and elapsed time
end_reasoncompleted / terminated / withdrawn reason
wf_hi_taskHistory task
comment + end_reasonapproval comment and conclusion snapshot
variablesform snapshot at the moment of completion

The moment an instance finishes, its rows move from wf_instance / wf_task into wf_hi_* and record elapsed time and conclusions; the runtime tables only ever hold "in flight" rows, while the history tables take any index you need for reports — neither disturbs the other.

Read "Data Model: why only 7 tables" →
Section 07 · Architecture

Top to bottom, all in-house

Designers, frontend app, approval engine and rule orchestration — four layers, all our own code, no black-box dependencies. Each layer stands on its own: the engine embeds into your system without gflow, and gflow never locks in your data.

Design Layer
Designers
Process Designer (tree-based)gform-designer Form DesignerRule Chain Designer (automation orchestration)AI Agent (AI approval · skill management)Node config drawer · conditional routing · form permissions
▼
Application · GFlow Platform
Application
Initiate / todo / done / CC / statisticsOrganization · roles & positions · multi-tenant consoleMonitoring · notifications · auditAI agent management · skills · model config
▼
Engine · GFlow Engine
Approval Engine
8 BPM node types: startTask / userTask / ccTask / serviceTask …Countersign · add-sign · return · transfer task state machineIdentityService pluggable identityVersioned deployment · recovery · suspension
▼
Rule Engine · RuleGo
Rule Engine
Rule chain DSL (ruleChain + metadata)switch / fork / join / inclusive / delayautomation node cross-chain calls
▼
Storage
Storage
PostgreSQL / MySQL7 core tables · optional Redis distributed lock
Section 08 · Quick Start

Your first approval flow in three minutes

No middleware to install, no scaffolding to generate. Create the database, connect it, start an instance — you write business code, not workflow code.

main.go
import (
"github.com/rulego/gflow-engine/config"
"github.com/rulego/gflow-engine/service"
)

// 1. Connect the database and the engine is live — 7 tables auto-provisioned
engine := service.NewWorkflowEngine("demo", &config.Config{
Database: &config.DatabaseConfig{
Driver: "postgres",
Dsn: "host=127.0.0.1 dbname=rulego_bpm ...",
},
})
engine.Start(ctx)

// 2. Deploy a process (the DSL is just a RuleGo rule chain)
engine.GetProcessService().Deploy(ctx, &model.WfProcess{
ProcessKey: "expense_approval",
Name: "Expense Approval",
DefinitionJSON: expenseDSL,
}, true)

// 3. Start an instance — form data goes into msg
engine.GetRuntimeService().StartProcessInstanceByKey(
ctx, identity, "expense_approval", bizKey, vars, false)
engine.log
$ go run .
[BPM] engine started · tables migrated (6)
[BPM] deploy expense_approval v1 · active
[BPM] instance i-2026…started · task → mgr001
[AI ] expense ≤ 5000 · auto-approved ✦
[BPM] instance completed · 1.2s
$
  • The engine has zero external dependencies: the Redis lock and message notifications are both optional
  • The DSL interoperates with the RuleGo ecosystem — rule chains can be reused directly as processes
  • Unit tests run on an in-memory SQLite database, no real database needed
Section 09 · Pricing

Open source is free, commercial pricing is clear

GFlow Engine is open source and free forever; the GFlow Workflow Platform is a limited-time 50% off at ¥7,500 (was ¥15,000) with source delivery — no annual subscription, no per-seat billing, no feature black boxes.

GFLOW APPROVAL SEALRULEGO-BPM

Enough reading — go stamp something

The demo environment is a complete production build: log in with admin / admin123 and walk from form design to the final approval stamp — you will know exactly what ¥7,500 buys.

Contact usWeChat rulegoteam·Email rulego@outlook.com

GFlow Engine is open source under Apache-2.0 · GFlow Workflow Platform is commercially licensed