> For the complete documentation index, see [llms.txt](https://docs.fractalworks.io/joule/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.fractalworks.io/joule/product-updates/release-notes/v1.2.0-join-streams-with-stateful-analytics.md).

# v1.2.0 Join Streams with stateful analytics

{% hint style="info" %}
Version 1.2.0

[Download](https://www.fractalworks.io/_files/archives/079189_ba864faa3b3c46eb8f83726443f6ab49.zip?dn=fractalworks-banking-example-1.2.0.zip) Banking example project

[Download](https://07918901-3002-44bc-9044-d4f31eb61203.usrfiles.com/archives/079189_e3844505304e4082a69bb505df32ede2.zip) Joule Platform

[Docker Image](https://hub.docker.com/repository/docker/fractalworks/joule/general)
{% endhint %}

## Overview

Joule’s latest release offers businesses a comprehensive solution to accelerate use case development to generate value while minimising risk. The platform leverages dynamic ML models, metrics, reference data, and observability to provide real-time actions and insights.<br>

With Joule, businesses can streamline their development efforts and make informed decisions based on data-driven insights. Joule’s intuitive development platform and user-focused design make it easy for businesses to leverage the power of data and maximise their potential.

<figure><img src="/files/U5oobhlffXk7OBI5Wrkr" alt=""><figcaption></figcaption></figure>

## Features

* Real-time Dual Stream Joins
* Normalisation, scaling and statistic ML functions &#x20;
* Stateful analytics
* Advanced Javascript support&#x20;
* Support for Kafka partitioning strategies
* Extended enrichment capabilities for metrics etc&#x20;
* Metrics engine priming with seed values
* Documentation improvements

***

### Stream Join

[Join](/joule/components/processors/stream-join.md) independent stream events to trigger advance analytical insights and dynamic business rules

* Ability to join two streams using a simple join expression
* Inner and outer joins support
* State managed either through an time to live function or simply delete on join

<figure><img src="/files/XwfeeuwTpeXR5ct5Mpg1" alt="" width="375"><figcaption></figcaption></figure>

### Analytics

* [New](/joule/components/analytics/analytic-tools/analytic-functions.md) normalisation, scaling, and statistics functions for ML support
* Stateful computation support
* Simplified DSL to enable correct processor to be used

### Enrichment Processor

* Computed metrics can be added to events using a lookup key
* Internal in-memory database can be queried for event enrichment

### Metrics

* Import pre-computed metrics on process startup
* User defined metrics compaction query

***

## Enhancements

### Analytics

* Improvements and bug fixes to address execution of expressions and scripts

### Geospatial Processors

[Geospatial processor](/joule/components/analytics/analytic-tools/advanced-analytics/geospatial.md) DSL improvements, hardening and finally documentation

* Entity geo tracker
* Geo search
* IP location resolver
* Geo reverse lookup
* Spatial Index

### Scripting

* Javascript module mjs support

### Kafka

* Validated consumer message partition strategies for multi Joule processing use cases

### General

* groupby definition support across all processors

## Documentation

Improvements to following areas:

* Getting started with Joule
* Monitoring
* Geospatial
* Analytics

## Upgrades

* DuckDB 1.0.0

## Bug Fixes

Fixed scripting processor bug whereby script functions could not be executed
