---
layout: docs
page_title: app - waypoint.hcl
description: |-
  The `app` stanza describes a single deployable application within a project. A majority of the configuration of your project will be done in this stanza.
---

# `app` Stanza

<Placement groups={[['app']]} />

The `app` stanza describes a single deployable application within a project.
A majority of the configuration of your project will be done in this stanza.

A minimum of one `app` stanza is required in your project configuration.

```hcl
app "frontend" {
  build {
    # ...
  }

  deploy {
    # ...
  }

  release {
    # ...
  }
}
```

Multiple `app` stanzas can be specified if Waypoint should deploy multiple
applications in your project. Some examples where this might be useful are
a deployment that targets multiple application tiers, a project that is part of a monorepo, or applications that require lock-step deployment.

```hcl
project = "multi-tier-project"

app "frontend" {
  build {
    # ...
  }

  deploy {
    # ...
  }

  release {
    # ...
  }
}

app "backend" {
  build {
    # ...
  }

  deploy {
    # ...
  }

  release {
    # ...
  }
}
```

Select a specified `app` with the parameter `-app <app-label>`. For example,
to deploy the `frontend` app from the `multi-tier-project`, run
`waypoint deploy -app frontend`.
The `-app` flag is a global target, and can be used with all Waypoint
commands.

## `app` Parameters

### Label

The `app` stanza takes a "label", which is "frontend" above. The label of the
stanza is the name of the application.

The application name is used by Waypoint for organizational purposes.
It is listed in the UI, annotates logs, and more. The application name is
accessible to plugins and is used for defaults in many cases.

~> **Warning: the application name cannot be changed.** Changing the
application name will cause Waypoint to treat it as a _new_ application.
History from the prior name will be preserved but under the prior name.
We will provide a path to rename applications in a future version.

The `app` stanza is composed of other stanzas and parameters, namely `build`,
`deploy`, and optionally, `release` stanzas.

### Required

- `build` <code>([build][build])</code> - Describes how to build this
  application during `waypoint up` or `waypoint build`.

- `deploy` <code>([deploy][deploy])</code> - Describes how to deploy
  this application during `waypoint up` or `waypoint deploy`.

### Optional

- `labels` `(map<string>string: {})` - A set of labels to apply to all
  operations for this application. All builds, deploys, etc. will have these
  labels applied.

- `path` `(string: "")` - The path to the application source. This defaults
  to the directory alongside the project configuration file. This is used by
  builders to determine the root path for the source to build.

- `release` <code>([release][release]: nil)</code> - Describes how to release
  this application during `waypoint up` or `waypoint release`. See
  [default behavior](/docs/lifecycle/release#default-behavior) for how
  releases are handled if release configuration is not specified.

- `runner` <code>([runner][runner]: nil)</code> - The runner stanza configures
  a project for remote operations.

- `url` <code>([url][url]: nil)</code> - Describes the [URL service](/docs/url)
  behavior for this application. If this isn't specified, the default settings
  configured on the Waypoint server will be used.

[build] /docs/waypoint-hcl/build 'Build Stanza'
[deploy] /docs/waypoint-hcl/deploy 'Deploy Stanza'
[release] /docs/waypoint-hcl/release 'Release Stanza'
[runner] /docs/waypoint-hcl/runner 'Runner Stanza'
[url] /docs/waypoint-hcl/url 'url Stanza'
