A lightweight visual rule engine for flexible business orchestration
Documentation · Live Demo · Getting Started
- 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
| 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 |
| 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 |
docker run -d --name ice-server -p 8121:8121 \
-v ./ice-data:/app/ice-data waitmoon/ice-server:latestJava · Documentation
Spring Boot 3.x
<dependency>
<groupId>com.waitmoon.ice</groupId>
<artifactId>ice-spring-boot-starter-3x</artifactId>
<version>2.0.1</version>
</dependency>Spring Boot 2.x
<dependency>
<groupId>com.waitmoon.ice</groupId>
<artifactId>ice-spring-boot-starter-2x</artifactId>
<version>2.0.1</version>
</dependency>Non-Spring
<dependency>
<groupId>com.waitmoon.ice</groupId>
<artifactId>ice-core</artifactId>
<version>2.0.1</version>
</dependency>Configuration:
ice:
app: 1
storage:
path: ./ice-data
scan: com.your.packageUsage:
IcePack pack = new IcePack();
pack.setIceId(1L);
pack.setRoam(new IceRoam().put("uid", 12345));
Ice.syncProcess(pack);Go · Documentation
go get github.com/zjn-zjn/ice/sdks/goUsage:
import ice "github.com/zjn-zjn/ice/sdks/go"
func main() {
client, _ := ice.NewClient(1, "./ice-data")
client.Start()
defer client.Destroy()
pack := ice.NewPack().SetIceId(1)
pack.Roam.Put("uid", 12345)
ice.SyncProcess(context.Background(), pack)
}Python · Documentation
pip install ice-rulesUsage:
import ice
client = ice.FileClient(app=1, storage_path="./ice-data")
client.start()
pack = ice.Pack(ice_id=1)
pack.roam.put("uid", 12345)
ice.sync_process(pack)┌──────────────────────────────────────────────────────────┐
│ 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 │
└─────────────────┘ └─────────────────────┘
- GitHub Issues — Bug reports and feature requests
- GitHub Discussions — Questions and discussions