# Interface: Path

[**lifecycle-kit**](https://jonbogaty.com/lifecycle-kit/api/readme/index.md)

***

[lifecycle-kit](https://jonbogaty.com/lifecycle-kit/api/readme/index.md) / [forms](https://jonbogaty.com/lifecycle-kit/api/forms/readme/index.md) / Path


# Interface: Path {#interface-path}


Defined in: [forms/path.ts:223](https://github.com/jbcom/lifecycle-kit/blob/074e4e7b8038d3e2de9eb44c4b5b5aee0ef02b48/src/forms/path.ts#L223)

What a compositional rule emits.

A flat list of shapes, and that flatness is the point. There is no group or
child node: a tree would need transforms to be worth having, and transforms
would break exact comparability (see the header). `repeat` of `pair` of
`taper` composes by concatenating emitted geometry, not by nesting
containers — which is also how the rules compose conceptually. An ant is
`repeat` three times with `pair` legs at segment boundaries, and that is a
list of shapes, not a scene graph.

What downstream packages actually needed from a tree was never the nesting;
it was knowing which shapes belong to the same part, so that a depth band
and a light could be applied per part. That is a labelling problem, and
`PartTag` solves it without a matrix — see `Shape`. Grouping and transforms
are separable, and only the second one was ever the threat.

Scene graphs are the renderer's business. Pixi consumers already use
`Container`, `position` and `scale` to place a drawn creature in a world;
this type stops at the outline and lets them keep doing that.


## Properties {#properties}



### shapes {#shapes}


> `readonly` **shapes**: readonly [`Shape`](https://jonbogaty.com/lifecycle-kit/api/forms/type-aliases/shape/index.md)[]

Defined in: [forms/path.ts:224](https://github.com/jbcom/lifecycle-kit/blob/074e4e7b8038d3e2de9eb44c4b5b5aee0ef02b48/src/forms/path.ts#L224)
