# 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


---

# 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/release-notes/v1.2.0-join-streams-with-stateful-analytics.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.
