> ## Documentation Index
> Fetch the complete documentation index at: https://docs.alumio.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Patterns

> Overview of all pattern types in Alumio and when to use each.

Patterns are dot-notated paths used throughout Alumio to navigate and select data within an entity. Several features use pattern fields, but their behavior differs per context.

## Pattern syntax

| Syntax            | Meaning                                          |
| ----------------- | ------------------------------------------------ |
| `product.name`    | Access the `name` key nested under `product`     |
| `products.0`      | Access the first element of the `products` array |
| `products.*`      | Match all elements of the `products` array       |
| `products.*.name` | Access `name` for every element in `products`    |

## Pattern types by feature

### Pattern accessor

Accesses one or more values from entity data. Use `*` to match all array items.

Example: `products.*.sku` returns the `sku` of every product.

[View documentation](/references/accessor/pattern)

***

### Copy / Move using a pattern

Copies or moves data from one location to another. Each `*` in the source pattern becomes a numbered capture group (`$1`, `$2`, ...) that can be referenced in the replacement.

Example:

* **Pattern**: `products.*.name`
* **Replacement**: `product_names.$1`

[View documentation for Copy](/references/transformer/pattern-copy) | [View documentation for Move](/references/transformer/pattern-move)

***

### Get branches from a pattern

Splits one entity into multiple branches based on an array in the data. The pattern **must include `*`** — each element matching `*` becomes its own branch.

Example: `products.*` creates one branch per product.

[View documentation](/references/transformer-step/brancher)

***

### Pattern to items (stream deserializers)

Points to the array within the data that contains the items to process. This field does **not** require `*` — it points to the array itself, and the system automatically iterates over all elements.

Example: `data.products` reads items from `{"data": {"products": [...]}}`

Used in: [JSON](/references/stream-deserializer/json), [XML](/references/stream-deserializer/xml), [YAML](/references/stream-deserializer/yaml), [Form URL encoded](/references/stream-deserializer/form-urlencoded)

***

## Key difference: `*` required vs. not required

| Feature                         | Requires `*`? | Reason                                                            |
| ------------------------------- | :-----------: | ----------------------------------------------------------------- |
| Pattern accessor                |    Optional   | `*` matches all items; without it, only a single path is accessed |
| Copy / Move using a pattern     |    Optional   | `*` enables capture groups in the replacement                     |
| Get branches from a pattern     |    **Yes**    | The `*` indicates which array level to split on                   |
| Pattern to items (deserializer) |     **No**    | Points to the array; iteration is implicit                        |

## Placeholders

Placeholders (`&{...}`) are a separate feature that inserts dynamic values from entity data into strings. They are different from patterns and work across most text fields.

Example: `&{product.name}` is replaced by the actual product name at runtime.

[View placeholder documentation](/references/placeholders)
