# Applicationbuildproperty

The ApplicationBuildProperty is an element that adds meaning to the [ApplicationBuild](https://docs.i3d.net/game-hosting/elements/application/applicationbuild) element. E.g. you can define that an application uses a certain network port, or requires a password, together with a preset password, or have the system generate a unique password for each ApplicationInstance. These properties are necessary for the system to work properly.

{% hint style="info" %}
You cannot create an ApplicationBuildProperty yourself. They will be inherited from the [Application](https://docs.i3d.net/game-hosting/elements/application) and its [ApplicationProperty](https://docs.i3d.net/game-hosting/elements/application/applicationproperty) elements the ApplicationBuild is based on. You CAN override property values if you need to.
{% endhint %}

## Element structure

| Property      | Value type | Required              | Read-only | Description                      |
| ------------- | ---------- | --------------------- | --------- | -------------------------------- |
| propertyId    | string     | N/A                   | Yes       | Unique identifier of the element |
| propertyType  | int        | Yes                   | No        | Type ID of the property          |
| propertyKey   | string     | Yes                   | No        | The name of the property         |
| propertyValue | mixed      | Only for network port | No        | The value of the property        |

Table 1: ApplicationBuildProperty element structure

## propertyKey constraints

The characters allowed for a propertyKey are : `a-z, 0-9, -, _` A property key must start with a lowercase character.

The maximum length of a propertyKey is 50 characters.

## propertyValue constraints

Any UTF-8 character is allowed in a propertyValue.

The maximum length of a propertyValue is 150 characters.

## propertyType

ApplicationBuildProperty elements consist of a `propertyType`, a `propertyKey` and a `propertyValue`. The `propertyType` indicates the functionality of the property. The `propertyKey` gives the property a name and the `value` a value. Not all property types require a value. E.g. if you have a property of `propertyType` `password16`, you can leave `propertyValue` empty. This means we will generate a password, in this case with a length of 16 characters. If however you do enter a `propertyValue`, then we take that as the password and the system will not generate a new random password. You can find all available property types and usages in the next chapter.

## Available property types

A propertyType is indicated by a numerical ID. The following types are available:

| ID | Type                       | Value type                          | Value required? | Description                                                                                                                   |
| -- | -------------------------- | ----------------------------------- | --------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| 0  | raw value                  | mixed                               | yes             | A custom raw value. This property's key and value will be passed to ApplicationBuilds, ApplicationInstances and labels as-is. |
| 1  | public network port        | 0 or a number between 10240 - 29999 | yes             | Indicates a default or random network port for your application to use.                                                       |
| 2  | password8                  | string                              | no              | An 8 character password. If no value provided, we generate a unique password for every ApplicationInstance.                   |
| 3  | password16                 | string                              | no              | A 16 character password. If no value provided, we generate a unique password for every ApplicationInstance.                   |
| 4  | password24                 | string                              | no              | A 24 character password. If no value provided, we generate a unique password for every ApplicationInstance.                   |
| 5  | public network port range  | a number between 2 and 200          | yes             | A number indicating the size of the desired port range.                                                                       |
| 6  | private network port       | 0 or a number between 30000 - 49151 | yes             | Indicates a default or random network port for your application to use.                                                       |
| 7  | private network port range | a number between 2 and 200          | yes             | A number indicating the size of the desired private port range.                                                               |

Table 2: Property types

## Property inheritance

An ApplicationBuild's properties will be inherited by all [ApplicationInstance](https://docs.i3d.net/game-hosting/elements/application/applicationinstance) elements deployed for said ApplicationBuild.

## Property value overrides

An ApplicationProperty's value can be overridden at later stages, in the listed order:

1. an ApplicationBuild will inherit an Application's properties. Its values can be overridden in the ApplicationBuild ([API documentation](https://docs.i3d.net/api/api_one#v3-applicationbuild))
2. a DeploymentRegion can override a property on a per-region basis. This can be useful if you want to define different property values for each deployment region, allowing you to start your applications with region-based startup parameters ([API documentation](https://docs.i3d.net/api/api_one#v3-applicationbuild))

As such, an override on DeploymentRegion level always wins. If no override for a DeploymentRegion is present, an override of the ApplicationBuild will win. If no override for an ApplicationBuild is present, the original property value defined for the Application will win.

## Property usage

Every property you define will become available as platform variables that can be used in configuration related properties: ApplicationBuild.startupParameters and ApplicationBuildConfiguration.configContents. Please see the [platform variables](https://docs.i3d.net/game-hosting/elements/application/platform-variables) topic for more details.

## Restrictions

You can assign any number of ApplicationBuildProperty to an ApplicationBuild. There is no limitation there. The only rule is that you must have unique propertyKey names per ApplicationBuild.

## Relations

See also: [Application element relations](https://docs.i3d.net/game-hosting/elements/application/element-relations)

## Related topics

* [Orchestrator Overview](https://docs.i3d.net/game-hosting/game-integration/orchestratoroverview)
* [Game Deployment Quick Start Guide](https://docs.i3d.net/game-hosting/overview/quick-start)
* [i3d.net API documentation](https://www.i3d.net/docs/api/v3/all/)
