diff --git a/README.md b/README.md index 0524bfdb..0c4a0ffa 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,10 @@ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT) -# Business Rules Engine (ZEN Engine) +# Business Rules Engine -ZEN Engine is a cross-platform, Open-Source Business Rules Engine (BRE). It is written in **Rust** and provides native bindings for **NodeJS** and **Python**. ZEN Engine allows to load and execute [JSON Decision Model (JDM)](https://gorules.io/docs/rules-engine/json-decision-model) from JSON files. +ZEN Engine is a cross-platform, Open-Source Business Rules Engine (BRE). It is written in **Rust** and provides native +bindings for **NodeJS**, **Python** and **Go**. ZEN Engine allows to load and +execute [JSON Decision Model (JDM)](https://gorules.io/docs/rules-engine/json-decision-model) from JSON files. Open-Source Rules Engine @@ -10,10 +12,23 @@ An open-source React editor is available on our [JDM Editor](https://github.com/ ## Usage -ZEN Engine is built as embeddable BRE for your **Rust**, **NodeJS** or **Python** applications. -It parses JDM from JSON content. It is up to you to obtain the JSON content, e.g. from file system, database or service call. +ZEN Engine is built as embeddable BRE for your **Rust**, **NodeJS**, **Python** or **Go** applications. +It parses JDM from JSON content. It is up to you to obtain the JSON content, e.g. from file system, database or service +call. -If you are looking for a complete **BRMS**, take a look at self-hosted [GoRules BRMS](https://gorules.io) or [GoRules Cloud](https://gorules.io). +### Supported Platforms + +List of platforms where Zen Engine is natively available: + +* **NodeJS** - [GitHub](https://github.com/gorules/zen/blob/master/bindings/nodejs/README.md) | [Documentation](https://gorules.io/docs/developers/bre/engines/nodejs) | [npmjs](https://www.npmjs.com/package/@gorules/zen-engine) +* **Python** - [GitHub](https://github.com/gorules/zen/blob/master/bindings/python/README.md) | [Documentation](https://gorules.io/docs/developers/bre/engines/python) | [pypi](https://pypi.org/project/zen-engine/) +* **Go** - [GitHub](https://github.com/gorules/zen-go) | [Documentation](https://gorules.io/docs/developers/bre/engines/go) +* **Rust (Core)** - [GitHub](https://github.com/gorules/zen) | [Documentation](https://gorules.io/docs/developers/bre/engines/rust) | [crates.io](https://crates.io/crates/zen-engine) + +For a complete **Business Rules Management Systems (BRMS)** solution: + +* [Self-hosted BRMS](https://gorules.io) +* [GoRules Cloud BRMS](https://gorules.io/signin/verify-email) ### Rust @@ -35,66 +50,32 @@ async fn evaluate() { let result = decision.evaluate(&json!({ "input": 12 })).await; } ``` -For more advanced use cases where you want to load multiple decisions you can use loaders. To learn more please visit [Rust Docs](https://gorules.io/docs/rules-engine/engines/rust). -### NodeJS - -```bash -npm install @gorules/zen-engine -``` - -```typescript -import { ZenEngine } from '@gorules/zen-engine'; -import fs from 'fs/promises'; - -(async () => { - // Example filesystem content, it is up to you how you obtain content - const content = await fs.readFile('./jdm_graph.json'); - const engine = new ZenEngine(); - - const decision = engine.createDecision(content); - const result = await decision.evaluate({ input: 15 }); -})(); -``` - -For more advanced use cases where you want to load multiple decisions you can use loaders. To learn more please visit [NodeJS Docs](https://gorules.io/docs/rules-engine/engines/nodejs). - -### Python - -```bash -pip install zen-engine -``` - -```python -import zen - -# Example filesystem content, it is up to you how you obtain content -with open("./jdm_graph.json", "r") as f: - content = f.read() - -engine = zen.ZenEngine() - -decision = engine.create_decision(content) -result = decision.evaluate({"input": 15}) -``` - -For more advanced use cases where you want to load multiple decisions you can use loaders. To learn more please visit [Python Docs](https://gorules.io/docs/rules-engine/engines/python). +For more advanced use cases visit [Rust Docs](https://gorules.io/docs/developers/bre/engines/rust). ## JSON Decision Model (JDM) -GoRules JDM (JSON Decision Model) is a modeling framework designed to streamline the representation and implementation of decision models. +GoRules JDM (JSON Decision Model) is a modeling framework designed to streamline the representation and implementation +of decision models. #### Understanding GoRules JDM + At its core, GoRules JDM revolves around the concept of decision models as interconnected graphs stored in JSON format. -These graphs capture the intricate relationships between various decision points, conditions, and outcomes in a GoRules Zen-Engine. +These graphs capture the intricate relationships between various decision points, conditions, and outcomes in a GoRules +Zen-Engine. -Graphs are made by linking nodes with edges, which act like pathways for moving information from one node to another, usually from the left to the right. +Graphs are made by linking nodes with edges, which act like pathways for moving information from one node to another, +usually from the left to the right. -The Input node serves as an entry for all data relevant to the context, while the Output nodes produce the result of decision-making process. The progression of data follows a path from the Input Node to the Output Node, traversing all interconnected nodes in between. As the data flows through this network, it undergoes evaluation at each node, and connections determine where the data is passed along the graph. +The Input node serves as an entry for all data relevant to the context, while the Output nodes produce the result of +decision-making process. The progression of data follows a path from the Input Node to the Output Node, traversing all +interconnected nodes in between. As the data flows through this network, it undergoes evaluation at each node, and +connections determine where the data is passed along the graph. To see JDM Graph in action you can use [Free Online Editor](https://editor.gorules.io) with built in Simulator. There are 5 main node types in addition to a graph Input Node (Request) and Output Node (Response): + * Decision Table Node * Switch Node * Function Node @@ -105,19 +86,26 @@ There are 5 main node types in addition to a graph Input Node (Request) and Outp #### Overview -Tables provide a structured representation of decision-making processes, allowing developers and business users to express complex rules in a clear and concise manner. +Tables provide a structured representation of decision-making processes, allowing developers and business users to +express complex rules in a clear and concise manner. Decision Table #### Structure -At the core of the Decision Table is its schema, defining the structure with inputs and outputs. Inputs encompass business-friendly expressions using the ZEN Expression Language, accommodating a range of conditions such as equality, numeric comparisons, boolean values, date time functions, array functions and more. The schema's outputs dictate the form of results generated by the Decision Table. -Inputs and outputs are expressed through a user-friendly interface, often resembling a spreadsheet. This facilitates easy modification and addition of rules, enabling business users to contribute to decision logic without delving into intricate code. +At the core of the Decision Table is its schema, defining the structure with inputs and outputs. Inputs encompass +business-friendly expressions using the ZEN Expression Language, accommodating a range of conditions such as equality, +numeric comparisons, boolean values, date time functions, array functions and more. The schema's outputs dictate the +form of results generated by the Decision Table. +Inputs and outputs are expressed through a user-friendly interface, often resembling a spreadsheet. This facilitates +easy modification and addition of rules, enabling business users to contribute to decision logic without delving into +intricate code. #### Evaluation Process Decision Tables are evaluated row by row, from top to bottom, adhering to a specified hit policy. -Single row is evaluated via Inputs columns, from left to right. Each input column represents `AND` operator. If cell is empty that column is evaluated **truthfully**, independently of the value. +Single row is evaluated via Inputs columns, from left to right. Each input column represents `AND` operator. If cell is +empty that column is evaluated **truthfully**, independently of the value. If a single cell within a row fails (due to error, or otherwise), the row is skipped. @@ -127,21 +115,23 @@ The hit policy determines the outcome calculation based on matching rules. The result of the evaluation is: -* **an object** if the hit policy of the decision table is `first` and a rule matched. The structure is defined by the output fields. Qualified field names with a dot (.) inside lead to nested objects. +* **an object** if the hit policy of the decision table is `first` and a rule matched. The structure is defined by the + output fields. Qualified field names with a dot (.) inside lead to nested objects. * **`null`/`undefined`** if no rule matched in `first` hit policy -* **an array of objects** if the hit policy of the decision table is `collect` (one array item for each matching rule) or empty array if no rules match - +* **an array of objects** if the hit policy of the decision table is `collect` (one array item for each matching rule) + or empty array if no rules match #### Inputs -In the assessment of rules or rows, input columns embody the `AND` operator. The values typically consist of (qualified) names, such as `customer.country` or `customer.age`. +In the assessment of rules or rows, input columns embody the `AND` operator. The values typically consist of (qualified) +names, such as `customer.country` or `customer.age`. There are two types of evaluation of inputs, `Unary` and `Expression`. - **Unary Evaluation** -Unary evaluation is usually used when we would like to compare single fields from incoming context separately, for example `customer.country` and `cart.total` . It is activated when a column has `field` defined in its schema. +Unary evaluation is usually used when we would like to compare single fields from incoming context separately, for +example `customer.country` and `cart.total` . It is activated when a column has `field` defined in its schema. ***Example*** @@ -169,11 +159,10 @@ ELSE IF customer.country == 'CA' OR customer.country == 'MX' THEN {"fees": {"fla ELSE {"fees": {"flat": 150}} ``` - List shows basic example of the unary tests in the Input Fields: | Input entry | Input Expression | -| ----------- | ---------------------------------------------- | +|-------------|------------------------------------------------| | "A" | the field equals "A" | | "A", "B" | the field is either "A" or "B" | | 36 | the numeric value equals 36 | @@ -187,11 +176,13 @@ List shows basic example of the unary tests in the Input Fields: | | any value, even null/undefined | | null | the value null or undefined | -Note: For the full list please visit [ZEN Expression Language](https://gorules.io/docs/rules-engine/expression-language/). +Note: For the full list please +visit [ZEN Expression Language](https://gorules.io/docs/rules-engine/expression-language/). **Expression Evaluation** -Expression evaluation is used when we would like to create more complex evaluation logic inside single cell. It allows us to compare multiple fields from the incoming context inside same cell. +Expression evaluation is used when we would like to create more complex evaluation logic inside single cell. It allows +us to compare multiple fields from the incoming context inside same cell. It can be used by providing an empty `Selector (field)` inside column configuration. @@ -216,14 +207,18 @@ IF time(transaction.createdAt) > time("17:00:00") AND transaction.amount > 1000 ELSE {"status": "approve"} ``` -Note: For the full list please visit [ZEN Expression Language](https://gorules.io/docs/rules-engine/expression-language/). - +Note: For the full list please +visit [ZEN Expression Language](https://gorules.io/docs/rules-engine/expression-language/). **Outputs** -Output columns serve as the blueprint for the data that the decision table will generate when the conditions are met during evaluation. +Output columns serve as the blueprint for the data that the decision table will generate when the conditions are met +during evaluation. -When a row in the decision table satisfies its specified conditions, the output columns determine the nature and structure of the information that will be returned. Each output column represents a distinct field, and the collective set of these fields forms the output or result associated with the validated row. This mechanism allows decision tables to precisely define and control the data output. +When a row in the decision table satisfies its specified conditions, the output columns determine the nature and +structure of the information that will be returned. Each output column represents a distinct field, and the collective +set of these fields forms the output or result associated with the validated row. This mechanism allows decision tables +to precisely define and control the data output. ***Example*** @@ -242,35 +237,48 @@ And the result would be: } } ``` + ### Switch Node (NEW) -The Switch node in GoRules JDM introduces a dynamic branching mechanism to decision models, enabling the graph to diverge based on conditions. +The Switch node in GoRules JDM introduces a dynamic branching mechanism to decision models, enabling the graph to +diverge based on conditions. Conditions are written in a Zen Expression Language. -By incorporating the Switch node, decision models become more flexible and context-aware. This capability is particularly valuable in scenarios where diverse decision logic is required based on varying inputs. The Switch node efficiently manages branching within the graph, enhancing the overall complexity and realism of decision models in GoRules JDM, making it a pivotal component for crafting intelligent and adaptive systems. +By incorporating the Switch node, decision models become more flexible and context-aware. This capability is +particularly valuable in scenarios where diverse decision logic is required based on varying inputs. The Switch node +efficiently manages branching within the graph, enhancing the overall complexity and realism of decision models in +GoRules JDM, making it a pivotal component for crafting intelligent and adaptive systems. -The Switch node preserves the incoming data without modification; it forwards the entire context to the output branch(es). +The Switch node preserves the incoming data without modification; it forwards the entire context to the output branch( +es). Switch / Branching #### HitPolicy + There are two HitPolicy options for the switch node, `first` and `collect`. -In the context of a first hit policy, the graph branches to the initial matching condition, analogous to the behavior observed in a table. Conversely, under a collect hit policy, the graph extends to all branches where conditions hold true, allowing branching to multiple paths. +In the context of a first hit policy, the graph branches to the initial matching condition, analogous to the behavior +observed in a table. Conversely, under a collect hit policy, the graph extends to all branches where conditions hold +true, allowing branching to multiple paths. Note: If there are multiple edges from the same condition, there is no guaranteed order of execution. *Available from:* + * Python 0.16.0 * NodeJS 0.13.0 * Rust 0.16.0 +* Go 0.1.0 ### Functions Node -Function nodes are JavaScript snippets that allow for quick and easy parsing, re-mapping or otherwise modifying the data using JavaScript. Inputs of the node are provided as function's arguments. Functions are executed on top of QuickJS Engine that is bundled into the ZEN Engine. +Function nodes are JavaScript snippets that allow for quick and easy parsing, re-mapping or otherwise modifying the data +using JavaScript. Inputs of the node are provided as function's arguments. Functions are executed on top of QuickJS +Engine that is bundled into the ZEN Engine. -Function timeout is set to a 50ms. +Function timeout is set to a 50ms. ```js const handler = (input, {dayjs, Big}) => { @@ -282,11 +290,16 @@ const handler = (input, {dayjs, Big}) => { ``` There are two built in libraries: + * [dayjs](https://www.npmjs.com/package/dayjs) - for Date Manipulation * [big.js](https://www.npmjs.com/package/big.js) - for arbitrary-precision decimal arithmetic. ### Expression Node -The Expression node serves as a tool for transforming input objects into alternative objects using the Zen Expression Language. When specifying the output properties, each property requires a separate row. These rows are defined by two fields: + +The Expression node serves as a tool for transforming input objects into alternative objects using the Zen Expression +Language. When specifying the output properties, each property requires a separate row. These rows are defined by two +fields: + - Key - qualified name of the output property - Value - value expressed through the Zen Expression Language @@ -296,26 +309,31 @@ Note: Any errors within the Expression node will bring the graph to a halt. ### Decision Node -The "Decision" node is designed to extend the capabilities of decision models. Its function is to invoke and reuse other decision models during execution. +The "Decision" node is designed to extend the capabilities of decision models. Its function is to invoke and reuse other +decision models during execution. -By incorporating the "Decision" node, developers can modularize decision logic, promoting reusability and maintainability in complex systems. +By incorporating the "Decision" node, developers can modularize decision logic, promoting reusability and +maintainability in complex systems. ## Support matrix -| Arch | Rust | NodeJS | Python | -| :-------------- | :----------------- | :----------------- | :----------------- | -| linux-x64-gnu | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| linux-arm64-gnu | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| darwin-x64 | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| darwin-arm64 | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -| win32-x64-msvc | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| Arch | Rust | NodeJS | Python | Go | +|:----------------|:-------------------|:-------------------|:-------------------|:-------------------| +| linux-x64-gnu | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| linux-arm64-gnu | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| darwin-x64 | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| darwin-arm64 | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| win32-x64-msvc | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | We do not support linux-musl currently. ## Contribution -JDM standard is growing and we need to keep tight control over its development and roadmap as there are number of companies that are using GoRules Zen-Engine and GoRules BRMS. -For this reason we can't accept any code contributions at this moment, apart from help with documentation and additional tests. +JDM standard is growing and we need to keep tight control over its development and roadmap as there are number of +companies that are using GoRules Zen-Engine and GoRules BRMS. +For this reason we can't accept any code contributions at this moment, apart from help with documentation and additional +tests. ## License + [MIT License]() diff --git a/bindings/nodejs/README.md b/bindings/nodejs/README.md index a46c7426..76c7e970 100644 --- a/bindings/nodejs/README.md +++ b/bindings/nodejs/README.md @@ -1,8 +1,8 @@ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT) -# NodeJS Rules Engine (ZEN Engine) +# NodeJS Rules Engine -ZEN Engine is a cross-platform, Open-Source Business Rules Engine (BRE). It is written in **Rust** and provides native bindings for **NodeJS** and **Python**. ZEN Engine allows to load and execute [JSON Decision Model (JDM)](https://gorules.io/docs/rules-engine/json-decision-model) from JSON files. +ZEN Engine is a cross-platform, Open-Source Business Rules Engine (BRE). It is written in **Rust** and provides native bindings for **NodeJS**, **Python** and **Go**. ZEN Engine allows to load and execute [JSON Decision Model (JDM)](https://gorules.io/docs/rules-engine/json-decision-model) from JSON files. Open-Source Rules Engine @@ -10,11 +10,9 @@ An open-source React editor is available on our [JDM Editor](https://github.com/ ## Usage -ZEN Engine is built as embeddable BRE for your **Rust**, **NodeJS** or **Python** applications. +ZEN Engine is built as embeddable BRE for your **Rust**, **NodeJS**, **Python** or **Go** applications. It parses JDM from JSON content. It is up to you to obtain the JSON content, e.g. from file system, database or service call. -If you are looking for a complete **BRMS**, take a look at self-hosted [GoRules BRMS](https://gorules.io) or [GoRules Cloud](https://gorules.io). - ### Installation ```bash @@ -68,6 +66,20 @@ In the case above we will assume file `jdm_directory/jdm_graph1.json` exists. Similar to this example you can also utilise loader to load from different places, for example from REST API, from S3, Database, etc. +### Supported Platforms + +List of platforms where Zen Engine is natively available: + +* **NodeJS** - [GitHub](https://github.com/gorules/zen/blob/master/bindings/nodejs/README.md) | [Documentation](https://gorules.io/docs/developers/bre/engines/nodejs) | [npmjs](https://www.npmjs.com/package/@gorules/zen-engine) +* **Python** - [GitHub](https://github.com/gorules/zen/blob/master/bindings/python/README.md) | [Documentation](https://gorules.io/docs/developers/bre/engines/python) | [pypi](https://pypi.org/project/zen-engine/) +* **Go** - [GitHub](https://github.com/gorules/zen-go) | [Documentation](https://gorules.io/docs/developers/bre/engines/go) +* **Rust (Core)** - [GitHub](https://github.com/gorules/zen) | [Documentation](https://gorules.io/docs/developers/bre/engines/rust) | [crates.io](https://crates.io/crates/zen-engine) + +For a complete **Business Rules Management Systems (BRMS)** solution: + +* [Self-hosted BRMS](https://gorules.io) +* [GoRules Cloud BRMS](https://gorules.io/signin/verify-email) + ## JSON Decision Model (JDM) GoRules JDM (JSON Decision Model) is a modeling framework designed to streamline the representation and implementation of decision models. @@ -253,6 +265,7 @@ Note: If there are multiple edges from the same condition, there is no guarantee * Python 0.16.0 * NodeJS 0.13.0 * Rust 0.16.0 +* Go 0.1.0 ### Functions Node @@ -290,8 +303,19 @@ By incorporating the "Decision" node, developers can modularize decision logic, ## Support matrix -| linux-x64-gnu | linux-arm64-gnu | darwin-x64 | darwin-arm64 | win32-x64-msvc | -| :------------ | :-------------- | :--------- | :----------- | :------------- | -| yes | yes | yes | yes | yes | +| Arch | Rust | NodeJS | Python | Go | +|:----------------|:-------------------|:-------------------|:-------------------|:-------------------| +| linux-x64-gnu | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| linux-arm64-gnu | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| darwin-x64 | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| darwin-arm64 | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| win32-x64-msvc | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -We do not support linux-musl for now. +We do not support linux-musl currently. + +## Contribution + +JDM standard is growing and we need to keep tight control over its development and roadmap as there are number of +companies that are using GoRules Zen-Engine and GoRules BRMS. +For this reason we can't accept any code contributions at this moment, apart from help with documentation and additional +tests. diff --git a/bindings/python/README.md b/bindings/python/README.md index 5207fb78..8c1aeefb 100644 --- a/bindings/python/README.md +++ b/bindings/python/README.md @@ -1,7 +1,7 @@ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT) -# Python Rules Engine (ZEN Engine) +# Python Rules Engine -ZEN Engine is a cross-platform, Open-Source Business Rules Engine (BRE). It is written in **Rust** and provides native bindings for **NodeJS** and **Python**. ZEN Engine allows to load and execute [JSON Decision Model (JDM)](https://gorules.io/docs/rules-engine/json-decision-model) from JSON files. +ZEN Engine is a cross-platform, Open-Source Business Rules Engine (BRE). It is written in **Rust** and provides native bindings for **NodeJS**, **Python** and **Go**. ZEN Engine allows to load and execute [JSON Decision Model (JDM)](https://gorules.io/docs/rules-engine/json-decision-model) from JSON files. Open-Source Rules Engine @@ -9,11 +9,9 @@ An open-source React editor is available on our [JDM Editor](https://github.com/ ## Usage -ZEN Engine is built as embeddable BRE for your **Rust**, **NodeJS** or **Python** applications. +ZEN Engine is built as embeddable BRE for your **Rust**, **NodeJS**, **Python** or **Go** applications. It parses JDM from JSON content. It is up to you to obtain the JSON content, e.g. from file system, database or service call. -If you are looking for a complete **BRMS**, take a look at self-hosted [GoRules BRMS](https://gorules.io) or [GoRules Cloud](https://gorules.io). - ### Installation ```bash @@ -57,6 +55,20 @@ In the case above we will assume file `jdm_directory/jdm_graph1.json` exists. Similar to this example you can also utilise loader to load from different places, for example from REST API, from S3, Database, etc. +### Supported Platforms + +List of platforms where Zen Engine is natively available: + +* **NodeJS** - [GitHub](https://github.com/gorules/zen/blob/master/bindings/nodejs/README.md) | [Documentation](https://gorules.io/docs/developers/bre/engines/nodejs) | [npmjs](https://www.npmjs.com/package/@gorules/zen-engine) +* **Python** - [GitHub](https://github.com/gorules/zen/blob/master/bindings/python/README.md) | [Documentation](https://gorules.io/docs/developers/bre/engines/python) | [pypi](https://pypi.org/project/zen-engine/) +* **Go** - [GitHub](https://github.com/gorules/zen-go) | [Documentation](https://gorules.io/docs/developers/bre/engines/go) +* **Rust (Core)** - [GitHub](https://github.com/gorules/zen) | [Documentation](https://gorules.io/docs/developers/bre/engines/rust) | [crates.io](https://crates.io/crates/zen-engine) + +For a complete **Business Rules Management Systems (BRMS)** solution: + +* [Self-hosted BRMS](https://gorules.io) +* [GoRules Cloud BRMS](https://gorules.io/signin/verify-email) + ## JSON Decision Model (JDM) GoRules JDM (JSON Decision Model) is a modeling framework designed to streamline the representation and implementation of decision models. @@ -242,6 +254,7 @@ Note: If there are multiple edges from the same condition, there is no guarantee * Python 0.16.0 * NodeJS 0.13.0 * Rust 0.16.0 +* Go 0.1.0 ### Functions Node @@ -279,8 +292,19 @@ By incorporating the "Decision" node, developers can modularize decision logic, ## Support matrix -| linux-x64-gnu | linux-arm64-gnu | darwin-x64 | darwin-arm64 | win32-x64-msvc | -| :------------ | :-------------- | :--------- | :----------- | :------------- | -| yes | yes | yes | yes | yes | +| Arch | Rust | NodeJS | Python | Go | +|:----------------|:-------------------|:-------------------|:-------------------|:-------------------| +| linux-x64-gnu | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| linux-arm64-gnu | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| darwin-x64 | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| darwin-arm64 | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | +| win32-x64-msvc | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | :heavy_check_mark: | -We do not support linux-musl for now. +We do not support linux-musl currently. + +## Contribution + +JDM standard is growing and we need to keep tight control over its development and roadmap as there are number of +companies that are using GoRules Zen-Engine and GoRules BRMS. +For this reason we can't accept any code contributions at this moment, apart from help with documentation and additional +tests.