Open-source transaction monitoring engine for business rules
Project description
ezrules
Open-source transaction monitoring for teams that need clear rule control, auditability, and fast operational changes.
ezrules gives fraud, risk, and compliance administrators a web workspace for managing decision rules without turning every policy update into an engineering project. Rules can be drafted, tested, reviewed, promoted, paused, rolled out, and audited from one place, while your systems keep sending events to a simple evaluation API.
Why Teams Use It
- Own the rule lifecycle. Create rules, keep drafts separate from live logic, pause risky rules, restore older revisions, and promote changes deliberately.
- See what happened. Review evaluated events, the outcome returned, every rule that fired, and the exact event fields those rules used.
- Improve rules with evidence. Use labels, precision/recall reports, backtests, shadow rules, and percentage rollouts before changing production decisions.
- Run with admin controls. Manage roles, permissions, API keys, outcomes, user lists, field types, strict mode, and audit history inside the product.
- Self-host it. Run the full stack yourself with PostgreSQL, Redis, FastAPI, Celery, and the web UI.
Demo
The demo stack starts with sample rules, outcomes, labels, and evaluated events.
git clone https://github.com/sofeikov/ezrules.git
cd ezrules
docker compose -f docker-compose.demo.yml up --build
Then open:
| Service | URL |
|---|---|
| Web UI | http://localhost:4200 |
| API | http://localhost:8888 |
| Mail UI | http://localhost:8025 |
Login with admin@example.com / admin.
To stop and remove the demo data:
docker compose -f docker-compose.demo.yml down -v
Trace A Decision Field By Field
Product Tour
Manage Live Rules
Create and maintain the rule set from a reviewable UI. Active rules, drafts, ordering, lifecycle actions, and rule status are visible in one place.
Inspect Rule Logic And Performance
Each rule has its own detail view with source logic, test payloads, historical revisions, backtesting, and hit/outcome performance.
Review Tested Events
The Tested Events view connects decisions back to the raw payload, triggered rules, labels, and resolved outcomes. Referenced fields are highlighted so an admin can see why a rule fired.
Measure Rule Quality
When events are labeled, ezrules can compare outcomes to ground truth and rank rules by precision, recall, F1, true positives, false positives, and false negatives.
How It Fits Into Your System
Your application sends an event to ezrules, and ezrules returns the resolved outcome.
curl -X POST http://localhost:8888/api/v2/evaluate \
-H "Content-Type: application/json" \
-H "X-API-Key: <api-key>" \
-d '{
"event_id": "txn_123",
"event_timestamp": "2026-04-23T12:00:00Z",
"event_data": {
"amount": 875.50,
"currency": "EUR",
"customer_country": "US",
"shipping_country": "MX",
"has_3ds": 0
}
}'
The result is stored for review in the UI, including the winning outcome and the rules that contributed to the decision.
Core Workflows
- Rule authoring: write rule logic with validation, observed field references, configured outcomes, and list references.
- Shadow deployment: observe what a rule would do on live traffic without changing production outcomes.
- Rule rollouts: send a stable percentage of traffic through a candidate rule before full promotion.
- Backtesting: compare proposed logic against historical events before release.
- Labeling and quality reports: upload or assign labels, then measure how rules perform against known outcomes.
- Audit and access control: keep change history and separate admin, editor, and read-only responsibilities.
Documentation
- Quickstart
- Installation
- Configuration
- Admin guide
- Rule authoring
- API reference
- Deployment guide
- What's new
The documentation site is also available at ezrules.readthedocs.io.
Development
For contributors, the project uses Python 3.12, uv, FastAPI, SQLAlchemy, Celery, PostgreSQL, Angular, Tailwind CSS, and Playwright.
uv sync
uv run poe check
Frontend dependencies live in ezrules/frontend/.
cd ezrules/frontend
npm install
npm start
See docs/contributing.md for contribution guidance.
License
Apache License 2.0. See LICENSE.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ezrules-1.15.2.tar.gz.
File metadata
- Download URL: ezrules-1.15.2.tar.gz
- Upload date:
- Size: 6.1 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5a5946233e56acbd849ec05bfa19841ac2410b8abe364b2df85e63624d3ca2df
|
|
| MD5 |
b6563e28957f377e463c83284f073c40
|
|
| BLAKE2b-256 |
d8762729815f8aad19da34f5a1482f0456eefbe1ab079015019edeec00dfabe3
|
File details
Details for the file ezrules-1.15.2-py3-none-any.whl.
File metadata
- Download URL: ezrules-1.15.2-py3-none-any.whl
- Upload date:
- Size: 568.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
81c86d325274f9bd31788aa134843f8e649a39c6a36d1ae14a7f4d8c5bfe6426
|
|
| MD5 |
bd5e3e30194ceda7125c513b86b4a91d
|
|
| BLAKE2b-256 |
48274df159a477cd054d9e87fc17ab26df216581d05216ad8dc4c8ffc6e771a3
|