Version 1.1.0 of Eclipse Ditto, released on 29.04.2020

The first minor (feature adding) release of Eclipse Ditto 1 is finally here: 1.1.0.

It is API and binary compatible to Eclipse Ditto 1.0.0.


Compared to the latest release 1.0.0, the following changes, new features and bugfixes were added.


Java 11 as runtime environment

The default Java runtime for Ditto’s Docker containers was switched from Java 8 to Java 11 which should have some benefits in storing Strings in memory (this was already added in Java 9).

Language features of newer Java versions can now be used in the “services” part of Ditto, the Java APIs and models relevant for semantic versioning are still compatible to Java 8.

CBOR as Ditto internal serialization provider

As a bachelor thesis, Erik Escher evaluated mechanisms to improve the serialization overhead done in Ditto clusters.

His findings using CBOR as an alternative to plain JSON resulted an approximate 10% improvement on roundtrip times and throughput. The Ditto team was happy to accept his pull request, again improving overall performance in Ditto.

More strict Content-Type parsing for HTTP request payload

In the past, Ditto did not evaluate the HTTP Content-Type header of HTTP requests sending along payload. As this can be a potential security issue (e.g. in scope of CORS requests), the Content-Type is now strictly enforced to be of application/json wherever Ditto only accepts JSON request payload.

New features

Management of policies via Ditto Protocol and in Java client

The policy entities can now - in addition to their HTTP API - be managed via the Ditto Protocol. That means also via WebSocket and connections (e.g. AMQP, MQTT, ..).

APIs for policy management were also added to the Ditto Java Client.

Searching things via Ditto Protocol and in Java client

New Ditto Protocol for search was added in order to define a search query via the Ditto Protocol and also get results via an asynchronous channel. As a result, searching for things is now also possible via WebSocket and connections (e.g. AMQP, MQTT, ..).

APIs for searching things were also added to the Ditto Java Client.

Enriching messages and events before publishing to external subscribers

When subscribing change notifications or for messages to publish to external system or deliver via WebSocket it is now possible to enrich the payload with additional “extra fields” from the thing which was affected by the change.

This can be useful when e.g. only a sensor value of a device changes, but your application also needs to be aware of additional context of the affected thing (e.g. a location which does not change with each sensor update).

APIs for enriching changes were also added to the Ditto Java Client.

Establish connections to MQTT 5 brokers

The Ditto community (namely Alexander Wellbrock (w4tsn) from othermo GmbH) contributed MQTT 5 support to Ditto’s connectivity capabilities.
With that is is possible to also establish connections to MQTT 5 brokers and even apply header mapping and e.g. responses via MQTT 5’s user properties approach.

Thank you very much for this great contribution.

End-2-end acknowledgements

Until now, messages consumed by Eclipse Ditto were processed without a guarantee. That is being addressed with this first feature addition, the model and logic in order to request and emit acknowledgements.

The follow-up issue #661 will automatically handle acknowledgements in Ditto managed connections, configured for connection sources and targets, providing QoS 1 (at least once) semantic for message processing in Ditto via connections.

APIs for requesting and issuing acknowledgements were also added to the Ditto Java Client.

Pre-authenticated authentication mechanism

Officially added+documented support of how Ditto external authentication providers may be configured to authenticate users in Ditto by adding them as an HTTP reverse proxy in front of Ditto.


API version 1 deprecation

Now that Ditto has a full replacement for ACLs, namely policies which now can also be managed via the Ditto Protocol and the Ditto Java client, it is time to deprecate the APIs around the ACL mechanism.

Starting with Ditto 1.1.0, usage of the API in version 1 (e.g. contained in HTTP URLs as /api/1/things...) is deprecated.
API version 1 and ACLs will very likely be removed in Ditto 2.0.

So when you start using Ditto, please make sure to use API version 2 (using policies as authorization mechanism) from the very beginning.


Several bugs in Ditto 1.0.0 were fixed for 1.1.0.
This is a complete list of the merged pull requests, including the fixed bugs.

Migration notes

Do not apply when updating from Eclipse Ditto 1.0.0 to 1.1.0.