# What an edge app is


> A web app packaged for a screen, with a manifest, typed settings, and encrypted secrets, deployed as versions.
An edge app is a web app plus a manifest that tells Screenly how to configure and run it. Once installed it behaves like any other content: it goes in a playlist, takes a duration, and follows the playlist's schedule.

The reason to build one rather than pointing a screen at a URL is everything around the code. You get configuration fields in the dashboard, secrets that never appear in a page source, and versioned deploys across a fleet.

## The manifest

The manifest declares the settings your app exposes in the dashboard. Field types include text, number, select, boolean, textarea, URL, datetime, and image upload, so an app that needs a logo gets an upload control rather than asking someone to paste a URL.

Each field can carry structured help text, which is what stops a settings form being a row of unlabeled boxes.

## Secrets

An API key belongs in a secret, not a setting. Secrets are encrypted and delivered to the device, and an app whose secrets cannot be decrypted is skipped rather than breaking the whole playlist.

## Instances

Installing an app creates an **instance**: your configuration plus the app. One app can have many instances, which is how the same dashboard app runs against three different data sources on three different screens.

## Where it runs

On ScreenlyOS the app runs on the device. On some Screenly Anywhere platforms Screenly runs it server-side and sends the screen images instead, which matters if your app animates or reacts by the second. See [Where an app runs](/docs/apps/overview/where-an-app-runs/).

## Building one

The workflow is CLI-driven:

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

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