# Structuring your app navigation As seen in [Composable navigation](../navigation/composable-navigation.md), you can make `NavModels` composable. To achieve this, Appyx offers the `Node` class as the structural element. ## Node illustration In many of the examples you'll see this panel as an illustration of a very simple `Node` – it has some local state (id, colour, and a counter). If you launch the sample app in the `:app` module, you can also change its state (colour) by tapping it. Its counter is stepped automatically. This is to illustrate that it has its own state, persisted and restored. ## Node overview You can think of a `Node` as a standalone component with: - Its own simplified lifecycle - State restoration - A `@Composable` view - Business logic that's kept alive even when the view isn't added to the composition - The ability to host generic [Plugins](../apps/plugins.md) to extract extra concerns without enforcing any particular architectural pattern ## Parent nodes, child nodes `ParentNodes` can have other `Nodes` as children. This means you can represent your whole application as a tree of Appyx nodes. You can go as granular or as high-level as it fits you. This allows to keep the complexity low in individual `Nodes` by extracting responsibilities to children, as well as composing other components to build more complex functionality. ## Composable navigation `Nodes` offer the structure – `NavModels` add dynamism to it. Read more in [Composable navigation](../navigation/composable-navigation.md) ## Lifecycle Nodes have their own lifecycles, directly using the related classes of `androidx.lifecycle`. Read more in [Lifecycle](../apps/lifecycle.md) ## ChildAware API React to dynamically added child nodes in the tree: [ChildAware API](childaware.md) ## Summary A summary of Appyx's approach to structuring applications: - Compose your app out of `Nodes` with their own lifecycles and state - Navigation is local, composed of individual pieces of `NavModels` - Navigation is stateful - Navigation is unit-testable - You're free to implement your own navigable components by utilising `NavModels` - Avoid global navigation concerns, like shared modules needing to know about the application, or the application needing to know about all its possible modules