> ## 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.

# Extend the app

<a id="module-docs.pages.extend_the_app" />

<Note>
  Not available in the community edition: [upgrade](../getting_started/upgrade_from_community_edition) to use it.
</Note>

Both the server and the embedded UI can be extended.

## Server extension

[Atoti Server extensions are developed in Java](https://docs.activeviam.com/engine/java-sdk/6.2/starters/atoti_server_extension) and packaged as [`JARs`](../api/atoti.config.SessionConfig#atoti.SessionConfig.extra_jars).
They can register:

* measure plugins which can then be used in Python with [`atoti.plugin_measure()`](../api/atoti.function.plugin_measure#atoti.plugin_measure).
* Spring webservices.

## UI extension

Atoti UI extensions are developed in JavaScript/TypeScript.
They can change the behavior of the web app or augment it with new features.

### Branding

The Atoti branding can be replaced with a custom one (also called white-labeling):

```pycon theme={"languages":{"custom":["/engine/python-sdk/6.2/languages/pycon.tmLanguage.json"]}}
>>> from pathlib import Path
```

```pycon theme={"languages":{"custom":["/engine/python-sdk/6.2/languages/pycon.tmLanguage.json"]}}
>>> import atoti as tt
```

```pycon theme={"languages":{"custom":["/engine/python-sdk/6.2/languages/pycon.tmLanguage.json"]}}
>>> resources_directory = Path("__resources__") / "extend_the_app"
```

```pycon theme={"languages":{"custom":["/engine/python-sdk/6.2/languages/pycon.tmLanguage.json"]}}
>>> session_config = tt.SessionConfig(
...     branding=tt.BrandingConfig(
...         favicon=resources_directory / "favicon.ico",
...         logo=resources_directory / "logo.svg",
...         title="Hey hey hey",
...     ),
... )
```

```pycon theme={"languages":{"custom":["/engine/python-sdk/6.2/languages/pycon.tmLanguage.json"]}}
>>> session = tt.Session.start(session_config)  
```

The app of this session looks like this:

<img src="https://mintcdn.com/activeviam/4EAM7DL1LztAL06t/engine/python-sdk/6.2/guides/__resources__/extend_the_app/rebranded.png?fit=max&auto=format&n=4EAM7DL1LztAL06t&q=85&s=388f9776cf2f8167cfc32b88f4e4ccff" alt="Rebranded app" width="2036" height="1394" data-path="engine/python-sdk/6.2/guides/__resources__/extend_the_app/rebranded.png" />

### UI app extension

There are some prebuilt extensions in [`atoti.app_extension`](../api/atoti.app_extension#module-atoti.app_extension).
For instance:

```pycon theme={"languages":{"custom":["/engine/python-sdk/6.2/languages/pycon.tmLanguage.json"]}}
>>> session_config = tt.SessionConfig(app_extensions=tt.ADVANCED_APP_EXTENSION)
```

```pycon theme={"languages":{"custom":["/engine/python-sdk/6.2/languages/pycon.tmLanguage.json"]}}
>>> session = tt.Session.start(session_config)  
```

This extension will add some advanced tools and a **Text editor** widget:

<img src="https://mintcdn.com/activeviam/4EAM7DL1LztAL06t/engine/python-sdk/6.2/guides/__resources__/extend_the_app/extended.png?fit=max&auto=format&n=4EAM7DL1LztAL06t&q=85&s=e1f565da8047603e975d52bb32cc29d9" alt="Extended app" width="2036" height="1394" data-path="engine/python-sdk/6.2/guides/__resources__/extend_the_app/extended.png" />

Take a look at the documentation of [`atoti.SessionConfig.app_extensions`](../api/atoti.config.SessionConfig#atoti.SessionConfig.app_extensions) to learn how to create your own extensions.
