> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mobile-starter.amisi.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Configurator

> Use the local plan-and-apply UI without confusing its two configuration workflows

The Configurator is a local React and Express app for editing selected repository configuration. It runs against the repository on your machine and writes files only when you use a save or apply action.

## Start it

From the repository root, run:

```bash theme={null}
bun run configurator:dev
```

Open `http://localhost:5173` if the browser does not open automatically.

## App workflow

The **App** section loads `apps/mobile/app.json` directly. It supports:

* Expo name, slug, version, scheme, orientation, UI style, and `newArchEnabled`
* Plugin addition, removal, and JSON-compatible plugin options
* Splash plugin options
* Icon, adaptive icon, and splash paths
* Image uploads to `apps/mobile/assets/images/`
* Arbitrary top-level `expo.<key>` values

Edits remain in browser state until you act:

1. Click **Plan** to validate the JSON and preview a unified diff.
2. Review every changed field.
3. Click **Apply** to atomically rewrite `apps/mobile/app.json`.

Uploads happen immediately and create timestamped files. They do not resize, convert, or delete earlier assets. The file path is staged in the editor, but `app.json` is not changed until **Apply**.

## Theme workflow

The **Theme** section loads and validates `amisi.config.json`. It currently exposes:

* Selected light-theme colors and medium radius
* NativeWind or Uniwind styling adapter
* Mock or Firebase auth, plus Firebase tenant and emulator options
* Mock or RevenueCat subscriptions, plus an entitlement ID

Its actions have different effects:

| Action    | Effect                                                               |
| --------- | -------------------------------------------------------------------- |
| **Save**  | Writes `amisi.config.json`, then shows the remaining plan            |
| **Plan**  | Previews changes to `amisi.config.json` and generated `.env.example` |
| **Apply** | Writes every changed file in that plan                               |

The generated `.env.example` contains only empty Firebase and RevenueCat variable names required by the selected adapters. The Configurator never writes secrets to `.env`.

<Warning>
  The Theme workflow rewrites complete modeled files rather than merging every
  existing field. Its current schema does not model `security`, and generating
  `.env.example` replaces that file with only Firebase and RevenueCat entries.
  The checked-in config also uses `theme.ui.adapter`, while the Configurator
  requires `theme.ui.styling.adapter`; an invalid config silently falls back to
  defaults. Back up and review `amisi.config.json` and `.env.example` before
  using **Save** or **Apply**.
</Warning>

<Warning>
  The Configurator does not edit `apps/mobile/app.config.js`. Dynamic Expo
  config still overrides names, schemes, identifiers, Firebase file paths, and
  OneSignal mode from `app.json`. Keep those settings aligned manually.
</Warning>

## Current limitations

The UI does not manage:

* `apps/mobile/eas.json`, EAS projects, credentials, or EAS environment values
* `EXPO_PUBLIC_APP_ENV` and environment-specific build variants
* Firebase plist/JSON files
* Associated domains, intent filters, Apple team IDs, or App Store Connect IDs unless you use the generic Expo property/plugin editors
* Notification adapter selection in the visible Theme form
* Every theme token; unexposed values remain in `amisi.config.json`

Always review `git diff` after applying changes. Then inspect the evaluated Expo config:

```bash theme={null}
cd apps/mobile
npx expo config --type public
```

## Related guides

* [Configuration overview](/configuration/overview)
* [App identity](/configuration/app-identity)
* [Branding](/configuration/branding)
* [Adapters](/configuration/adapters)
