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/IceREADME
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
- GitHub Issues — Bug reports and feature requests
- GitHub Discussions — Questions and discussions
