AGENTS.md template
The copyable project-local Expo engineering contract.
Copy the canonical template below, then replace every angle-bracket placeholder with the consumer project’s actual policy.
# Consumer Expo engineering contract
This file governs work in this repository. Customize every value in angle
brackets before relying on project-specific commands. Preserve more-specific
`AGENTS.md` files in subdirectories.
## Project configuration
- Project root: `<EXPO_PROJECT_ROOT>`
- Package manager: `<npm | yarn | pnpm | bun>`
- Expo SDK: `<SDK_VERSION>`
- Platforms: `<ios | android | web | combinations>`
- Minimum platform versions: `<IOS_ANDROID_WEB_VERSIONS>`
- Routes directory: `<src/app | app>`
- Package scripts: `<START_TYPECHECK_LINT_TEST_EXPORT_COMMANDS>`
- Exact local simulator/emulator or EAS Simulator target: `<TARGET_OR_N_A>`
## Runtime policy
- Expo Go is sufficient for: `<JAVASCRIPT_ONLY_FEATURES>`
- Development client is required for: `<NATIVE_MODULES_CONFIG_PLUGINS_OR_N_A>`
- EAS services requiring explicit authorization: `<HOSTING_STORES_OBSERVE_UPDATES_REMOTE_SIM_OR_N_A>`
- Credentials source: `<LOCAL_ENV_OR_CI_SECRET_STORE>`
- Never commit secrets, tokens, private URLs, or `EXPO_PUBLIC_*` values that
are not safe to expose in a client bundle.
## Architecture
- Route files are under `<ROUTES_DIRECTORY>` and contain route concerns only.
- Shared components: `<COMPONENTS_PATH>`
- Screen bodies: `<SCREENS_PATH>`
- Hooks/utilities: `<HOOKS_AND_UTILS_PATH>`
- Server/API routes: `<SERVER_ROUTE_PATH>`
- Native modules/config plugins: `<MODULES_OR_PLUGINS_PATH_OR_N_A>`
- Data/cache policy: `<APP_OWNED_POLICY>`
- Auth/session policy: SecureStore for tokens; no AsyncStorage tokens; no
secrets in `EXPO_PUBLIC_*`; prefer vendor SDK when present (`expo-auth`)
- Storage policy: local preferences via SQLite localStorage, relational data via
SQLite, and sensitive values via SecureStore.
- Permissions policy: request at moment of need; privacy strings via config;
forever-denied → settings (`expo-permissions`)
## Accessibility and UI
Support screen readers, Dynamic Type, keyboard access, contrast, reduced
motion, responsive layouts, and descriptive labels for icon-only controls.
Keep native UI content opaque and use `Host` around every `@expo/ui` tree.
Document deterministic routes and states for visual inspection:
- Primary routes/states: `<ROUTES_STATES>`
- Appearance/scale fixtures: `<FIXTURES_OR_N_A>`
- Screenshots or hierarchy artifacts: `<LOCAL_ARTIFACT_PATH_OR_N_A>`
## E2E and verification
- E2E tool: `<TOOL_OR_NOT_CONFIGURED>`
- Test location: `<PATH_OR_N_A>`
- App identifier: `<BUNDLE_ID_OR_N_A>`
- Reset/seed strategy: `<PROCEDURE_OR_N_A>`
- Targeted tests: `<COMMAND_OR_N_A>`
- Full tests: `<COMMAND_OR_N_A>`
- Static export: `<COMMAND_OR_N_A>`
Use the narrowest relevant checks first. Report every skipped or failed check,
the exact target used, and residual risk. Do not run paid EAS actions or enable
telemetry without explicit authorization.