# 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]:
