---
title: "Apps"
description: "How to create an app? inside a workspace and open its overview."
canonical: https://docs.notifiable.sh/apps
source: https://docs.notifiable.sh/apps.md
---

# Apps

An app is a product inside a workspace. It has a stack, a derived platform, a development environment, a production environment, and public keys. Creating one happens after the workspace exists. Android and web delivery are managed by Notifiable. Apple is connected once for the workspace.

## How it works

App home opens the last workspace this browser used, remembered for a year in `notifiable_last_workspace`, then the last app in that workspace from `notifiable_last_app`. If that app is gone, home opens the oldest app in the workspace. A user with no workspace is sent to create one. A workspace with no apps is sent to create one. When the workspace already has apps, the create screen has a back control that returns to the workspace.

Creation asks for a name, an optional description, and an optional icon, then what the app is built with: Expo, React Native, Flutter, Swift, Kotlin, or Web. Other is a message under that list. Expo and Web create the app from that step. They do not show a configuration step. React Native, Flutter, Swift, Kotlin, and Other continue to Configuration. Android and iOS are closed rows with their icns. Each Android and iOS row describes what Notifiable needs and opens a guide for why, how to find it, and a link to the platform docs. Configure on Android opens the package name. A check appears when that name matches a reverse-DNS package, such as `com.mycompany.myapp`. Configure on iOS opens the bundle ID. Until Apple is saved on the workspace, that field stays inactive and Connect Apple Developer opens the Apple modal. After it is saved, the bundle ID can be entered. The modal says the connection is saved on the workspace, and the button is Save to my workspace. Only one of those rows is open at a time. The signing key accepts a dropped .p8, .pem, or .key file, or pasted key text. Kotlin asks for an Android package name. Swift asks for a bundle ID after Apple is connected for the workspace. React Native, Flutter, and Other can configure Android, iOS, or both, now or later. The configuration step says production stays off until one is saved. A package name configures Android. A bundle ID configures iOS only after Apple is connected for the workspace. They can be created with neither. The platform is derived: Swift is `ios`, Kotlin is `android`, Web is `web`, and Expo is `both`. React Native, Flutter, and Other are `ios`, `android`, or `both` from the sides that are configured. With neither side saved, the platform stays `both` and nothing is provisioned. The icon, when present, must be a PNG, JPG, or WebP image up to 2 MB. Saving creates the app in the current workspace, generates a development public key and a production public key, sets the environment to development, and opens setup. Android provisioning starts immediately and does not block that redirect. Creating an app stops when the workspace has reached its app cap. Create new app then says how many apps that plan includes, starting with “You got 3 apps free.” on Free, and Upgrade opens the plan choices. Soft-deleted apps do not count. Creating, deleting, or restoring an app updates the open billing usage row: apps used is the number of apps that are not deleted, and apps remaining is the plan cap minus that count. An unlimited cap leaves remaining empty.

Setup shows the first 8 characters of the active public key. The rest is masked in the field and blurred in the snippet until the eye reveals it. Copy still copies the full key and the full snippet. The snippet calls `GET /api/v1/sdk/client-config`, `POST /api/v1/sdk/subscribers`, and `POST /api/v1/sdk/events`. `notifiable.record({ event, attribute })` sends `name` and `properties`. A string attribute is stored as `{ value }`. If Android is still being prepared, setup says so. If preparation failed, setup says Android is not ready yet. The code is colored, and the block header shows that stack with its icon. The overview is the app home after setup.

The app switcher lists apps in the current workspace. Deleted apps appear under Deleted for an admin or the owner. Opening one shows restore. Restoring clears the deletion and returns to the overview, unless the workspace is already at its app cap. At the cap, restore shows the same plan message and upgrade. When the workspace is at that cap, the owner sees an upgrade card in the switcher instead of Create new app. The button names the next step, Free to Starter, Starter to Pro, and Pro to contact sales, and opens the plan picker. An admin still sees Create new app, which explains that the owner can upgrade. A deleted app is hidden from the active list and returns 404 on its normal pages.

An admin or the owner can soft-delete an app. Deleting an app does not change the workspace plan. People, usage, and billing are workspace settings, not app settings.
