<a id="application"></a>

# Application

See also: [How to manage applications](https://documentation.ubuntu.com/juju/4.0/howto/manage-applications.md#manage-applications)

In Juju, an **application** is a running abstraction of a [charm](https://documentation.ubuntu.com/juju/4.0/reference/charm.md#charm) in the Juju [model](https://documentation.ubuntu.com/juju/4.0/reference/model.md#model). It is whatever software is defined by the charm. This could correspond to a traditional software package but it could also be less or more.

An application is always hosted within a [model](https://documentation.ubuntu.com/juju/4.0/reference/model.md#model) and consists of one or more [units](https://documentation.ubuntu.com/juju/4.0/reference/unit.md#unit).

An application can have [resources](https://documentation.ubuntu.com/juju/4.0/reference/resource-charm.md#charm-resource), a [configuration](https://documentation.ubuntu.com/juju/4.0/reference/configuration.md#application-configuration), the ability to form [relations](https://documentation.ubuntu.com/juju/4.0/reference/relation.md#relation), and [actions](https://documentation.ubuntu.com/juju/4.0/reference/action.md#action).

<a id="application-endpoint"></a>

## Application endpoint

In Juju, an application **endpoint** is a struct defined in an [application](#application)’s [charm](https://documentation.ubuntu.com/juju/4.0/reference/charm.md#charm)’s `metadata.yaml` / (since Charmcraft 2.5) `charmcraft.yaml` consisting of

- a name (charm-specific),
- a role (one of `provides`, `requires` = ‘can use’, or `peers`), and
- an interface

whose purpose is to help define a [relation](https://documentation.ubuntu.com/juju/4.0/reference/relation.md#relation).

For example, the MySQL application deployed from the `mysql` charm has an endpoint called `mysql` with role `provides` and interface `mysql` and this can be used to form  a [non-subordinate relation](https://documentation.ubuntu.com/juju/4.0/reference/relation.md#non-subordinate-relation) relation with WordPress.

See more: [GitHub | `mysql-operator` > `metadata.yaml`](https://github.com/canonical/mysql-operator/blob/2bd2bcc65590937dab18d1d9b0fe21a445557bb6/metadata.yaml#L35), [Charmhub | `mysql`](https://charmhub.io/mysql/integrations#mysql)

All charms have an implicit (not in their `metadata.yaml` / `charmcraft.yaml`) endpoint with name `juju-info`, interface `juju-info`, and role `provides`. This endpoint can be used to form [subordinate relations](https://documentation.ubuntu.com/juju/4.0/reference/relation.md#subordinate-relation) with subordinate charms that have an explicit endpoint with interface `juju-info` and role `requires`. See [The implicit juju-info relation endpoint](https://documentation.ubuntu.com/juju/4.0/reference/relation.md#the-implicit-juju-info-relation-endpoint) for details. Examples: [`ntp`](https://charmhub.io/ntp/integrations#juju-info), [`mysql-router`](https://charmhub.io/mysql-router/integrations#juju-info)
