# App development

Apps allow you to sync [records ](https://docs.middle.app/middle-docs/app-development/sync-records)and perform [actions](https://docs.middle.app/middle-docs/app-development/actions). ENTERPRISE customers can create and edit apps all within Middle's developer dashboard. Since all Middle integration code is open-sourced, you are able to review the code powering your Middle instance's apps. All apps are coded in Python.&#x20;

{% hint style="info" %}
Apps are managed on an [instance-by-instance](https://docs.middle.app/middle-docs/introduction/enterprise-installations) basis. That means that if you add an app to your Middle installation it will only be visible to you unless you'd like it to be publicly available to others.
{% endhint %}

To access your instance’s apps, click the **Apps** tab.&#x20;

![Your Middle instance's menu bar](https://932524191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mks_UuU2atghAuA9bQz%2Fuploads%2FSbOpdlUmpTRiiDy5HLX8%2F0?alt=media)

This tab will show all installed apps that currently exist in your Middle instance. This dashboard will also allow you to create or upload an app.

## Elements of an app

There are four main elements to a Middle app:

* [**Authentication**](https://docs.middle.app/middle-docs/app-development/authentication) defines what's needed for an app to work and gain authorization to access the systems you are integrating with
* [**Record types**](https://docs.middle.app/middle-docs/app-development/sync-records) are data synced into Middle, I.E. Middle's inputs
* [**Actions**](https://docs.middle.app/middle-docs/app-development/actions) are typically Middle's "Outputs": how data flows out of Middle
* [**Code packages**](https://docs.middle.app/middle-docs/app-development/code-packages) are referencable by your record sync and action code to open libraries, use functions, etc., and not have to repeatedly embed this in your code

## The steps of app development

There are seven steps to building a new app:

1. Create a new app
2. Configure app settings
3. Configure authentication (authorization)
4. Create record types and poll syncs (inputs)
5. Create actions (outputs)
6. (Optional) upload code packages or helper functions
7. Test your app

## Creating a new app

To integrate with a system that is not already available on the platform, you must create a new app on your Middle instance.

To create a new app, click **+ Create an app** in your app portal.

This will create a new app and bring you to the new app's dashboard.

<figure><img src="https://932524191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mks_UuU2atghAuA9bQz%2Fuploads%2FzhwWN9eQPe3n27jDgrOc%2F1?alt=media" alt=""><figcaption><p>Click to create a new app</p></figcaption></figure>

Once your app is in use, this dashboard will begin to report metrics about worker queues and sync attempts. It will also contain a Download button to download a zipped JSON copy of your app, which can be generated using the Regenerate button.&#x20;

![An app's dashboard](https://932524191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mks_UuU2atghAuA9bQz%2Fuploads%2FQ105AcH4Z557YX45o3KK%2F2?alt=media)

### Configure App Settings

First, you will need to configure the app’s settings.

If you plan to make your new app public, it is important for people to understand the purpose of the app, the system it's integrating to, and any important notes for developers who may need to work with the app in the future.

To configure your app's settings, click **Settings** from the left-hand navigation menu.

There are two levels of app visibility: *hidden*, and *public*. Turning this **toggle on** will make this app visible for Accounts to connect to.&#x20;

![Set a toggle to make an app visible to all accounts](https://932524191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mks_UuU2atghAuA9bQz%2Fuploads%2F9ibkTAf85rHqmSEjUIBN%2F4?alt=media)

You will also be able to name your app, provide app descriptions, and add any important notes about the platform you are integrating with. Here's an example of what these fields could look like for our new app: "CoolNewApp."

![Cosmetic settings for your new app](https://932524191-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-Mks_UuU2atghAuA9bQz%2Fuploads%2FwNQQxt9tPWxz7nOjtDMk%2F5?alt=media)

Once you have filled out your app's settings, click **Save**.
