# What's New

Many new features have been added to the release of **Incari Studio** 2023.1. Here is a list of the features you need to know.

## Custom Shading

The [**Material Editor**](/incari-studio/2023.1/modules/material-editor.md) now includes a new shading model called the [**Custom Shading Model**](/incari-studio/2023.1/modules/material-editor/customshadingmodel.md). It allows the user to create and customize their own shading model. This expands the possibilities for **Materials** in **Incari**.

The customization is done via `Vertex Shader` or `Fragment Shader`.

The new **Custom Shading Model** allows the user to set values in `Fragment` and `Vertex Shader` files via the **Attributes** or the [**Set Custom Uniform Node**](/incari-studio/2023.1/toolbox/incari/material/setcustomuniforms.md).

![Custom Shading Example.](/files/6EKQGHKYvngCrqXJXZjJ)

## [Asset Database](/incari-studio/2023.1/modules/asset-database.md)

A new [**Module**](/incari-studio/2023.1/modules/overview.md) has been introduced with this release: the [**Asset Database**](/incari-studio/2023.1/modules/asset-database.md), which is a *database* of all the **Assets** that are either used in the **Project** or available to be used at runtime. It allows the user to keep track of all these **Assets** and have easy access to information about them, such as how many times they are used in the **Project** or their location.

Furthermore, two **Nodes** for managing **Assets** in the **Asset Database** have been introduced:

* [**Add to Asset Database**](/incari-studio/2023.1/toolbox/incari/asset/add-to-asset-database.md)
* [**Remove from Asset Database**](/incari-studio/2023.1/toolbox/incari/asset/remove-from-asset-database.md)

![The Asset Database.](/files/UyN1sCjIKjaTxeaey2Xr)

## Logic Plugins and Example

**Incari** now lets the user create their own **Nodes** via a **Logic Plugin**. Currently, there is one example **Plugin** with one **Node**, the [**JSON (Scale) Vector**](/incari-studio/2023.1/toolbox/plugins/jsonscalevector.md), that is available for the user to test out and learn the process with. The example can be found [here](/incari-studio/2023.1/toolbox/plugins.md).

![Logic Plugins](/files/E7xGNemqrq9jCHksBbRJ)

## 2D Workflow Update

