# App reference

URL: /products/app/reference · Id: `page:products/app/reference`

> Look up any key an App declares, and the call or the code behind each part.

An [App](/business/nouns/app) is declared in one file, `apps/[app]/app.mdx`, over the [Nouns](/business/nouns/noun) the [Startup](/business/nouns/startup) defines. Each key below links to the chapter that explains it.

## The App definition
`apps/[app]/app.mdx` declares one App. Frontmatter only.

| Key | Type | Required | Holds |
| --- | --- | --- | --- |
| [`kind`](/products/app/anatomy#app-kinds) | `saas` \| `admin` \| `directory` \| `commerce` | No | The App kind; `saas` when unset |
| [`mount`](/code/routing) | path | No | Where it serves on the Domain; `/app`, or `/admin` for `admin` |
| [`nouns`](/products/app/app-shell) | Noun names | Yes | The Nouns it shows, a list and a record screen each |
| [`personas`](/products/app/tenancy-and-identity#personas) | map | No | Each Persona who signs in |
| [`personas.*.may`](/code/platform/permissions) | Verb ids | No | The Verbs that Persona may call; each one is a button and a form |
| [`slots`](/products/app/customize#slots) | map | No | A Component per slot: `list.toolbar`, `list.empty`, `record.header`, `record.aside`, `record.actions`, `record.tab`, `form.after`, `dashboard.section` |

```mdx title="apps/portal/app.mdx"
---
kind: saas
mount: /app
nouns: [Lease]
personas:
  manager: { may: [Lease.create, Lease.renew, Lease.notify] }
  resident: { may: [Lease.get] }
slots:
  record.aside: Timeline
---
```

The [Product](/business/nouns/product) that sells it names `App` in its `$type`, in a [product file](/code/file-conventions/products).

## Verbs
| [Verb](/business/nouns/verb) | What it does | Status |
| --- | --- | --- |
| [`App.publish`](/business/nouns/app/publish) | Serves the newest build to every [Tenant](/business/nouns/tenant) | `live` |
| [`Version.deploy`](/business/nouns/version/deploy) | Points the App at a [Version](/business/nouns/version), the previous one to roll back | `live` |
| [`Tenant.provision`](/business/nouns/tenant/provision) | Makes a [Customer](/business/nouns/customer)'s Tenant when it accepts an [Offer](/business/nouns/offer) | `live` |
| [`Tenant.invite`](/business/nouns/tenant/invite) | Asks a person to join a Tenant | `live` |
| `App.pause` | Stops serving the App's screens while the API keeps answering | `planned` |
| `Tenant.requestSupport` | Asks a Tenant's admin for time-limited support access | `planned` |

## Build it in code
| Part | Code |
| --- | --- |
| Screens and components | [UI components](/code/ui) |
| Records and queries | [Database](/code/platform/capabilities/database) |
| Sign-in, sessions and keys | [Auth](/code/platform/identity-and-access) |
| Uploads and documents | [Storage](/code/platform/capabilities/storage) |
| The [Function](/business/nouns/function) behind each Verb | [Functions](/code/platform/capabilities/functions) |
| Live updates | [Realtime](/code/platform/capabilities/realtime) |
| Errors, logs and uptime | [Monitoring](/code/systems/monitoring) |
| One replaced screen | [Views](/code/file-conventions/views) |
| The folder | [`apps/[app]/`](/code/file-conventions/apps#app-folder) |