# The app lifecycle

!!! abstract “”

    The different app types, their base classes, and how `define_app` transforms a user defined class or function into a composable app.

## Types of apps

### Loaders

These are responsible for loading data and are composable. They inherit from `LoaderApp`.

    from scinexus import LoaderApp

### Writers

These are responsible for writing data and are composable. They inherit from `WriterApp`.

    from scinexus import WriterApp

### Generic

Generic apps do other operations on data and are composable. They inherit from `ComposableApp`

    from scinexus import ComposableApp

### Non-composable

Non-composable apps cannot be combined with other apps into pipelines.

    from scinexus import NonComposableApp

!!! info

    You can create your app by inheriting from one of the above base classes. Or you can use the `define_app` decorator. Using the decorator is the fastest way to turn something you already have into a composable app. Under the hood, the decorator is basically injecting the base classes described above into the inheritance of your own classes.