rulego is a free, open source orchestration & scheduling project written in Go and released under Apache-2.0. It has 1,605 GitHub stars, 156 forks and 4 open issues, and was last pushed 4 days ago. On this registry it ranks #53 of 64 tracked projects in Orchestration & Scheduling, with 5 head-to-head comparisons available. It gained 2 stars over the last 3 tracked days.

What is rulego?

What it is

RuleGo is a Go language rule engine framework for component orchestration. It helps build loosely coupled systems that can respond to changes in business requirements in real time. The project lives in the Go ecosystem and uses the Apache-2.0 license.

The concrete problem it addresses is business logic spread across application code. RuleGo models logic as reusable components and rule chains, so teams can aggregate, filter, distribute, transform, enrich, and execute actions on data without rewriting the surrounding application. It also connects to protocols and systems through configurable endpoints for low-code, data integration, workflows, large model intelligent agents, edge computing, automation, and IoT.

Key capabilities

  • RuleGo supports embedded deployment inside a Go application and standalone deployment as middleware for rule engine and orchestration services.
  • Rule chains combine components into reusable processes, and nested sub-rule chains allow one process to call another without duplicating logic.
  • Dynamic orchestration lets teams replace or add rule chain components without restarting the application.
  • Built-in components include message type switching, JavaScript switching, JavaScript filtering, JavaScript transformation, HTTP push, MQTT push, send email, and log recording.
  • Data integration uses configurable endpoints for HTTP, MQTT, TCP/UDP, UDP, Kafka, and scheduled sources.
  • Extension interfaces support custom and third-party components, with dynamic loading through Go plugins.
  • Context isolation supports high concurrency, and aspect-oriented programming allows added behavior or logic replacement without modifying original node code.

Who uses it and how

  • IoT and edge computing teams can use RuleGo on low-cost devices because the README states it has no external middleware dependencies and supports efficient data processing and linkage.
  • Application developers can embed RuleGo in Go services to move changing business rules out of hard-coded paths and into configurable rule chains and components.
  • Integration projects can use endpoints to receive data from HTTP, MQTT, TCP/UDP, UDP, Kafka, or scheduled sources and route it through filters, transformers, and push actions.
  • Workflow builders and automation teams can use low-code or component-based orchestration to connect email sending, logging, JavaScript transformation, and message routing without changing the core application.

Getting started

The README presents RuleGo as a Go package available through pkg.go.dev as github.com/rulego/rulego. The typical deployment paths are embedding the package into a Go application or running it independently as middleware.

When to use it — and when not to

RuleGo is suitable when a Go team needs a lightweight rule engine that can be embedded or run as middleware and when business logic changes frequently enough to justify configuring rule chains and components. The provided facts do not list paid products that RuleGo replaces, and they do not describe a hosted option, so operators must install, configure, and run the engine and integrations themselves. It is a framework rather than a complete managed application, so teams must build the surrounding service around it.

project readme (upstream, from github) — read inline

RuleGo

GoDoc Go Report codecov test build build QQ-720103251 Mentioned in Awesome Go

English| 简体中文

Official Website | Docs | Contribution Guide

RuleGo is a lightweight, high-performance, embedded, orchestrable component-based rule engine built on the Go language.

It can help you quickly build loosely coupled and flexible systems that can respond and adjust to changes in business requirements in real time.

RuleGo also provides a large number of reusable components that support the aggregation, filtering, distribution, transformation, enrichment, and execution of various actions on data, and can also interact and integrate with various protocols and systems. It has a wide range of application potential in low-code, business code orchestration, data integration, workflows, large model intelligent agents, edge computing, automation, IoT, and other scenarios.

Features

  • Lightweight: No external middleware dependencies, efficient data processing and linkage on low-cost devices, suitable for IoT edge computing.
  • High Performance: Thanks to Go's high-performance characteristics, RuleGo also employs technologies such as coroutine pools and object pools.
  • Dual Mode: Embedded and Standalone Deployment modes. Supports embedding RuleGo into existing applications. It can also be deployed independently as middleware, providing rule engine and orchestration services.
  • Componentized: All business logic is component-based, allowing flexible configuration and reuse.
  • Rule Chains: Flexibly combine and reuse different components to achieve highly customized and scalable business processes.
  • Workflow Orchestration: Supports dynamic orchestration of rule chain components, replacing or adding business logic without restarting the application.
  • Easy Extension: Provides rich and flexible extension interfaces, making it easy to implement custom components or introduce third-party components.
  • Dynamic Loading: Supports dynamic loading of components and extensions through Go plugins.
  • Nested Rule Chains: Supports nesting of sub-rule chains to reuse processes.
  • Built-in Components: Includes a large number of components such as Message Type Switch, JavaScript Switch, JavaScript Filter, JavaScript Transformer, HTTP Push, MQTT Push, Send Email, Log Recording, etc. Other components can be extended as needed.
  • Context Isolation Mechanism: Reliable context isolation mechanism, no need to worry about data streaming in high concurrency situations.
  • AOP Mechanism: Allows adding extra behavior to the execution of rule chains or directly replacing the original logic of rule chains or nodes without modifying their original logic.
  • Data Integration: Allows dynamic configuration of Endpoints, such as HTTP Endpoint, MQTT Endpoint, TCP/UDP Endpoint, UDP Endpoint, Kafka Endpoint, Schedule Endpoint, etc.

