# Applicationbuildproperty

The ApplicationBuildProperty is an element that adds meaning to the [ApplicationBuild](/game-hosting/elements/application/applicationbuild.md) 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](/game-hosting/elements/application.md) and its [ApplicationProperty](/game-hosting/elements/application/applicationproperty.md) 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](/game-hosting/elements/application/applicationinstance.md) 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](/api/api_one.md#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](/api/api_one.md#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](/game-hosting/elements/application/platform-variables.md) 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](/game-hosting/elements/application/element-relations.md)

## Related topics

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


---

# 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.i3d.net/game-hosting/elements/application/applicationbuildproperty.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.
