From af163ba19168a5250d1a0ff4d05056850fc29e29 Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Thu, 6 Aug 2026 16:15:36 -0300 Subject: [PATCH 1/7] docs: simplify AGENTS.md and fix stale facts Cut from 329 to 99 lines: removed hardcoded counts and derivable catalogs in favor of pointers to source files, added the missing examples/expo-multichain entry and changeset rule, fixed the stale partials count. Co-Authored-By: Claude Fable 5 --- AGENTS.md | 351 ++++++++++-------------------------------------------- 1 file changed, 61 insertions(+), 290 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 76a9becc..0a390856 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,328 +1,99 @@ # AppKit React Native SDK -## SDK Overview +**AppKit React Native** is a multichain web3 SDK by Reown that connects React Native apps to crypto wallets and blockchains: wallet connections via the WalletConnect protocol plus custom connectors (Coinbase, Phantom, etc.), EVM / Solana / Bitcoin support, SIWX authentication, swaps, on-ramp, and a prebuilt themeable modal UI. -**AppKit React Native** is a multichain web3 library by Reown that enables React Native applications to connect users with cryptocurrency wallets and interact with blockchain networks. +Tech stack: React Native 0.72+ (example app on 0.76), TypeScript 5.2, Valtio, WalletConnect v2, ethers.js / wagmi, Solana Web3.js. -### Core Functionality - -- **Wallet Connection**: Multi-wallet support via WalletConnect protocol and custom connectors (Coinbase, Phantom, etc.) -- **Multichain Support**: EVM (Ethereum, Polygon, Arbitrum, etc.), Solana, and Bitcoin -- **User Authentication**: Sign-In With X (SIWX) for decentralized authentication -- **DeFi Features**: Token swaps, on-ramp/off-ramp, transaction monitoring -- **Native Modal UI**: Pre-built, customizable React Native components -- **Theme Support**: Light/dark themes with customization options - -### Monorepo Structure +## Monorepo Structure ``` packages/ -├── core/ # Controllers, utilities, core business logic (@reown/appkit-core-react-native) -├── appkit/ # Main SDK entry point, hooks, components (@reown/appkit-react-native) +├── core/ # Controllers, utilities, business logic (@reown/appkit-core-react-native) +├── appkit/ # Main SDK entry: hooks, modal, views, partials (@reown/appkit-react-native) ├── ui/ # Reusable UI components (@reown/appkit-ui-react-native) -├── common/ # Shared types, constants, utilities (@reown/appkit-common-react-native) -├── ethers/ # EVM adapter using ethers.js (@reown/appkit-ethers-react-native) -├── wagmi/ # EVM adapter using wagmi (@reown/appkit-wagmi-react-native) -├── solana/ # Solana blockchain adapter (@reown/appkit-solana-react-native) -├── bitcoin/ # Bitcoin blockchain adapter (@reown/appkit-bitcoin-react-native) -├── coinbase/ # Coinbase wallet connector (@reown/appkit-coinbase-react-native) -└── cli/ # CLI tools (@reown/appkit-cli-react-native) +├── common/ # Shared types, constants, network definitions (@reown/appkit-common-react-native) +├── ethers/ # EVM adapter using ethers.js +├── wagmi/ # EVM adapter using wagmi +├── solana/ # Solana adapter +├── bitcoin/ # Bitcoin adapter +├── coinbase/ # Coinbase wallet connector +└── cli/ # CLI tools apps/ -├── native/ # Example React Native Expo app -└── gallery/ # UI component showcase -``` - -### Architectural Patterns - -**Controller Pattern (Valtio)** -State management via reactive controllers: - -- `ModalController` - Modal visibility and state -- `RouterController` - Navigation between views -- `ConnectionsController` - Wallet connections and networks -- `SwapController` - Token swap operations -- `SendController` - Transfer operations -- `TransactionsController` - Transaction history - -**Adapter Pattern** -Blockchain-specific implementations: - -- `BlockchainAdapter` - Base interface -- EVM adapters (Ethers, Wagmi) -- Solana adapter -- Bitcoin adapter - -**Connector Pattern** -Wallet connection methods: - -- `WalletConnectConnector` - Default WalletConnect protocol -- Custom connectors for Coinbase, Phantom, etc. - -### Tech Stack - -- React Native 0.72+ (tested with 0.76+) -- TypeScript 5.2+ -- Valtio (state management) -- WalletConnect v2 -- Ethers.js / Wagmi (EVM) -- Solana Web3.js - ---- - -## UI System - -### Package Structure - -The UI layer is split between two packages: - -``` -packages/ui/src/ # Reusable UI library (@reown/appkit-ui-react-native) -├── components/ # 11 base primitives (Card, Icon, Text, Image, Modal, etc.) -├── composites/ # 42 feature-rich components (Button, ListItem, InputText, etc.) -├── layout/ # 3 layout helpers (FlexView, Overlay, Separator) -├── context/ # ThemeContext and ThemeProvider -├── hooks/ # useTheme, useAnimatedValue, useCustomDimensions -├── utils/ # UiUtil, ThemeUtil, TypesUtil, TransactionUtil -└── assets/ # SVG icons - -packages/appkit/src/ # AppKit-specific UI (@reown/appkit-react-native) -├── modal/ # Modal wrapper and router -├── views/ # Route views (Connect, Account, Swap, Networks, etc.) -└── partials/ # 24 AppKit-specific composites (Header, Snackbar, QrCode, etc.) -``` - -### Component Hierarchy +├── native/ # Example React Native Expo app (yarn ios / yarn android) +└── gallery/ # UI component showcase (Storybook) -**Base Components** (`packages/ui/src/components/`): - -- `wui-card` - Container with themed background/border -- `wui-icon` - SVG icon renderer (60+ icons) -- `wui-text` - Typography with 23 variants -- `wui-image` - Image loader with error handling -- `wui-modal` - Animated bottom sheet -- `wui-pressable` - Base pressable wrapper -- `wui-shimmer` - Loading skeleton -- `wui-loading-spinner` - Loading indicator - -**Composite Components** (`packages/ui/src/composites/`): - -- `wui-button` - Primary button (size: sm/md, variant: fill/shade/accent) -- `wui-list-item` - Pressable list item with animations -- `wui-input-text` - Animated text input with focus states -- `wui-card-select` - Wallet/Network selector card -- `wui-tabs` - Animated tab switcher -- `wui-qr-code` - QR code with embedded logo -- `wui-snackbar` - Toast notification -- `wui-avatar` - Address-based avatar with gradient - -**Layout Components** (`packages/ui/src/layout/`): - -- `FlexView` - Flex container replacing View (supports gap, padding arrays) -- `Overlay` - Semi-transparent overlay -- `Separator` - Divider with optional text - -### Theming System - -**Theme Colors** (62 keys in DarkTheme/LightTheme): - -- `accent-100` to `accent-020` - Primary brand colors -- `fg-100` to `fg-300` - Foreground/text colors -- `bg-100` to `bg-300` - Background colors -- `success-100`, `error-100` - Semantic colors -- `gray-glass-001` to `gray-glass-090` - Glass morphism overlays - -**Design Tokens**: - -``` -Spacing: '0' | '4xs' | '3xs' | '2xs' | 'xs' | 's' | 'm' | 'l' | 'xl' | '2xl' | '3xl' | '4xl' - 0 2 4 6 8 12 14 16 20 24 32 40 (px) - -BorderRadius: '5xs' | '4xs' | '3xs' | 'xxs' | 'xs' | 's' | 'm' | 'l' | '3xl' | 'full' - 4 6 8 12 16 20 28 36 80 100 (px) +examples/ +└── expo-multichain/ # Standalone npm example app — NOT part of the yarn workspace, + # so yarn build/test don't cover it. Has its own package-lock.json. ``` -**Typography** (23 variants): +## Architecture -- Sizes: `medium-title`, `small-title`, `large`, `medium`, `paragraph`, `small`, `tiny`, `micro` -- Weights: `400`, `500`, `600`, `700` -- Example: `paragraph-500`, `small-400`, `micro-700` +- **Controllers** (Valtio reactive state) in `packages/core/src/controllers/`: `ModalController`, `RouterController`, `ConnectionsController`, `SwapController`, `SendController`, `TransactionsController`, etc. Views subscribe via `useSnapshot(ControllerState)`. +- **Adapters** — blockchain-specific implementations of the `BlockchainAdapter` interface: ethers/wagmi (EVM), solana, bitcoin. +- **Connectors** — wallet connection methods: `WalletConnectConnector` (default) plus custom ones (Coinbase, Phantom). +- **Namespaces / CAIP** — CAIP-style chain identifiers (`eip155:1`) and addresses (`eip155:1:0x...`). +- **Routing** — `RouterController` navigates between views in `packages/appkit/src/views/`; the up-to-date list of route ids lives in `RouterControllerState` (`packages/core/src/controllers/RouterController.ts`). -**Using Theme**: +Key files: -```typescript -const Theme = useTheme(); -// Returns themed color object that responds to light/dark mode ``` - -### Animation Patterns - -Animations use React Native's `Animated` API, preferring the native driver for GPU-accelerated properties (opacity, transforms) and falling back to `useNativeDriver: false` when animating unsupported properties like colors. - -**Modal Animation** (native driver): - -- Opening: Spring physics (damping: 25, stiffness: 220) -- Closing: Timing animation (150ms) for snappy UX -- Backdrop: Opacity fade (300ms in, 250ms out) - -**Component Animations** (JS-driven, `useNativeDriver: false`): - -- `useAnimatedValue` hook for color interpolation on press states -- `Animated.createAnimatedComponent(Pressable)` for interactive elements -- Color transitions between normal/pressed states - -### Views and Router - -**RouterController** manages navigation between views defined in `RouterControllerState` (see `packages/core/src/controllers/RouterController.ts` for the up-to-date list of route IDs). - -View categories: - -- Account flows (account overview and default account views) -- Connection flows (social logins, external wallets, WalletConnect, etc.) -- Network management (network selection, switching, unsupported network messaging) -- On-ramp experiences (on-ramp setup, checkout, loading, settings) -- Swap flows (swap entry and swap preview/review) -- Wallet actions (receiving, sending, send preview/review) -- Informational views (e.g., "What is a network?", "What is a wallet?") - -**View Pattern**: - -```typescript -export function MyView() { - const snapshot = useSnapshot(ControllerState); - const { padding } = useCustomDimensions(); - - return ( - - {/* Content */} - - ); -} -``` - -### Common UI Patterns - -**FlexView Layout**: - -```typescript - -``` - -**List Item**: - -```typescript - - - {name} - - -``` - -**Button**: - -```typescript - -``` - -### UI Guidelines for Agents - -1. **Use existing components** - Never create custom primitives; use the `wui-*` components -2. **Follow theme system** - All colors must come from theme, no hardcoded hex values -3. **Use FlexView** - Prefer FlexView over View for layout consistency -4. **Spacing tokens** - Use spacing tokens ('xs', 's', 'm', etc.) not pixel values -5. **Animation consistency** - Use `useAnimatedValue` hook for press state animations -6. **Memoize list items** - Use `React.memo` with custom comparison for expensive list items -7. **Test both themes** - Verify changes work in both light and dark mode - ---- - -## Agent Guidance - -### Code Quality Requirements - -**Before pushing any solution, always run:** - -```bash -yarn format # Prettier formatting -yarn lint # ESLint checks -yarn test # Jest tests +packages/appkit/src/AppKit.ts # Main SDK class +packages/appkit/src/hooks/ # useAppKit, useAccount, etc. +packages/core/src/controllers/ # State management controllers +packages/common/src/ # Shared types and network definitions +packages/ethers/src/adapter.ts # EVM adapter implementation ``` -Follow existing code style in the codebase. Do not deviate from established patterns. - -### Platform Compatibility - -This SDK must work for both **Expo** and **React Native CLI** projects. Ensure any changes are compatible with both environments. - -### Dependency Policy +## UI System -**Keep external third-party dependencies minimal.** Avoid adding new libraries if possible - the SDK must remain lightweight. If a new dependency is absolutely necessary, justify it clearly. +The UI layer is split between two packages: -### Key Abstractions +- `packages/ui/src/` — the reusable library: `components/` (base primitives, `wui-*` names), `composites/` (feature-rich components like Button, ListItem, InputText), `layout/` (`FlexView`, `Overlay`, `Separator`), `hooks/` (`useTheme`, `useAnimatedValue`, `useCustomDimensions`), `utils/` (ThemeUtil holds all color/spacing/typography tokens), `assets/` (SVG icons). +- `packages/appkit/src/` — AppKit-specific UI: `modal/`, `views/` (route views), `partials/` (`w3m-*` composites like header, snackbar, QR code). -- **Adapters**: Blockchain-specific implementations (one per chain type) -- **Connectors**: Wallet connection methods -- **Controllers**: Valtio-based reactive state containers -- **Namespaces**: CAIP-style chain identifiers (e.g., `eip155:1` for Ethereum mainnet) -- **CAIP Addresses**: Chain-agnostic addresses (e.g., `eip155:1:0x...`) +### UI Guidelines -### Important Files +1. **Use existing components** — never create custom primitives; use the `wui-*` components. +2. **Follow the theme system** — all colors come from `useTheme()`; no hardcoded hex values. Works in both light and dark mode — test both. +3. **Use FlexView** — prefer it over `View`; it supports `gap` and padding arrays (`padding={['l', 'xl', 's', 'xl']}` = [top, right, bottom, left]). +4. **Use design tokens** — spacing ('xs', 's', 'm', …), border radius, and typography variants ('paragraph-500', 'small-400', …) are defined in `packages/ui/src/utils/ThemeUtil.ts`; don't use raw pixel values. +5. **Animations** — React Native `Animated` API; native driver for opacity/transforms, `useNativeDriver: false` only for unsupported properties like colors. Use the `useAnimatedValue` hook for press-state color transitions. +6. **Memoize list items** — `React.memo` with a custom comparison for expensive list items. -``` -packages/appkit/src/AppKit.ts # Main SDK class (~900 LOC) -packages/appkit/src/hooks/ # React hooks (useAppKit, useAccount, etc.) -packages/core/src/controllers/ # State management controllers -packages/common/src/ # Shared types and network definitions -packages/ethers/src/adapter.ts # EVM adapter implementation -packages/solana/src/ # Solana adapter -packages/bitcoin/src/ # Bitcoin adapter -``` +When building a view, copy the pattern of an existing one in `packages/appkit/src/views/` (useSnapshot + useCustomDimensions + FlexView). -### Development Commands +## Development ```bash yarn install # Install dependencies yarn ios # Run example on iOS simulator yarn android # Run example on Android emulator yarn build # Build all packages -yarn lint # Run ESLint -yarn test # Run Jest tests -yarn format # Run Prettier ``` -### Commit Convention - -Follow conventional commits: `fix:`, `feat:`, `refactor:`, `docs:`, `test:`, `chore:` - -### Dependabot Alerts - -When resolving Dependabot security alerts or dependency update PRs: - -1. **Direct dependencies** - Update the version directly in the package's `package.json` where it's declared. This is cleaner than using resolutions because: - - - It keeps the dependency version visible where the package is used - - Resolutions are meant for transitive dependencies you don't control - - Example: update storybook in `apps/gallery/package.json`, not via root resolutions - -2. **Transitive dependencies** - Use resolutions/overrides for dependencies you don't directly declare: - - - Root `package.json` → `resolutions` field (for yarn workspaces) - - Specific package's `package.json` → `overrides` field (for npm packages like expo-multichain) +**Before pushing any solution, always run:** -3. **Update lockfiles** - After making changes: +```bash +yarn format # Prettier +yarn lint # ESLint +yarn test # Jest +``` - - Run `yarn install` at root to update `yarn.lock` - - Run `npm install` in the specific package directory to update `package-lock.json` +Rules: -4. **Check for related packages** - When updating a package, check if there are related packages that should be updated together (e.g., updating `storybook` should also update all `@storybook/*` addons to the same version for consistency) +- Follow existing code style; do not deviate from established patterns. +- The SDK must work in both **Expo** and **React Native CLI** projects. +- **Keep third-party dependencies minimal** — avoid new libraries; justify any that are absolutely necessary. +- Conventional commits: `fix:`, `feat:`, `refactor:`, `docs:`, `test:`, `chore:`. +- Changesets: a changeset must list **all published packages** (they are versioned together), not only the one you changed. -5. **Never update to new major versions** - Only apply patch/minor updates. Major version bumps can cause breaking changes and compatibility issues. +## Dependency Updates / Dependabot -6. **Run formatting before committing** - Always run `yarn format` to fix any prettier issues before creating a commit. +1. **Direct dependencies** — update the version in the `package.json` that declares it (e.g. storybook in `apps/gallery/package.json`), not via root resolutions. +2. **Transitive dependencies** — use root `resolutions` (yarn workspaces) or the package's `overrides` field (npm packages like `examples/expo-multichain`). +3. **Lockfiles** — run `yarn install` at root for `yarn.lock`; run `npm install` inside `examples/expo-multichain` for its `package-lock.json`. Verify that example still bundles with `npx expo export`. +4. **Related packages** — update families together (e.g. `storybook` + all `@storybook/*` addons to the same version). +5. **Never bump major versions** — patch/minor only. +6. Run `yarn format` before committing. From 0b4efc410ed65297861acdcfb434c6de2d1065f3 Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Thu, 6 Aug 2026 16:21:39 -0300 Subject: [PATCH 2/7] docs: link public docs site from AGENTS.md Co-Authored-By: Claude Fable 5 --- AGENTS.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index 0a390856..d99312a5 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -4,6 +4,8 @@ Tech stack: React Native 0.72+ (example app on 0.76), TypeScript 5.2, Valtio, WalletConnect v2, ethers.js / wagmi, Solana Web3.js. +Public (consumer-facing) documentation: https://docs.reown.com/appkit/react-native/core/installation — useful for checking the documented public API when changing SDK behavior. + ## Monorepo Structure ``` From d8e0f7107c9f59021b6dc0253aed8977f5d36583 Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Thu, 6 Aug 2026 16:27:11 -0300 Subject: [PATCH 3/7] docs: add testing guidance to AGENTS.md Co-Authored-By: Claude Fable 5 --- AGENTS.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index d99312a5..3619a552 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -83,6 +83,13 @@ yarn lint # ESLint yarn test # Jest ``` +### Testing changes + +- Unit tests live in each package's `src/__tests__/`. Run one package's tests with `yarn workspace @reown/appkit--react-native test` (faster than the root `yarn test`). +- Jest mocks are shared via `jest-shared-setup.ts`, imported as `@shared-jest-setup` in each package's `jest-setup.ts` — read `TESTING.md` before adding mocks; put shared mocks there, package-specific ones in the package's `jest-setup.ts`. +- New logic in controllers/utils/adapters should come with unit tests following the existing patterns in the package's `__tests__/` folder. +- Manual verification: run the example app (`yarn ios` / `yarn android`) for SDK behavior, and `apps/gallery` (Storybook) for isolated UI component changes. + Rules: - Follow existing code style; do not deviate from established patterns. From dd27be8bb752e46b2ea51c6e644f14876e9cee8d Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Thu, 6 Aug 2026 16:29:31 -0300 Subject: [PATCH 4/7] docs: fix stale Playwright section in TESTING.md, reference e2e from AGENTS.md TESTING.md pointed to a nonexistent root e2e/ directory; the Playwright suite actually lives in apps/native/tests and runs in CI via e2e.yml. Co-Authored-By: Claude Fable 5 --- AGENTS.md | 1 + TESTING.md | 78 +++++++++--------------------------------------------- 2 files changed, 14 insertions(+), 65 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 3619a552..181d6728 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -88,6 +88,7 @@ yarn test # Jest - Unit tests live in each package's `src/__tests__/`. Run one package's tests with `yarn workspace @reown/appkit--react-native test` (faster than the root `yarn test`). - Jest mocks are shared via `jest-shared-setup.ts`, imported as `@shared-jest-setup` in each package's `jest-setup.ts` — read `TESTING.md` before adding mocks; put shared mocks there, package-specific ones in the package's `jest-setup.ts`. - New logic in controllers/utils/adapters should come with unit tests following the existing patterns in the package's `__tests__/` folder. +- E2E (Playwright) tests live in `apps/native/tests/`; run them with `yarn playwright:test` from the root (CI runs them via `.github/workflows/e2e.yml`). See `TESTING.md` for details. - Manual verification: run the example app (`yarn ios` / `yarn android`) for SDK behavior, and `apps/gallery` (Storybook) for isolated UI component changes. Rules: diff --git a/TESTING.md b/TESTING.md index 20e04d51..22a72b34 100644 --- a/TESTING.md +++ b/TESTING.md @@ -91,83 +91,31 @@ To run tests for a specific package: yarn workspace @reown/appkit-[package-name]-react-native test ``` -## Playwright Testing +## Playwright Testing (E2E) -For end-to-end testing of web interfaces (such as the web demo or web views within the React Native app), we use Playwright. +End-to-end tests run against the example app's web build (Expo web) using Playwright. They run in CI via `.github/workflows/e2e.yml`. -### Setup - -1. Install Playwright: - -```bash -# Install Playwright and browsers -npx playwright install -``` - -2. Playwright tests are located in the `e2e` directory at the root of the project. - -### Writing Tests - -Playwright tests are written using the Playwright Test framework. Here's a basic example: - -```typescript -import { test, expect } from '@playwright/test'; - -test('basic test', async ({ page }) => { - // Navigate to the page - await page.goto('https://your-app-url.com'); - - // Interact with the page - await page.click('text=Sign In'); - await page.fill('input[name="email"]', 'user@example.com'); - await page.fill('input[name="password"]', 'password'); - await page.click('button[type="submit"]'); - - // Assert the result - await expect(page.locator('.welcome-message')).toContainText('Welcome'); -}); -``` - -### Running Playwright Tests - -To run all Playwright tests: - -```bash -yarn playwright:test -``` - -To run a specific test file: - -```bash -yarn playwright:test tests/basic-tests.spec.ts -``` +### Structure -### Debugging Playwright Tests +- Tests: `apps/native/tests/*.spec.ts` (shared helpers in `apps/native/tests/shared/`) +- Config: `apps/native/playwright.config.ts` -To debug tests: +### Running -1. Run with the `--debug` flag: +From the repo root: ```bash -yarn playwright:test --debug +yarn playwright:test # runs all e2e specs (via apps/native) ``` -2. Use the Playwright Inspector to step through the test. - -3. Add `await page.pause()` in your test to pause at a specific point. - -### Generating Test Reports - -To generate an HTML report: +Or from `apps/native`: ```bash -yarn playwright:test --reporter=html +yarn playwright:install # install the chromium browser (first time) +yarn playwright test tests/wallet.spec.ts # run a single spec +yarn playwright test --debug # step through with the Playwright Inspector ``` -Then open the report: - -```bash -yarn playwright:test show-report -``` +An HTML report is written to `apps/native/playwright-report/`; open it with `yarn playwright show-report`. For more information, refer to the [Playwright documentation](https://playwright.dev/docs/intro). From a3f3eb50ba2d88b6ea7e965bf27ea5bf8c9c84c0 Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Thu, 6 Aug 2026 16:32:03 -0300 Subject: [PATCH 5/7] docs: document .env setup for running the example app Co-Authored-By: Claude Fable 5 --- .github/docs/development.md | 2 +- AGENTS.md | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/docs/development.md b/.github/docs/development.md index 6e801087..4e43bde3 100644 --- a/.github/docs/development.md +++ b/.github/docs/development.md @@ -8,7 +8,7 @@ Install dependencies from the repository's root directory (this will also set up yarn ``` -To create your ProjectID, head to [dashboard.reown.com](https://dashboard.reown.com/) +To create your ProjectID, head to [dashboard.reown.com](https://dashboard.reown.com/). Then copy `apps/native/.env.example` to `apps/native/.env` and set `EXPO_PUBLIC_PROJECT_ID` to your ProjectID — the example app reads it from there. ## Commands diff --git a/AGENTS.md b/AGENTS.md index 181d6728..dd75f76e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -75,6 +75,8 @@ yarn android # Run example on Android emulator yarn build # Build all packages ``` +Running the example app requires a Reown ProjectID: copy `apps/native/.env.example` to `apps/native/.env` and set `EXPO_PUBLIC_PROJECT_ID` (create one at https://dashboard.reown.com). Unit tests and builds need no environment setup. + **Before pushing any solution, always run:** ```bash From b215555d64c9ce87dce522cca54920f7cb3059fa Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Thu, 6 Aug 2026 17:03:37 -0300 Subject: [PATCH 6/7] docs: note cli package is versioned separately from changesets lockstep Co-Authored-By: Claude Fable 5 --- AGENTS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AGENTS.md b/AGENTS.md index dd75f76e..842d8cd7 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -99,7 +99,7 @@ Rules: - The SDK must work in both **Expo** and **React Native CLI** projects. - **Keep third-party dependencies minimal** — avoid new libraries; justify any that are absolutely necessary. - Conventional commits: `fix:`, `feat:`, `refactor:`, `docs:`, `test:`, `chore:`. -- Changesets: a changeset must list **all published packages** (they are versioned together), not only the one you changed. +- Changesets: a changeset must list **all published packages** (they are versioned together), not only the one you changed. Exception: `@reown/appkit-react-native-cli` is versioned separately — include it only when the CLI itself changes. ## Dependency Updates / Dependabot From 2b0547e086822d7dc3d842b723f4dac145b0c969 Mon Sep 17 00:00:00 2001 From: ignaciosantise <25931366+ignaciosantise@users.noreply.github.com> Date: Thu, 6 Aug 2026 17:03:37 -0300 Subject: [PATCH 7/7] chore: add packages/cli to yarn workspaces The cli was dropped from the workspace list in the v2 restructure, leaving it outside root install/build/lint and the changesets release flow. Restore it so tooling covers it; its version stays independent. Co-Authored-By: Claude Fable 5 --- package.json | 1 + yarn.lock | 24 +++++++++++++++++------- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index fb7af493..6533d999 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "packages/bitcoin", "packages/wagmi", "packages/coinbase", + "packages/cli", "apps/*" ], "scripts": { diff --git a/yarn.lock b/yarn.lock index 7b9deac9..5bd56208 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4474,6 +4474,16 @@ __metadata: languageName: node linkType: hard +"@reown/appkit-react-native-cli@workspace:packages/cli": + version: 0.0.0-use.local + resolution: "@reown/appkit-react-native-cli@workspace:packages/cli" + dependencies: + chalk: 5.4.1 + bin: + appkit-react-native: lib/commonjs/index.js + languageName: unknown + linkType: soft + "@reown/appkit-react-native@2.0.4, @reown/appkit-react-native@workspace:*, @reown/appkit-react-native@workspace:packages/appkit": version: 0.0.0-use.local resolution: "@reown/appkit-react-native@workspace:packages/appkit" @@ -8330,6 +8340,13 @@ __metadata: languageName: node linkType: hard +"chalk@npm:5.4.1, chalk@npm:^5.4.1": + version: 5.4.1 + resolution: "chalk@npm:5.4.1" + checksum: 0c656f30b782fed4d99198825c0860158901f449a6b12b818b0aabad27ec970389e7e8767d0e00762175b23620c812e70c4fd92c0210e55fc2d993638b74e86e + languageName: node + linkType: hard + "chalk@npm:^2.0.1, chalk@npm:^2.4.2": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -8368,13 +8385,6 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^5.4.1": - version: 5.4.1 - resolution: "chalk@npm:5.4.1" - checksum: 0c656f30b782fed4d99198825c0860158901f449a6b12b818b0aabad27ec970389e7e8767d0e00762175b23620c812e70c4fd92c0210e55fc2d993638b74e86e - languageName: node - linkType: hard - "char-regex@npm:^1.0.2": version: 1.0.2 resolution: "char-regex@npm:1.0.2"