Use Cases

RuleGo is an orchestrable rule engine that excels at decoupling your systems.

  • If your system's business is complex and the code is bloated
  • If your business scenarios are highly customized or frequently changing
  • If your system needs to interface with a large number of third-party applications or protocols
  • Or if you need an end-to-end IoT solution
  • Or if you need centralized processing of heterogeneous system data
  • Or if you want to try hot deployment in the Go language... Then the RuleGo framework will be a very good solution.
Typical Use Cases
  • Edge Computing: Deploy RuleGo on edge servers to preprocess data, filter, aggregate, or compute before reporting to the cloud. Data processing rules and distribution rules can be dynamically configured and modified through rule chains without restarting the system.
  • IoT: Collect device data reports, make rule judgments through rule chains, and trigger one or more actions, such as sending emails, alarms, and linking with other devices or systems.
  • Data Distribution: Distribute data to different systems using HTTP, MQTT, or gRPC based on different message types.
  • Application Integration: Use RuleGo as glue to connect various systems or protocols, such as SSH, webhook, Kafka, message queues, databases, ChatGPT, third-party application systems.
  • Centralized Processing of Heterogeneous System Data: Receive data from different sources (such as MQTT, HTTP, WS, TCP/UDP, etc.), then filter, format convert, and distribute to databases, business systems, or dashboards.
  • Highly Customized Business: Decouple highly customized or frequently changing business and manage it with RuleGo rule chains. Business requirements change without needing to restart the main program.
  • Complex Business Orchestration: Encapsulate business into custom components, orchestrate and drive these custom components through RuleGo, and support dynamic adjustment and replacement of business logic.
  • Microservice Orchestration: Orchestrate and drive microservices through RuleGo, or dynamically call third-party services to process business and return results.
  • Decoupling of Business Code and Logic: For example, user points calculation systems, risk control systems.
  • Automation: For example, CI/CD systems, process automation systems, marketing automation systems.
  • Low Code: For example, low-code platforms, iPaaS systems, ETL, LangFlow-like systems (interfacing with large models to extract user intent, then triggering rule chains to interact with other systems or process business).

Architecture Diagram

RuleGo Architecture Diagram

Rule Chain Running Example Diagram

More Running Modes

Installation

Install RuleGo using the go get command:

go get github.com/rulego/rulego
# or
go get gitee.com/rulego/rulego

Usage

RuleGo is extremely simple to use. Just follow these 3 steps:

  1. Define rule chains using JSON:

  2. Import the RuleGo package and use the rule chain definition to create a rule engine instance:

import "github.com/rulego/rulego"
//Load the rule chain definition file.
ruleFile := fs.LoadFile("chain_call_rest_api.json")
// Create a rule engine instance using the rule chain definition
ruleEngine, err := rulego.New("rule01", ruleFile)
  1. Hand over the message payload, message type, and message metadata to the rule engine instance for processing, and then the rule engine will process the message according to the rule chain's definition:
// Define message metadata
metaData := types.NewMetadata()
metaData.PutValue("productType", "test01")
// Define message payload and message type
msg := types.NewMsg(0, "TELEMETRY_MSG", types.JSON, metaData, "{\"temperature\":35}")

// Hand over the message to the rule engine for processing
ruleEngine.OnMsg(msg)

Real time update of rule chain logic without restarting the application

Rule Engine Management API

  • Dynamically update rule chains
// Dynamically update rule chain logic
err := ruleEngine.ReloadSelf(ruleFile)
// Update a node under the rule chain
ruleEngine.ReloadChild("node01", nodeFile)
// Get the rule chain definition
ruleEngine.DSL()
  • Rule Engine Instance Management:
// Load all rule chain definitions in a folder into the rule engine pool
rulego.Load("/rules", rulego.WithConfig(config))
// Get an already created rule engine instance by ID
ruleEngine, ok := rulego.Get("rule01")
// Delete an already created rule engine instance
rulego.Del("rule01")
`

readme truncated — read the full docs on github

Frequently asked questions

Is rulego free to use?

rulego is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does rulego do?

⛓️RuleGo is a lightweight, high-performance, embedded, next-generation component orchestration rule engine framework for Go.

What is rulego written in?

rulego is primarily written in Go. Its source is publicly available at https://github.com/rulego/rulego, and it has 1,605 GitHub stars.