Skip to content

Decision Guide

Prerequisites: All Concepts.


High-level flowchart for FluxRules usage decisions.

Is FluxRules right for your use case?

Do you need to: - Execute business rules conditionally? (Yes → continue) - Match complex logic against data? (Yes → continue) - Change rules without code deployment? (Yes → continue)

If all yes: FluxRules is a good fit.

Integration: Library vs API?

Library mode (in-process): - Import FluxRules in your app - Evaluate locally - No network overhead - Single deployment unit

from fluxrules import Rule
from fluxrules.engine.phreak import PhreakEngine

engine = PhreakEngine()
rule = Rule(
    name="adult",
    condition_dsl={"type": "condition", "field": "age", "op": ">=", "value": 18},
    action="allow",
    persist=False,
)
engine.load_rules([rule])
fact = {"age": 21}
result = engine.evaluate(fact)

API mode (microservice): - Run FluxRules as separate service - Evaluate via HTTP - Network latency added - Separate deployment and scaling

curl -X POST http://fluxrules-service/api/v1/evaluate \
  -d '{"facts": {...}}'

Decision: - Single app, fast iteration → Library - Multiple services, shared rules → API - High scale requirements → API

Persistence: Store rules or keep in-memory?

In-memory (default): - Rules defined in code - No database needed - Rules reset on app restart

# python skip
engine.load_rules([rule1, rule2, ...])

Persistent (database): - Rules stored in database - Load rules on startup - Audit trail available - Requires [sql] extra

export DATABASE_URL=postgresql://...
service.persist_rules([rule1, rule2, ...])

Decision: - Prototype/testing → In-memory - Production/stable rules → Persistent - Rules change frequently → Persistent

State management: Stateless or stateful?

Stateless (each evaluation independent): - Default behavior - No side effects between evaluations - Simple, predictable

# python skip
result1 = engine.evaluate(fact1)
result2 = engine.evaluate(fact2)  # No state from result1

Stateful (multi-step workflow with sessions): - Accumulate facts across evaluations - Session snapshot support - Requires [sql] extra

# python skip
session.add_fact("step1", value)
session.evaluate()
session.add_fact("step2", value)
session.evaluate()

Decision: - Single fact evaluation → Stateless - Multi-step workflow → Stateful


Next Steps