# The `cartbase app` commands

All of them need `cartbase login` first: the login is bound to one store and
every command acts on that store.

| Command | What it does |
|---|---|
| `cartbase app create <key> [--name] [--description]` | Writes the app folder: `cartbase.app.json`, `CLAUDE.md`, `README.md`. Inside a storefront project the folder is `apps/<key>/`. |
| `cartbase app validate [dir]` | Posts the manifest to the platform and prints its verdict: valid, with the screens it would show, or one line per problem. |
| `cartbase app deploy [dir]` | Creates or updates the app on the store. Prints the records and screens and the app's admin address. The first deploy prints the app key once and writes it to the project's `.env.local`. |
| `cartbase app share [dir]` | Publishes the folder as a public repository under the Cartbase organisation, README and MIT licence added. Sharing again refreshes the same repository. |
| `cartbase app install <owner/name \| url> [--dir]` | Reads a public repository once, creates the app on your store as a fork and writes its files under `apps/<key>/`. Prints the key once. |
| `cartbase app uninstall <key> [--remove-files]` | Deletes the app from the store: its record types and records, its settings and secrets, its key, at once. Run `cartbase apps export <key>` first if you want the data. The local folder stays unless `--remove-files`. |

The app rows are also plain resources of the admin API, so the generated
commands work too:

```
cartbase apps list
cartbase apps get store-locator
cartbase apps settings store-locator
cartbase apps update-settings store-locator --data '{"default_zoom": 9}'
cartbase apps keys store-locator
cartbase apps rotate-key store-locator
cartbase apps disable store-locator
cartbase apps enable store-locator
cartbase apps export store-locator
```

A rotated key is printed once, in that answer; every older key stops working
the moment it is issued.
