> ## 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.

# Get branches from a path

> Takes a set of entities and branches the data based on the supplied path.

export const FormField = ({property, label, required = false, diType, uiPatterns, children}) => {
  const patterns = Array.isArray(uiPatterns) ? uiPatterns : uiPatterns ? [uiPatterns] : [];
  return <div style={{
    margin: '1.5rem 0'
  }}>
      <div style={{
    display: 'flex',
    alignItems: 'baseline',
    flexWrap: 'wrap',
    gap: '0.5rem',
    marginBottom: '0.25rem'
  }}>
        <strong>{label}</strong>
        <span style={{
    fontSize: '0.7rem',
    fontWeight: 600,
    textTransform: 'uppercase',
    letterSpacing: '0.04em',
    color: required ? '#6241f5' : '#6b7280'
  }}>
          {required ? 'Required' : 'Optional'}
        </span>
      </div>

      <div>{children}</div>

      {diType || patterns.length > 0 ? <p style={{
    fontSize: '0.85rem',
    color: '#6b7280',
    marginBottom: 0
  }}>
          {diType ? <>
              See the <a href={`/references/${diType}`}>{diType}</a> reference.{' '}
            </> : null}
          {patterns.length > 0 ? <>
              Accepts a <a href={`/documentation/placeholders-and-patterns/patterns#${patterns[0]}`}>pattern</a>.
            </> : null}
        </p> : null}
    </div>;
};

Takes a set of entities and branches the data based on the supplied path. Use this step when a single item contains a list and you want each entry in that list to continue through the rest of the route as its own item, for example to turn one order that contains many lines into one item per line. Every entry matched by the path becomes a separate branch that flows on independently.

This documentation describes: [Schema](/schemas/transformer-step/brancher)

## Fields

<FormField property="pattern" label="Path" required uiPatterns="pattern">
  The dot-notated path to the list you want to split into branches. It must include `*` to mark where the split happens: each entry matched by `*` becomes its own branch. For example `products.*` creates one branch per product, and `order.lines.*` creates one branch per line in `order.lines`. Without a `*` the step has no list level to split on and produces no branches.
</FormField>

<FormField property="entityType" label="Entity schema" diType="entity">
  The entity schema describing the shape of each resulting branch. Leave it empty to keep the same schema as the incoming item. Set it only when a later step expects the branches to follow a specific schema.
</FormField>

## Sample data

This step splits the items passing through a route, so it runs as part of a route rather than on its own. A typical configuration that turns each product in a `products` list into its own item looks like this:

| Field | Value        |
| ----- | ------------ |
| Path  | `products.*` |

With this configuration, an incoming item that holds a `products` list of two products is split into two separate items, one per product. Each branch carries just that product's data and continues through the rest of the route on its own.

```json Configuration theme={null}
{
  "prototype": "brancher",
  "parameters": {
    "pattern": "products.*"
  }
}
```
