> For the complete documentation index, see [llms.txt](https://docs.auterion.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.auterion.com/~/changes/TDRfjBXXgHmxK48cWqay/app-development/app-framework/app-framework.md).

# Building your First App

Structure of the app meta file, and how to build the app

## The auterion-app.yml file

The auterion-app.yml file has to be in the apps root directory. In its most basic form it is structured like this:

```yaml
auterion-api-version: 2  # The auterion API version this app is targeting
auterion-app-base: none  # Can be set to a version of the auterion/app-base 
                         # docker image, if it is used as a base image in the app. 
                         # This makes the tooling remove all the layers from the 
                         # respective base image to reduce the app size. 

app-name: example-webservice          # The name of your app
app-version: 0.0.1                    # The version of your app
app-author: com.auterion              # The authoring entity. 
                                      # Has to be reverse-domain name notation
target-platform: [skynode, ainode]    # Supported platforms of this app.
                                      # Can be skynode or ainode


# Like in docker-compose, your app can consist of multiple docker containers. 
# In 'services' you list all the containers that make up your app. In most 
# cases, this is just one service
services:
  example-webservice:                     # name of this service
    build: services/example-webservice    # location of the Dockerfile of the service
    # .... Additional API configurations .....
  existing-docker-image:                  # name of another service
    image: ubuntu:22.04                   # Auterion-cli can include existing images
```

Each AuterionOS app targets a specific API level. The API level an app targets, is specified in the `auterion-app.yml` file like so:

```
auterion-api-version: 2
```

For a full comparison of the available API versions see [Apps API](/~/changes/TDRfjBXXgHmxK48cWqay/app-development/app-framework/app-framework-1.md).

## Building the app

What does `auterion-cli app build` really do? It performs the following tasks

1. For all the services with a `build` directive, it builds the image using `docker build --platform=linux/arm64`. If the auterion-cli command is invoked with the `--simulation` flag, it will instead execute `docker build --platform=linux/amd64`.
2. For all services with a `image` directive it pulls them from docker hub
3. It packages the built image into a .auterionos file
