Properties are the fields inside the nodes.

Most of the properties of a node are mapped to table fields in X3. The **Table dictionary** (GESATB) contains the metadata related to node properties.

Node properties defined in the **Table dictionary** are used by all the nodes based on this table.

## Metadata

From 2026 R1/V12.0.39, metadata for table properties is managed in the dedicated **Table properties** function (**GESATBP**), located in **Development** <GreaterThan /> **Data and parameters** <GreaterThan /> **API** <GreaterThan /> **Table properties**. The corresponding fields in the **Table dictionary** (GESATB) are now read-only and visible on screen for reference only. Because API configuration is stored on the **Table properties** object separately from the table, a table and its properties are patched separately — see [Patching table properties](./properties/patching-table-properties/).

The following fields are available to define properties:

* **Property name (API)**: Name of the property linked to this field. This is mandatory of course, if that table field is part of a node.

  * **Denormalized collection (API)**: This is used only for indexed (dimensioned) fields. Indexed data is represented as a denormalized collection in GraphQL and has its own definitions and references. Read the Denormalized collection for more details.
  * **Package name (API)**: If a package name is defined here, the property will be published in an extension package different than the node’s main node package as a node extension. This allows you to separate your deliveries into different packages that can be turned on or off depending on the requirements. From 2026 R1/V12.0.39, this also applies to denormalized collection (indexed) fields, which can be published in a package different from the denormalized collection’s main node package. Read the [Packages](/x3/docs/latest/guides/sage-x3-builder/developing-api/graphql-api/packages/) documentation for more details on node extensions, and the [Denormalized collections](/x3/docs/latest/guides/sage-x3-builder/developing-api/graphql-api/properties/denormalized-collections) documentation for the denormalized collection case.
* **Global variable init (API)**: If the link expression for a field contains a global variable, we can setup the content of this global variable in this field. Read the [Legislation](/x3/docs/latest/guides/sage-x3-builder/developing-api/graphql-api/properties/legislation/) documentation for more details.

## Naming convention

Property names are written following the camelCase convention. This means no capital letter on the first noun and must start with a letter.

## Property type

Properties have the same type as the table field they represent.

The most common GraphQL types are string, integer, decimal, date, enum, and boolean.

**Enum** represents the Sage X3 local menu.

**Localized descriptions**:

* X3 translatable texts are managed in the GraphQL schema.
  * Regarding the TypeScript code generator:
  * For basic joins, GraphQL framework manages the link to translations without adding any additional code to the TypeScript node definition. This happens for joins with less than two fields in the `ATEXTRA` key.
    * For complex joins, the code generator will add additional references for **localizedStrings** to the node TypeScript definition. This happens for joins with more than two fields in the `ATEXTRA` key.

Dimensioned fields are not supported in localized string binding tables.