# Build and deploy


> The development loop: validate, run against mock data, deploy. Then instances, settings, and versions.
An edge app is a web application plus a `screenly.yml` manifest. Everything below is done with the [CLI](/docs/developers/cli/).

## The loop

```bash
screenly edge-app validate
screenly edge-app run --generate-mock-data
screenly edge-app deploy
```

**Validate** checks the manifest before anything reaches a screen. Run it first, and run it in [CI](/docs/developers/cli/guides/ci-pipelines/).

**Run** starts the app locally against generated mock data, so you can develop without a device and without touching your workspace.

**Deploy** ships it. Every screen running the app picks up the new version on its next sync.

## Creating and naming

`edge-app create` makes the app, `rename` changes its name, and `delete` removes it.

## Settings

`edge-app setting list` and `edge-app setting set` work with the fields your manifest declares.

Settings are ordered as declared in the manifest, so the order in your `screenly.yml` is the order somebody sees in the dashboard. Put the field they must fill in first.

Settings can also be conditionally visible, using `depends_on`, so an option only appears once a prior choice makes it relevant. That is worth using: a form with eight fields where three are irrelevant is a form people get wrong.

## Instances

`edge-app instance list`, `create`, `update`, `delete`.

An instance is the app plus one configuration, and it is the instance that goes in a playlist. One app can have many. See [Instances](/docs/apps/using/instances/).

## Where it runs

On a Screenly player or Player Max, the app runs on the device. On some Screenly Anywhere platforms it is rendered on our infrastructure and sent as an image instead.

> [!IMPORTANT]
> An app that depends on running locally, animating or reacting between refreshes, will not behave the same on Screenly Anywhere. Test on the hardware you are targeting. The local emulator or a player is the right place to develop a dynamic app.

See [Where an app runs](/docs/apps/overview/where-an-app-runs/).

## The full reference

The manifest schema, the JavaScript API available to your app, the branding values, and the deploy model are at [developer.screenly.io](https://developer.screenly.io/edge-apps/).