The previously introduced split of *2D* and *3D* components in **Incari** has been widely expanded in this current release. New [**Scene2D Objects**](#scene2d-objects) have been added, [**Prefabs**](#2d-prefabs) have been extended to be used in *2D* space, and **Scene2D Objects** now allow for higher customizability using [CSS](#stylesheets).

### Scene2D Objects

New specific **Scene2D** **Objects** have been added along with their respective **Nodes**:

* [**Button**](/incari-studio/2023.1/objects-and-types/scene2d-objects/gui/button.md)
* [**Dropdown**](/incari-studio/2023.1/objects-and-types/scene2d-objects/gui/dropdown.md)
  * [**Get Active Dropdown Value**](/incari-studio/2023.1/toolbox/incari/object/get-active-dropdown-value.md)
  * [**Get Dropdown Options**](/incari-studio/2023.1/toolbox/incari/object/get-dropdown-options.md)
  * [**Set Active Dropdown Index**](/incari-studio/2023.1/toolbox/incari/object/set-active-dropdown-index.md)
  * [**Set Active Dropdown Value**](/incari-studio/2023.1/toolbox/incari/object/set-active-dropdown-value.md)
  * [**Set Dropdown Options**](/incari-studio/2023.1/toolbox/incari/object/set-dropdown-options.md)
  * [**On Dropdown Active Value Change**](/incari-studio/2023.1/toolbox/events/object/on-dropdown-active-value-change.md)
* [**List**](/incari-studio/2023.1/objects-and-types/scene2d-objects/gui/list.md)
  * [**Add List Element**](/incari-studio/2023.1/toolbox/incari/list2d/addlistelement.md)
  * [**Get Active Indes**](/incari-studio/2023.1/toolbox/incari/list2d/getactiveindex.md)
  * [**Get List Data**](/incari-studio/2023.1/toolbox/incari/list2d/getlistdata.md)
  * [**Get List Element**](/incari-studio/2023.1/toolbox/incari/list2d/getlistelement.md)
  * [**Insert List Element**](/incari-studio/2023.1/toolbox/incari/list2d/insertlistelement.md)
  * [**Remove List Element**](/incari-studio/2023.1/toolbox/incari/list2d/removelistelement.md)
  * [**Set Active Index**](/incari-studio/2023.1/toolbox/incari/list2d/setactiveindex.md)
  * [**Set List Data**](/incari-studio/2023.1/toolbox/incari/list2d/setlistdata.md)
  * [**Set List Element**](/incari-studio/2023.1/toolbox/incari/list2d/setlistelement.md)
  * [**On List Active Index Change**](/incari-studio/2023.1/toolbox/events/list2d/onlistactiveindexchange.md)
* [**Slider**](/incari-studio/2023.1/objects-and-types/scene2d-objects/gui/slider.md)
  * [**Get Slider Value**](/incari-studio/2023.1/toolbox/incari/object/getslidervalue.md)
  * [**Set Slider Value**](/incari-studio/2023.1/toolbox/incari/object/setslidervalue.md)
  * [**On Slider Value Change**](/incari-studio/2023.1/toolbox/events/object/on-slider-value-change.md)
* [**Text**](/incari-studio/2023.1/objects-and-types/scene2d-objects/gui/text.md)
  * [**Get Text**](/incari-studio/2023.1/toolbox/incari/object/get-text.md)
  * [**Set Text**](/incari-studio/2023.1/toolbox/incari/object/set-text.md)
  * [**On Text Change**](/incari-studio/2023.1/toolbox/events/input/ontextchange.md)
* [**Text Area**](/incari-studio/2023.1/objects-and-types/scene2d-objects/gui/textarea.md)
  * [**Get Text**](/incari-studio/2023.1/toolbox/incari/object/get-text.md)
  * [**Set Text**](/incari-studio/2023.1/toolbox/incari/object/set-text.md)
  * [**On Text Change**](/incari-studio/2023.1/toolbox/events/input/ontextchange.md)
* [**Text Input**](/incari-studio/2023.1/objects-and-types/scene2d-objects/gui/textinput.md)
  * [**Get Text**](/incari-studio/2023.1/toolbox/incari/object/get-text.md)
  * [**Set Text**](/incari-studio/2023.1/toolbox/incari/object/set-text.md)
  * [**On Text Change**](/incari-studio/2023.1/toolbox/events/input/ontextchange.md)
* [**Toggle**](/incari-studio/2023.1/objects-and-types/scene2d-objects/gui/toggle.md)
  * [**Get CheckBox Value**](/incari-studio/2023.1/toolbox/incari/object/get-checkbox-value.md)
  * [**Set CheckBox Value**](/incari-studio/2023.1/toolbox/incari/object/set-checkbox-value.md)
  * [**On CheckBox Value Change**](/incari-studio/2023.1/toolbox/events/object/on-checkbox-value-change.md)

### 2D Prefabs

**Prefabs** in **Scenes** have already been an important facet of **Incari**. Now these extend into **Scene2Ds** where all **Objects** and combinations of **Objects** can be converted into **Prefabs**.

### Stylesheets

It is now possible to customize **Scene2D Objects** using *Stylesheets*. This can be set:

* For the entire **Project** in [**Project Settings**](/incari-studio/2023.1/modules/project-settings/style.md).
* For the whole [**Scene2D**](/incari-studio/2023.1/objects-and-types/project-objects/scene2d.md) via its `CSS File` **Attribute**.
* For a specific [**Object**](/incari-studio/2023.1/objects-and-types/scene2d-objects.md) via its `Class names` and `CSS` **Attributes**.

Moreover, new **Nodes** that allow the user to modify these **Attributes** via **Logic** have been introduced:

* [**Scene 2D**](/incari-studio/2023.1/toolbox/incari/scene2d.md)
  * [**Get Stylesheet**](/incari-studio/2023.1/toolbox/incari/scene2d/getstylesheet.md)
  * [**Merge To Stylesheet**](/incari-studio/2023.1/toolbox/incari/scene2d/mergetostylesheet.md)
  * [**Set Stylesheet**](/incari-studio/2023.1/toolbox/incari/scene2d/setstylesheet.md)
* [**Object 2D**](/incari-studio/2023.1/toolbox/incari/object2d.md)
  * [**Add CSS Class Name**](/incari-studio/2023.1/toolbox/incari/object2d/addcssclassname.md)
  * [**Get CSS Class Name**](/incari-studio/2023.1/toolbox/incari/object2d/getcssclassnames.md)
  * [**Remove CSS Class Name**](/incari-studio/2023.1/toolbox/incari/object2d/removecssclassname.md)
  * [**Set CSS Class Name**](/incari-studio/2023.1/toolbox/incari/object2d/setcssclassnames.md)

## Exporter Update

The [**Exporter**](/incari-studio/2023.1/modules/exporter.md) now allows the user to export a **Project** onto a different platform than it was created. For example, it can now handle the case of exporting a **Project** from *Windows* to *Linux*.

In addition, the **Exporter** offers the user the option to export only the used **Assets**, thus providing a way to export a **Project** using only the necessary resources.

![The Exporter updated.](/files/X6uMcYRzXdUyKs6qsbDT)

## Communication Update

**Incari** has extended the options for the different communication protocols it supports:

* **Serial** now has the option to set delimiters for incoming messages. This can be configured in [**Project Settings**](/incari-studio/2023.1/modules/project-settings/serial.md).
* *HTTPS* support has been added to the already implemented [**HTTP**](/incari-studio/2023.1/toolbox/communication/http.md), for both client and server.
* For [**CAN**](/incari-studio/2023.1/toolbox/communication/can.md), it is now possible for multiple connections to be configured. This is set in [**Project Settings**](/incari-studio/2023.1/modules/project-settings/can.md).
* [**MAVLink**](/incari-studio/2023.1/toolbox/communication/mavlink.md) is now a [Plugin](/incari-studio/2023.1/modules/plugins/communication/mavlinkmanager.md).

## **New Nodes and Node Updates**

Besides the **Nodes** related to new features that are specified above, several new **Nodes** have been introduced with this release. The list is given below:

New **Nodes**:

* **List**:
  * [**Get Selected Item**](/incari-studio/2023.1/toolbox/incari/list/getselecteditem.md)
  * [**On List Item Clicked**](/incari-studio/2023.1/toolbox/incari/object/onlistitemclicked.md)
* **Object**:
  * [**Set Texture**](/incari-studio/2023.1/toolbox/incari/object/set-texture.md)
* **Media**
  * [**Seek Media**](/incari-studio/2023.1/toolbox/incari/media/seekmedia.md)


---

# 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.incari.com/incari-studio/2023.1/getting-started/whats-new-20231.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.
