> ## Documentation Index
> Fetch the complete documentation index at: https://docs.activeviam.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Backward Compatibility

## API Compatibility

As stated in our [Versioning Policy](https://docs.activeviam.com/atoti-eos.html), backward compatibility is preserved across all maintenance versions.<br />
A product built on a previous maintenance version can be upgraded without requiring any modifications.

## Extensible Types: Enums and Sealed Interfaces

Adding a new entry to an `enum` or a new permitted type to a `sealed interface` is **not considered a breaking change** in Atoti's compatibility policy.

However, these additions can break **source compatibility** if downstream code uses an exhaustive `switch` expression without a default branch:

```java theme={"languages":{"custom":["/engine/python-sdk/0.9/languages/pycon.tmLanguage.json"]}}
// This will fail to compile after a new enum constant or sealed subtype is added
String result = switch (value) {
    case EXISTING -> "existing";
    // Missing case for the new entry — compiler error
};
```

Adding a `default` branch would avoid the compilation error but may result in a runtime failure instead when the unhandled case is reached.
Thus, it is recommended to not have a `default` branch in order to be notified by the compiler when a new enum variant/new type is added.

## Compatibility Policy for Nodes in a Cluster

An Atoti application can be [distributed](../distributed/distributed_intro) across multiple nodes, potentially running in separate Java processes.<br />
Atoti does not guarantee backward compatibility between node processes running different versions.<br />
When nodes operate on different versions, communication issues may arise due to changes in internal messaging and data structures.<br />
However, we recognize the importance of smooth upgrades.<br />
Therefore, while backward compatibility is not ensured, we commit to the following:

* Such changes will be rare.
* They will be explicitly documented in the changelog.
