SkillAgentSearch skills...

Ice

Rule engine/process engine, committed to solving flexible and complex hard-coded problems, for complex/flexibly changing business, provide a new abstract orchestration solution that is lightweight, high-performance and provides visual operation pages. Java规则引擎-ice,针对复杂/灵活变动业务,提供一个新的抽象编排解决方案,轻量级,高性能并提供可视化操作页面

Install / Use

/learn @zjn-zjn/Ice

README

<p align="center"> <img width="140" alt="Ice" src="https://waitmoon.com/images/hero.svg"> </p> <h1 align="center">Ice</h1> <p align="center"> A lightweight visual rule engine for flexible business orchestration </p> <p align="center"> <a href="https://www.apache.org/licenses/LICENSE-2.0.html"><img src="https://img.shields.io/badge/license-Apache%202-blue.svg" alt="License"></a> <a href="https://central.sonatype.com/artifact/com.waitmoon.ice/ice"><img src="https://img.shields.io/maven-central/v/com.waitmoon.ice/ice.svg" alt="Maven Central"></a> <a href="https://pkg.go.dev/github.com/zjn-zjn/ice/sdks/go"><img src="https://pkg.go.dev/badge/github.com/zjn-zjn/ice/sdks/go.svg" alt="Go Reference"></a> <a href="https://pypi.org/project/ice-rules/"><img src="https://img.shields.io/pypi/v/ice-rules.svg" alt="PyPI"></a> <a href="https://hub.docker.com/r/waitmoon/ice-server"><img src="https://img.shields.io/docker/pulls/waitmoon/ice-server" alt="Docker Pulls"></a> </p> <p align="center"> <a href="https://waitmoon.com/en/">Documentation</a> · <a href="https://eg.waitmoon.com">Live Demo</a> · <a href="https://waitmoon.com/en/guide/getting-started.html">Getting Started</a> </p> <p align="center"> <a href="./README_zh.md">中文</a> </p>

Features

  • Visual Configuration — Web-based tree editor for rule orchestration
  • Zero Dependencies — No database or middleware required, file-based storage
  • Multi-Language SDKs — Java, Go, and Python with full feature parity
  • Hot Reload — Configuration changes take effect in seconds
  • High Performance — Pure in-memory execution with millisecond latency

Why Ice?

| | Ice | Traditional Rule Engines | |---|---|---| | Learning Curve | 5 minutes to get started | Need to learn DSL syntax | | Deployment | Docker one-click deploy | Requires database/middleware | | Configuration | Visual web UI | Text/code-based | | Performance | In-memory, millisecond latency | Compilation overhead | | Hot Reload | Seconds, no restart | Often requires restart |

Use Cases

| Scenario | Description | |----------|-------------| | Marketing Campaigns | Coupons, discounts, promotions, flash sales | | Risk Control | Credit assessment, anti-fraud, real-time decisions | | Dynamic Pricing | Price strategies, discount rules, tiered pricing | | Access Control | Permission management, feature flags, A/B testing | | Process Orchestration | Approval workflows, order processing, state machines |

Installation

Server

docker run -d --name ice-server -p 8121:8121 \
  -v ./ice-data:/app/ice-data waitmoon/ice-server:latest

Client SDKs

<details open> <summary><b>Java</b> · <a href="https://waitmoon.com/en/guide/getting-started.html">Documentation</a></summary>
<dependency>
  <groupId>com.waitmoon.ice</groupId>
  <artifactId>ice-core</artifactId>
  <version>4.0.5</version>
</dependency>
IceFileClient client = new IceFileClient(1, "./ice-data", "com.your.package");
client.start();

IceRoam roam = IceRoam.create();
roam.setId(1L);
roam.put("uid", 12345);
Ice.syncProcess(roam);
</details> <details> <summary><b>Go</b> · <a href="https://waitmoon.com/en/guide/go-sdk.html">Documentation</a></summary>
go get github.com/zjn-zjn/ice/sdks/go

Usage:

import ice "github.com/zjn-zjn/ice/sdks/go"

func main() {
    client, _ := ice.NewClient(1, "./ice-data")
    client.Start()
    defer client.Destroy()

    roam := ice.NewRoam()
    roam.SetId(1)
    roam.Put("uid", 12345)
    ice.SyncProcess(context.Background(), roam)
}
</details> <details> <summary><b>Python</b> · <a href="https://waitmoon.com/en/guide/python-sdk.html">Documentation</a></summary>
pip install ice-rules

Usage:

import ice

client = ice.FileClient(app=1, storage_path="./ice-data")
client.start()

roam = ice.Roam.create()
roam.set_id(1)
roam.put("uid", 12345)
ice.sync_process(roam)
</details>

Architecture

┌──────────────────────────────────────────────────────────┐
│                  Shared Storage (ice-data/)              │
│    ┌────────┐   ┌────────┐   ┌────────┐   ┌──────────┐   │
│    │ apps/  │   │ bases/ │   │ confs/ │   │ versions/│   │
│    └────────┘   └────────┘   └────────┘   └──────────┘   │
└──────────────────────────────────────────────────────────┘
         ▲                                    ▲
         │ Write                              │ Read (Poll)
         │                                    │
┌────────┴────────┐                ┌──────────┴──────────┐
│   Ice Server    │                │     Ice Client      │
│                 │                │                     │
│  • Web UI       │                │  • Version polling  │
│  • Rule editor  │                │  • Hot reload       │
│  • Publishing   │                │  • In-memory exec   │
└─────────────────┘                └─────────────────────┘

Documentation

Community

License

Apache License 2.0

View on GitHub
GitHub Stars661
CategoryDevelopment
Updated2d ago
Forks132

Languages

Go

Security Score

100/100

Audited on Mar 25, 2026

No findings