ice

ice

Committed to solving flexible and complex hard-coded problems

Get Started Live Demo open in new window Introduction

🎯 Visual Rule Orchestration

Innovative tree-based orchestration with web visual configuration interface. Ensures business decoupling and code reuse while providing maximum flexibility for rule configuration.

⚡ Lightweight & High Performance

Pure in-memory computation with millisecond response time. Near-zero performance overhead, perfectly supporting high-concurrency business scenarios.

🐳 Zero-Dependency Architecture

No MySQL, ZooKeeper, or other external dependencies required. Docker one-click deployment in 5 seconds. JSON file storage with version control support.

🚀 Get Started in 3 Steps

Step 1: Deploy Ice Server

docker run -d --name ice-server -p 8121:8121 \
  -v ./ice-data:/app/ice-data \
  waitmoon/ice-server:latest
# Download from: https://waitmoon.com/downloads/
# Extract and start
tar -xzvf ice-server-*.tar.gz && cd ice-server
sh ice.sh start

Visit http://localhost:8121 to access the visual configuration interface.

Step 2: Integrate Ice Client SDK

Add dependency to your business application:

<dependency>
  <groupId>com.waitmoon.ice</groupId>
  <artifactId>ice-spring-boot-starter-3x</artifactId>
  <version>2.0.1</version>
</dependency>
<dependency>
  <groupId>com.waitmoon.ice</groupId>
  <artifactId>ice-spring-boot-starter-2x</artifactId>
  <version>2.0.1</version>
</dependency>
go get github.com/zjn-zjn/ice/sdks/go
pip install ice-rules
<dependency>
  <groupId>com.waitmoon.ice</groupId>
  <artifactId>ice-core</artifactId>
  <version>2.0.1</version>
</dependency>

Configure shared storage path (same as Server):

ice:
  app: 1
  storage:
    path: ./ice-data
client, _ := ice.NewClient(1, "./ice-data")
client.Start()
client = ice.FileClient(app=1, storage_path="./ice-data")
client.start()

💡 Key Point: Client must share the same storage directory (ice-data) with Server

Step 3: Configure Rules and Execute

  1. Configure business rules in Server's visual interface
  2. Publish rules, Client auto hot-reloads
  3. Call rule execution in your business code
IcePack pack = new IcePack();
pack.setIceId(1L);  // Rule ID
pack.setRoam(new IceRoam().put("uid", 12345));
Ice.syncProcess(pack);
pack := ice.NewPack().SetIceId(1)
pack.Roam.Put("uid", 12345)
ice.SyncProcess(context.Background(), pack)
pack = ice.Pack(ice_id=1)
pack.roam.put("uid", 12345)
ice.sync_process(pack)

👉 View Complete Getting Started Guide | Go SDK Guide | Python SDK Guide

Use Cases

ScenarioDescription
🎁 Marketing CampaignsFlexible configuration for coupons, discounts, group buying rules
💰 Risk ControlCredit risk assessment, anti-fraud, real-time decision engine
🔐 Access ControlDynamic permission management, role configuration
📊 Process OrchestrationTicket routing, approval workflows, state machine management

Why Choose Ice?

FeatureIceTraditional Rule Engines
Learning Curve5 minutes to startNeed to learn DSL
DeploymentDocker one-clickDatabase/middleware required
ConfigurationWeb visual UIText/code
PerformanceIn-memory, millisecondsCompilation overhead
Rule ChangesHot-reload, secondsRestart/redeploy needed

Who's Using Ice?