# Change history

## Change log

<table><thead><tr><th width="177">Version</th><th width="152.33333333333331">Date</th><th>Description</th></tr></thead><tbody><tr><td><strong>1.2.1-SNAPSHOT</strong></td><td>11-Nov-2025</td><td><h2><sup><sub><strong>Features</strong></sub></sup></h2><h4>Joule Deployment</h4><ul><li>Joule cluster deployment on Kubernetes</li><li>Joule can run a single process for simple use cases</li><li>Suite of Joule management Rest APIs for use case deployment</li><li>Restartable processes using previous deployed state</li><li>New cluster manager process know as Guardian which manages Joule worker processes</li><li>Joule management database (GuardianDB)</li><li>Basic cluster telemetry recording</li></ul><h4>  Joulectl CLI</h4><ul><li>Command line tool to deploy and manage Joule use cases</li></ul><h4> </h4><h4>Transports</h4><ul><li><p>New transports</p><ul><li><strong>Slack</strong> transport for proactive alerting</li><li><strong>Email</strong> transport for critical notifications</li><li><strong>Google sheets</strong> for dynamic content updates, includes update and upserts capababities</li></ul></li><li><p>Enhancements</p><ul><li>MQTT Last Will &#x26; Testament features</li><li>Kafka logic improvements to start up process, commit and ack logic </li></ul></li></ul><h4>General</h4><ul><li>Applied processing time constraints to use case execution</li><li>Caching of last emitted event for next processing cycle reuse</li><li>General state management to support advanced processing use cases</li><li>New SDK processor and transport annotations </li></ul><h4>Getting started project</h4><ul><li>New refreshed suite of demos to addressed fast tracking developers on to the platform</li></ul><h4>Dependencies </h4><ul><li><p>Upgraded following</p><ul><li>Java Graalvm 24.1.1</li><li>DuckDB 1.3.0.0</li><li>Jackson 2.18.1</li><li>Apache arrow 18.1.0</li></ul></li></ul><h4>Fixes and improvements</h4><ul><li><p>GraalVM improvements</p><ul><li>Python virtualEnv support</li><li>Fixed JS multi-threading concurrency context access bug</li></ul></li><li>New and improved documentation</li><li>Fixed duplicate events being emitted from an analytic window processing</li><li>Optimised and improved AVRO record handling</li><li>Fixed missing CSV header</li><li>Projection order honoured for CSV file output</li><li>OpenAPI documentation improvements</li><li>Memory optimisations and handling improvements</li><li>Increased default internal base resources</li><li>Support for key data types for stateful analytics</li><li>Fixed major null bug for object vectorization</li><li>Fixed MQTT missing initialization and serialization of string payloads</li><li>Platform build target moved to JDK 23</li><li>Upgrade Gradle 9.0.0</li></ul></td></tr><tr><td><strong>1.2.0</strong></td><td>01-July<a data-footnote-ref href="#user-content-fn-1">-2024</a></td><td><p><strong>Features</strong></p><h4>Stream Joins</h4><ul><li>Ability to join two streams using a simple join expression</li><li>Inner and outer joins support</li><li>State managed either through an time to live function or simply delete on join</li></ul><h4>Enrichment</h4><ul><li>Computed metrics can be added to events using the enrichment processor and emit projection </li><li>Internal in-memory database can be queried for event enrichment</li><li>Stateful computation support</li></ul><p><strong>Metrics</strong> </p><ul><li>Import pre-computed metrics on process startup</li><li>User defined metrics compaction query</li></ul><p><strong>Enhancements</strong></p><p><strong>Kafka</strong></p><ul><li>Validated consumer message partition examples using multi Joule processing</li></ul><p><strong>Analytics</strong></p><ul><li>New normalization, scaling, and statistics functions added for ML support</li><li>Stateful computation applied to computation context</li><li>Simplified DSL to enable correct processor to be used</li><li>Improvements and bug fixes to address execution of expressions and scripts</li><li>Documentation improvements</li></ul><p><br><strong>Miscellaneous</strong></p><ul><li>Multi Joule processing environment scripts, used within banking examples</li><li>groupby definition support across all processors</li><li>Javascript module mjs support</li></ul><h4>Upgrades</h4><ul><li>DuckDB 1.0.0</li></ul></td></tr><tr><td><strong>1.1.0</strong></td><td>25-Jan-2024</td><td><p><strong>Features</strong></p><h4>Predictive Processor</h4><ul><li>JPMML model initialization using local file and remote S3 stores</li><li>Dynamic model refresh using model update notifications</li><li>Offline prediction auditing that enables explainability, drift monitoring and model retraining</li></ul><h4>Avro support </h4><ul><li>Ability to process avro records for inbound and outbound events</li><li>Complex data types supported using custom mapping</li><li>Schema registry support</li></ul><h4>Minio S3 Transport</h4><ul><li>OOTB multi cloud S3 support</li><li>Publish and consume events and insights to/from hybrid hosted S3 buckets </li><li>Drive pipeline processing using S3 bucket notifications</li><li>Consumer supports following file formats: PARQUET, CSV, ARROW, ORC</li><li>Keep reference data up to date using external systems</li></ul><h4>Reference Data</h4><ul><li>Apply external data within stream processing tasks</li><li>In-memory reference data elements kept up-to-date using source change notifications </li><li>Support for key value and S3 stores</li><li>Reference data file loader utility</li></ul><h4>Rest Consumer APIs</h4><ul><li>File consuming endpoint that enable ease of integration to upstream systems</li><li>Joule event consumer endpoint to provide the ability to chain Joule processors within a cloud environment</li></ul><h4>File Watcher Consumer</h4><ul><li>File watcher that consumes and processes target files</li><li>Supported formats; Parquet, Json, CSV, ORC and Arrow IPC</li></ul><h2>Enhancements</h2><h4>Kafka</h4><ul><li>Confluent schema registry support for outbound events</li><li>Message partition support</li><li>Confluent and RedPanda support</li></ul><h4>Enricher processor</h4><ul><li>Query optimisation</li><li>SQL, OQL, and Key value enrichment support</li></ul><h4>Transports</h4><ul><li>Improved exception handling to fail on startup</li><li>Strict ordering</li></ul><h4>Apache Arrow</h4><ul><li>Integrated and leveraged to process file efficiently and of various file formats</li><li>Large file processing support</li></ul><h4>Optimisations </h4><ul><li>Processing optimisations that reduce both memory and CPU utilisation while increasing event throughput.</li><li>StreamEvent smart shallow cloning logic to reduce overall memory footprint while providing key data isolation</li><li>StreamEvent change tracking switch to reduce memory overhead</li></ul><h4>Upgrades</h4><ul><li>Javalin 5.6.3</li><li>Kafka 3.6.0</li><li>Avro 1.11.3</li><li>DuckDB 0.9.2</li></ul><h2>Bug Fixes</h2><p>StreamEventCSVDeserializer</p><ul><li>Fixed fields from holding only string values to correctly defined data types</li><li>Allowed for custom date format to be provided </li></ul><p></p><p>StreamEventJSONDeserializer</p><ul><li>Can now read an array of Json StreamEvent objects</li></ul><h4>JVM Configuration Additions</h4><ul><li>Require  ‘--add-opens=java.base/java.nio=ALL-UNNAMED’ to be added to the java CLI due to Apache Arrow requirements</li><li>Applying the G1 GC regionalized and generational garbage collector to improved memory usage</li></ul></td></tr><tr><td><strong>1.1.0-SNAPSHOT</strong></td><td>14-Sept 2023</td><td><p><strong>Features</strong></p><ul><li>Predictive Processor Model initialisation and dynamic model replacement using local file and remote S3 stores </li><li>Avro support for inbound and outbound events.</li><li>Complex data types supported using custom field mapping</li><li>Minio multi-cloud S3 consumer</li><li>Reference data support  </li></ul><p><strong>Enhancements</strong></p><ul><li>MinIO implementation improvements to support large files and notifications</li><li>Kafka schema registry support</li><li>Apache Arrow integration to support PARQUET, CSV, ARROW, ORC file formats</li><li>Better transport exception handling</li></ul></td></tr><tr><td>1.0.4</td><td>18-May-2023</td><td><p><strong>Features</strong></p><ul><li>Feature engineering processor, Including plugins for binning, scaling and declarative analytics expressions</li><li>Prediction and features auditing enabling explainability, drift monitoring and retraining</li><li>In-Memory SQL Query API </li><li>Websocket publisher</li></ul><p><strong>Enhancements</strong></p><ul><li>Improved deep cloning of StreamEvent </li><li>Reorganisation of SDK</li><li>Documentation</li><li>Project template</li></ul><p><strong>Bug fixes</strong></p><ul><li>Window events failing to publish</li></ul></td></tr><tr><td>1.0.4-SNAPSHOT</td><td>23-Apr-2023</td><td>Docker image generation, scripting fixes, StreamEvent deep copy, documentation updates.</td></tr><tr><td>1.0.3</td><td>01-Mar-2023</td><td>Documentation,  metrics engine, Rest API, JDBC publisher, transport and processor updates and bug fixes</td></tr><tr><td>1.0.2</td><td>30-Jan-2023</td><td>Alpha release of metrics engine and rest API</td></tr><tr><td>1.0.1</td><td>13-May-2022</td><td>Bug fixes</td></tr><tr><td>1.0.0</td><td>05-Apr-2022</td><td>Initial release</td></tr></tbody></table>

[^1]:


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.fractalworks.io/joule/product-updates/change-history.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
