{"owner":"reown-com","repo":"appkit","hasSkills":true,"hasMcp":false,"mcpConfig":null,"found":["AGENTS.md"],"skills":{"AGENTS.md":"# AGENTS.md\n\nReown AppKit — a multi-chain onchain SDK providing wallet connection, authentication, swaps, on-ramp, and transaction UX for 700+ wallets across EVM, Solana, Bitcoin, Polkadot, and TON. Available for React, Next.js, Vue, Nuxt, Svelte, vanilla JS, React Native, Flutter, and native mobile.\n\n## Quick Reference\n\n- **Package manager**: pnpm workspaces (`pnpm-workspace.yaml`)\n- **Build orchestration**: Turborepo (`turbo.json`)\n- **State management**: valtio (always import from `valtio/vanilla`)\n- **UI framework**: LitElement Web Components\n- **Testing**: Vitest (unit), Playwright (E2E in `apps/laboratory`)\n- **TypeScript**: Strict mode, ESM only, `experimentalDecorators` enabled\n\n## Commands\n\n```bash\npnpm install              # Install dependencies\npnpm build                # Build all packages (run before apps or tests)\npnpm test                 # Unit tests (Vitest)\npnpm typecheck            # Type checking (depends on build)\npnpm lint                 # ESLint\npnpm run prettier:format  # Format code (run before committing)\npnpm changeset            # Create a changeset for versioning\npnpm laboratory           # Run E2E testing app\npnpm demo:dev             # Run demo app\npnpm gallery              # Run Storybook component gallery\n```\n\n## Repository Layout\n\n```\npackages/\n  appkit/              → @reown/appkit             Main SDK facade\n  controllers/         → @reown/appkit-controllers  Valtio state management\n  ui/                  → @reown/appkit-ui           Atomic wui-* Web Components\n  scaffold-ui/         → @reown/appkit-scaffold-ui  High-level w3m-* UI flows\n  common/              → @reown/appkit-common       Shared types and utilities\n  appkit-utils/        → @reown/appkit-utils        Chain-specific helpers\n  wallet/              → @reown/appkit-wallet       Wallet models\n  pay/                 → @reown/appkit-pay          Payment flows\n  siwe/                → @reown/appkit-siwe         Sign-In With Ethereum\n  siwx/                → @reown/appkit-siwx         Cross-chain authentication\n  adapters/\n    wagmi/             → EVM via Wagmi/Viem\n    ethers/            → EVM via ethers v6\n    ethers5/           → EVM via ethers v5\n    solana/            → Solana\n    bitcoin/           → Bitcoin\n    polkadot/          → Polkadot\n    ton/               → TON\napps/\n  laboratory/          → E2E testing (Next.js + Playwright)\n  demo/                → Marketing demo\n  gallery/             → Storybook component gallery\nexamples/              → Integration examples (next-*, react-*, vue-*, svelte-*, html-*)\n```\n\n## Architecture Rules\n\n### Layer Order (dependencies flow downward only)\n\n```\napps & examples\n  ↓\nadapters (wagmi, solana, bitcoin, ethers, ...)\n  ↓\n@reown/appkit (SDK facade)\n  ↓\nscaffold-ui (w3m-*) · pay\n  ↓\nui (wui-*) · controllers · appkit-utils\n  ↓\ncommon · wallet · polyfills\n```\n\n### Import Boundaries\n\n- **ui** (`wui-*`): Cannot import from controllers, scaffold-ui, appkit, or adapters\n- **controllers**: Cannot import from ui, scaffold-ui, appkit, or adapters\n- **scaffold-ui** (`w3m-*`): Uses relative imports within the package, not `@reown/` paths\n- **adapters**: Import from `@reown/appkit` and foundations, never from controllers or ui directly\n- **Cross-package**: Always use package entrypoints or declared subpath exports, never deep internal paths\n\n### Chain Namespaces\n\n| Namespace  | Chain    | Adapter                |\n| ---------- | -------- | ---------------------- |\n| `eip155`   | EVM      | wagmi, ethers, ethers5 |\n| `solana`   | Solana   | solana                 |\n| `bip122`   | Bitcoin  | bitcoin                |\n| `polkadot` | Polkadot | polkadot               |\n| `ton`      | TON      | ton                    |\n\n## Where to Put Things\n\n| What you're building     | Where it goes                                                                                           |\n| ------------------------ | ------------------------------------------------------------------------------------------------------- |\n| New state/business logic | `packages/controllers/src/controllers/` — follow [controller pattern](.agents/context/controllers.md)   |\n| New atomic UI element    | `packages/ui/src/composites/wui-<name>/` — follow [UI guide](.agents/context/ui-components.md)          |\n| New modal view/screen    | `packages/scaffold-ui/src/views/w3m-<name>-view/` — register in RouterController + w3m-router           |\n| Reusable UI section      | `packages/scaffold-ui/src/partials/w3m-<name>/`                                                         |\n| New blockchain adapter   | `packages/adapters/<name>/` — extend AdapterBlueprint, see [adapter guide](.agents/context/adapters.md) |\n| Shared types or utils    | `packages/common/src/`                                                                                  |\n| Chain-specific helpers   | `packages/appkit-utils/src/`                                                                            |\n| Public SDK API           | `packages/appkit/exports/` — treat changes as potentially breaking                                      |\n| Unit tests               | Co-located `tests/` directory in the relevant package                                                   |\n| E2E tests                | `apps/laboratory/tests/` using Page Object Model                                                        |\n| Integration example      | `examples/<framework>-<adapter>/`                                                                       |\n\n## Code Patterns\n\n### Controllers (valtio state)\n\n```typescript\n// packages/controllers/src/controllers/MyController.ts\nimport { proxy, subscribe as sub } from 'valtio/vanilla'\nimport { subscribeKey as subKey } from 'valtio/vanilla/utils'\n\n// -- Types ----\nexport interface MyControllerState {\n  value: string\n}\n\n// -- State ----\nconst state = proxy<MyControllerState>({ value: '' })\n\n// -- Controller ----\nconst controller = {\n  state,\n  subscribe(callback: (s: MyControllerState) => void) {\n    return sub(state, () => callback(state))\n  },\n  subscribeKey<K extends keyof MyControllerState>(key: K, cb: (v: MyControllerState[K]) => void) {\n    return subKey(state, key, cb)\n  },\n  setValue(v: string) {\n    state.value = v\n  }\n}\nexport const MyController = withErrorBoundary(controller)\n```\n\nSection comments (`// -- Types ----`, `// -- State ----`, `// -- Controller ----`) are enforced by DangerJS.\n\n### UI Atoms (wui-\\*)\n\n```typescript\n// packages/ui/src/composites/wui-my-thing/index.ts\n@customElement('wui-my-thing')\nexport class WuiMyThing extends LitElement {\n  public static override styles = [resetStyles, styles] // resetStyles required\n  // -- State & Properties ----\n  @property() public variant = 'default' // @state() NOT allowed\n  // -- Render ----\n  public override render() {\n    return html`<slot></slot>`\n  }\n}\n```\n\n### Scaffold Views (w3m-\\*)\n\n```typescript\n// packages/scaffold-ui/src/views/w3m-my-view/index.ts\n@customElement('w3m-my-view')\nexport class W3mMyView extends LitElement {\n  private unsubscribe: (() => void)[] = [] // Cleanup required\n  @state() private value = SomeController.state.value\n\n  constructor() {\n    super()\n    this.unsubscribe.push(\n      SomeController.subscribeKey('value', v => {\n        this.value = v\n      })\n    )\n  }\n\n  public override disconnectedCallback() {\n    this.unsubscribe.forEach(u => u())\n  }\n}\n```\n\n### Adapters\n\nExtend `AdapterBlueprint` from `packages/controllers/src/controllers/AdapterController/ChainAdapterBlueprint.ts`. Implement: `connect()`, `disconnect()`, `switchNetwork()`, `signMessage()`, `sendTransaction()`, `getBalance()`. Host SDKs go in `peerDependencies`.\n\n## PR Requirements\n\n1. Run `pnpm build && pnpm run prettier:format` before submitting\n2. Use conventional commit format for PR titles (`feat:`, `fix:`, `chore:`, `refactor:`, `test:`, `docs:`)\n3. Bug fixes and new features require tests\n4. Create a changeset: `pnpm changeset`\n5. DangerJS validates import boundaries, naming conventions, section comments, and dependency rules\n\n## Versioning\n\nAll `@reown/appkit-*` packages are versioned together as a fixed group via Changesets. Release channels: `latest`, `alpha`, `beta`, `canary`. `@examples/*` and `@apps/*` are excluded from publishing.\n\n## Detailed Context\n\nFor in-depth guidance on specific topics:\n\n- [Architecture & Initialization Flow](.agents/context/architecture.md) — layer diagram, import boundaries, init sequence, network request policy\n- [Controllers Reference](.agents/context/controllers.md) — valtio patterns, all controllers, state shapes\n- [UI Components Guide](.agents/context/ui-components.md) — wui-_ and w3m-_ patterns, DangerJS rules, adding views\n- [Blockchain Adapters Guide](.agents/context/adapters.md) — AdapterBlueprint, creating new adapters\n- [Testing Guide](.agents/context/testing.md) — Vitest, Playwright, test locations, writing new tests\n- [Package Reference](.agents/context/packages.md) — all packages, build outputs, adding packages\n- [Contributing & PR Guide](.agents/context/contributing.md) — PR checks, changesets, release process\n"},"files":{"AGENTS.md":"# AGENTS.md\n\nReown AppKit — a multi-chain onchain SDK providing wallet connection, authentication, swaps, on-ramp, and transaction UX for 700+ wallets across EVM, Solana, Bitcoin, Polkadot, and TON. Available for React, Next.js, Vue, Nuxt, Svelte, vanilla JS, React Native, Flutter, and native mobile.\n\n## Quick Reference\n\n- **Package manager**: pnpm workspaces (`pnpm-workspace.yaml`)\n- **Build orchestration**: Turborepo (`turbo.json`)\n- **State management**: valtio (always import from `valtio/vanilla`)\n- **UI framework**: LitElement Web Components\n- **Testing**: Vitest (unit), Playwright (E2E in `apps/laboratory`)\n- **TypeScript**: Strict mode, ESM only, `experimentalDecorators` enabled\n\n## Commands\n\n```bash\npnpm install              # Install dependencies\npnpm build                # Build all packages (run before apps or tests)\npnpm test                 # Unit tests (Vitest)\npnpm typecheck            # Type checking (depends on build)\npnpm lint                 # ESLint\npnpm run prettier:format  # Format code (run before committing)\npnpm changeset            # Create a changeset for versioning\npnpm laboratory           # Run E2E testing app\npnpm demo:dev             # Run demo app\npnpm gallery              # Run Storybook component gallery\n```\n\n## Repository Layout\n\n```\npackages/\n  appkit/              → @reown/appkit             Main SDK facade\n  controllers/         → @reown/appkit-controllers  Valtio state management\n  ui/                  → @reown/appkit-ui           Atomic wui-* Web Components\n  scaffold-ui/         → @reown/appkit-scaffold-ui  High-level w3m-* UI flows\n  common/              → @reown/appkit-common       Shared types and utilities\n  appkit-utils/        → @reown/appkit-utils        Chain-specific helpers\n  wallet/              → @reown/appkit-wallet       Wallet models\n  pay/                 → @reown/appkit-pay          Payment flows\n  siwe/                → @reown/appkit-siwe         Sign-In With Ethereum\n  siwx/                → @reown/appkit-siwx         Cross-chain authentication\n  adapters/\n    wagmi/             → EVM via Wagmi/Viem\n    ethers/            → EVM via ethers v6\n    ethers5/           → EVM via ethers v5\n    solana/            → Solana\n    bitcoin/           → Bitcoin\n    polkadot/          → Polkadot\n    ton/               → TON\napps/\n  laboratory/          → E2E testing (Next.js + Playwright)\n  demo/                → Marketing demo\n  gallery/             → Storybook component gallery\nexamples/              → Integration examples (next-*, react-*, vue-*, svelte-*, html-*)\n```\n\n## Architecture Rules\n\n### Layer Order (dependencies flow downward only)\n\n```\napps & examples\n  ↓\nadapters (wagmi, solana, bitcoin, ethers, ...)\n  ↓\n@reown/appkit (SDK facade)\n  ↓\nscaffold-ui (w3m-*) · pay\n  ↓\nui (wui-*) · controllers · appkit-utils\n  ↓\ncommon · wallet · polyfills\n```\n\n### Import Boundaries\n\n- **ui** (`wui-*`): Cannot import from controllers, scaffold-ui, appkit, or adapters\n- **controllers**: Cannot import from ui, scaffold-ui, appkit, or adapters\n- **scaffold-ui** (`w3m-*`): Uses relative imports within the package, not `@reown/` paths\n- **adapters**: Import from `@reown/appkit` and foundations, never from controllers or ui directly\n- **Cross-package**: Always use package entrypoints or declared subpath exports, never deep internal paths\n\n### Chain Namespaces\n\n| Namespace  | Chain    | Adapter                |\n| ---------- | -------- | ---------------------- |\n| `eip155`   | EVM      | wagmi, ethers, ethers5 |\n| `solana`   | Solana   | solana                 |\n| `bip122`   | Bitcoin  | bitcoin                |\n| `polkadot` | Polkadot | polkadot               |\n| `ton`      | TON      | ton                    |\n\n## Where to Put Things\n\n| What you're building     | Where it goes                                                                                           |\n| ------------------------ | ------------------------------------------------------------------------------------------------------- |\n| New state/business logic | `packages/controllers/src/controllers/` — follow [controller pattern](.agents/context/controllers.md)   |\n| New atomic UI element    | `packages/ui/src/composites/wui-<name>/` — follow [UI guide](.agents/context/ui-components.md)          |\n| New modal view/screen    | `packages/scaffold-ui/src/views/w3m-<name>-view/` — register in RouterController + w3m-router           |\n| Reusable UI section      | `packages/scaffold-ui/src/partials/w3m-<name>/`                                                         |\n| New blockchain adapter   | `packages/adapters/<name>/` — extend AdapterBlueprint, see [adapter guide](.agents/context/adapters.md) |\n| Shared types or utils    | `packages/common/src/`                                                                                  |\n| Chain-specific helpers   | `packages/appkit-utils/src/`                                                                            |\n| Public SDK API           | `packages/appkit/exports/` — treat changes as potentially breaking                                      |\n| Unit tests               | Co-located `tests/` directory in the relevant package                                                   |\n| E2E tests                | `apps/laboratory/tests/` using Page Object Model                                                        |\n| Integration example      | `examples/<framework>-<adapter>/`                                                                       |\n\n## Code Patterns\n\n### Controllers (valtio state)\n\n```typescript\n// packages/controllers/src/controllers/MyController.ts\nimport { proxy, subscribe as sub } from 'valtio/vanilla'\nimport { subscribeKey as subKey } from 'valtio/vanilla/utils'\n\n// -- Types ----\nexport interface MyControllerState {\n  value: string\n}\n\n// -- State ----\nconst state = proxy<MyControllerState>({ value: '' })\n\n// -- Controller ----\nconst controller = {\n  state,\n  subscribe(callback: (s: MyControllerState) => void) {\n    return sub(state, () => callback(state))\n  },\n  subscribeKey<K extends keyof MyControllerState>(key: K, cb: (v: MyControllerState[K]) => void) {\n    return subKey(state, key, cb)\n  },\n  setValue(v: string) {\n    state.value = v\n  }\n}\nexport const MyController = withErrorBoundary(controller)\n```\n\nSection comments (`// -- Types ----`, `// -- State ----`, `// -- Controller ----`) are enforced by DangerJS.\n\n### UI Atoms (wui-\\*)\n\n```typescript\n// packages/ui/src/composites/wui-my-thing/index.ts\n@customElement('wui-my-thing')\nexport class WuiMyThing extends LitElement {\n  public static override styles = [resetStyles, styles] // resetStyles required\n  // -- State & Properties ----\n  @property() public variant = 'default' // @state() NOT allowed\n  // -- Render ----\n  public override render() {\n    return html`<slot></slot>`\n  }\n}\n```\n\n### Scaffold Views (w3m-\\*)\n\n```typescript\n// packages/scaffold-ui/src/views/w3m-my-view/index.ts\n@customElement('w3m-my-view')\nexport class W3mMyView extends LitElement {\n  private unsubscribe: (() => void)[] = [] // Cleanup required\n  @state() private value = SomeController.state.value\n\n  constructor() {\n    super()\n    this.unsubscribe.push(\n      SomeController.subscribeKey('value', v => {\n        this.value = v\n      })\n    )\n  }\n\n  public override disconnectedCallback() {\n    this.unsubscribe.forEach(u => u())\n  }\n}\n```\n\n### Adapters\n\nExtend `AdapterBlueprint` from `packages/controllers/src/controllers/AdapterController/ChainAdapterBlueprint.ts`. Implement: `connect()`, `disconnect()`, `switchNetwork()`, `signMessage()`, `sendTransaction()`, `getBalance()`. Host SDKs go in `peerDependencies`.\n\n## PR Requirements\n\n1. Run `pnpm build && pnpm run prettier:format` before submitting\n2. Use conventional commit format for PR titles (`feat:`, `fix:`, `chore:`, `refactor:`, `test:`, `docs:`)\n3. Bug fixes and new features require tests\n4. Create a changeset: `pnpm changeset`\n5. DangerJS validates import boundaries, naming conventions, section comments, and dependency rules\n\n## Versioning\n\nAll `@reown/appkit-*` packages are versioned together as a fixed group via Changesets. Release channels: `latest`, `alpha`, `beta`, `canary`. `@examples/*` and `@apps/*` are excluded from publishing.\n\n## Detailed Context\n\nFor in-depth guidance on specific topics:\n\n- [Architecture & Initialization Flow](.agents/context/architecture.md) — layer diagram, import boundaries, init sequence, network request policy\n- [Controllers Reference](.agents/context/controllers.md) — valtio patterns, all controllers, state shapes\n- [UI Components Guide](.agents/context/ui-components.md) — wui-_ and w3m-_ patterns, DangerJS rules, adding views\n- [Blockchain Adapters Guide](.agents/context/adapters.md) — AdapterBlueprint, creating new adapters\n- [Testing Guide](.agents/context/testing.md) — Vitest, Playwright, test locations, writing new tests\n- [Package Reference](.agents/context/packages.md) — all packages, build outputs, adding packages\n- [Contributing & PR Guide](.agents/context/contributing.md) — PR checks, changesets, release process\n"},"items":[{"name":"AGENTS.md","path":"AGENTS.md","title":"AGENTS.md","content":"# AGENTS.md\n\nReown AppKit — a multi-chain onchain SDK providing wallet connection, authentication, swaps, on-ramp, and transaction UX for 700+ wallets across EVM, Solana, Bitcoin, Polkadot, and TON. Available for React, Next.js, Vue, Nuxt, Svelte, vanilla JS, React Native, Flutter, and native mobile.\n\n## Quick Reference\n\n- **Package manager**: pnpm workspaces (`pnpm-workspace.yaml`)\n- **Build orchestration**: Turborepo (`turbo.json`)\n- **State management**: valtio (always import from `valtio/vanilla`)\n- **UI framework**: LitElement Web Components\n- **Testing**: Vitest (unit), Playwright (E2E in `apps/laboratory`)\n- **TypeScript**: Strict mode, ESM only, `experimentalDecorators` enabled\n\n## Commands\n\n```bash\npnpm install              # Install dependencies\npnpm build                # Build all packages (run before apps or tests)\npnpm test                 # Unit tests (Vitest)\npnpm typecheck            # Type checking (depends on build)\npnpm lint                 # ESLint\npnpm run prettier:format  # Format code (run before committing)\npnpm changeset            # Create a changeset for versioning\npnpm laboratory           # Run E2E testing app\npnpm demo:dev             # Run demo app\npnpm gallery              # Run Storybook component gallery\n```\n\n## Repository Layout\n\n```\npackages/\n  appkit/              → @reown/appkit             Main SDK facade\n  controllers/         → @reown/appkit-controllers  Valtio state management\n  ui/                  → @reown/appkit-ui           Atomic wui-* Web Components\n  scaffold-ui/         → @reown/appkit-scaffold-ui  High-level w3m-* UI flows\n  common/              → @reown/appkit-common       Shared types and utilities\n  appkit-utils/        → @reown/appkit-utils        Chain-specific helpers\n  wallet/              → @reown/appkit-wallet       Wallet models\n  pay/                 → @reown/appkit-pay          Payment flows\n  siwe/                → @reown/appkit-siwe         Sign-In With Ethereum\n  siwx/                → @reown/appkit-siwx         Cross-chain authentication\n  adapters/\n    wagmi/             → EVM via Wagmi/Viem\n    ethers/            → EVM via ethers v6\n    ethers5/           → EVM via ethers v5\n    solana/            → Solana\n    bitcoin/           → Bitcoin\n    polkadot/          → Polkadot\n    ton/               → TON\napps/\n  laboratory/          → E2E testing (Next.js + Playwright)\n  demo/                → Marketing demo\n  gallery/             → Storybook component gallery\nexamples/              → Integration examples (next-*, react-*, vue-*, svelte-*, html-*)\n```\n\n## Architecture Rules\n\n### Layer Order (dependencies flow downward only)\n\n```\napps & examples\n  ↓\nadapters (wagmi, solana, bitcoin, ethers, ...)\n  ↓\n@reown/appkit (SDK facade)\n  ↓\nscaffold-ui (w3m-*) · pay\n  ↓\nui (wui-*) · controllers · appkit-utils\n  ↓\ncommon · wallet · polyfills\n```\n\n### Import Boundaries\n\n- **ui** (`wui-*`): Cannot import from controllers, scaffold-ui, appkit, or adapters\n- **controllers**: Cannot import from ui, scaffold-ui, appkit, or adapters\n- **scaffold-ui** (`w3m-*`): Uses relative imports within the package, not `@reown/` paths\n- **adapters**: Import from `@reown/appkit` and foundations, never from controllers or ui directly\n- **Cross-package**: Always use package entrypoints or declared subpath exports, never deep internal paths\n\n### Chain Namespaces\n\n| Namespace  | Chain    | Adapter                |\n| ---------- | -------- | ---------------------- |\n| `eip155`   | EVM      | wagmi, ethers, ethers5 |\n| `solana`   | Solana   | solana                 |\n| `bip122`   | Bitcoin  | bitcoin                |\n| `polkadot` | Polkadot | polkadot               |\n| `ton`      | TON      | ton                    |\n\n## Where to Put Things\n\n| What you're building     | Where it goes                                                                                           |\n| ------------------------ | ------------------------------------------------------------------------------------------------------- |\n| New state/business logic | `packages/controllers/src/controllers/` — follow [controller pattern](.agents/context/controllers.md)   |\n| New atomic UI element    | `packages/ui/src/composites/wui-<name>/` — follow [UI guide](.agents/context/ui-components.md)          |\n| New modal view/screen    | `packages/scaffold-ui/src/views/w3m-<name>-view/` — register in RouterController + w3m-router           |\n| Reusable UI section      | `packages/scaffold-ui/src/partials/w3m-<name>/`                                                         |\n| New blockchain adapter   | `packages/adapters/<name>/` — extend AdapterBlueprint, see [adapter guide](.agents/context/adapters.md) |\n| Shared types or utils    | `packages/common/src/`                                                                                  |\n| Chain-specific helpers   | `packages/appkit-utils/src/`                                                                            |\n| Public SDK API           | `packages/appkit/exports/` — treat changes as potentially breaking                                      |\n| Unit tests               | Co-located `tests/` directory in the relevant package                                                   |\n| E2E tests                | `apps/laboratory/tests/` using Page Object Model                                                        |\n| Integration example      | `examples/<framework>-<adapter>/`                                                                       |\n\n## Code Patterns\n\n### Controllers (valtio state)\n\n```typescript\n// packages/controllers/src/controllers/MyController.ts\nimport { proxy, subscribe as sub } from 'valtio/vanilla'\nimport { subscribeKey as subKey } from 'valtio/vanilla/utils'\n\n// -- Types ----\nexport interface MyControllerState {\n  value: string\n}\n\n// -- State ----\nconst state = proxy<MyControllerState>({ value: '' })\n\n// -- Controller ----\nconst controller = {\n  state,\n  subscribe(callback: (s: MyControllerState) => void) {\n    return sub(state, () => callback(state))\n  },\n  subscribeKey<K extends keyof MyControllerState>(key: K, cb: (v: MyControllerState[K]) => void) {\n    return subKey(state, key, cb)\n  },\n  setValue(v: string) {\n    state.value = v\n  }\n}\nexport const MyController = withErrorBoundary(controller)\n```\n\nSection comments (`// -- Types ----`, `// -- State ----`, `// -- Controller ----`) are enforced by DangerJS.\n\n### UI Atoms (wui-\\*)\n\n```typescript\n// packages/ui/src/composites/wui-my-thing/index.ts\n@customElement('wui-my-thing')\nexport class WuiMyThing extends LitElement {\n  public static override styles = [resetStyles, styles] // resetStyles required\n  // -- State & Properties ----\n  @property() public variant = 'default' // @state() NOT allowed\n  // -- Render ----\n  public override render() {\n    return html`<slot></slot>`\n  }\n}\n```\n\n### Scaffold Views (w3m-\\*)\n\n```typescript\n// packages/scaffold-ui/src/views/w3m-my-view/index.ts\n@customElement('w3m-my-view')\nexport class W3mMyView extends LitElement {\n  private unsubscribe: (() => void)[] = [] // Cleanup required\n  @state() private value = SomeController.state.value\n\n  constructor() {\n    super()\n    this.unsubscribe.push(\n      SomeController.subscribeKey('value', v => {\n        this.value = v\n      })\n    )\n  }\n\n  public override disconnectedCallback() {\n    this.unsubscribe.forEach(u => u())\n  }\n}\n```\n\n### Adapters\n\nExtend `AdapterBlueprint` from `packages/controllers/src/controllers/AdapterController/ChainAdapterBlueprint.ts`. Implement: `connect()`, `disconnect()`, `switchNetwork()`, `signMessage()`, `sendTransaction()`, `getBalance()`. Host SDKs go in `peerDependencies`.\n\n## PR Requirements\n\n1. Run `pnpm build && pnpm run prettier:format` before submitting\n2. Use conventional commit format for PR titles (`feat:`, `fix:`, `chore:`, `refactor:`, `test:`, `docs:`)\n3. Bug fixes and new features require tests\n4. Create a changeset: `pnpm changeset`\n5. DangerJS validates import boundaries, naming conventions, section comments, and dependency rules\n\n## Versioning\n\nAll `@reown/appkit-*` packages are versioned together as a fixed group via Changesets. Release channels: `latest`, `alpha`, `beta`, `canary`. `@examples/*` and `@apps/*` are excluded from publishing.\n\n## Detailed Context\n\nFor in-depth guidance on specific topics:\n\n- [Architecture & Initialization Flow](.agents/context/architecture.md) — layer diagram, import boundaries, init sequence, network request policy\n- [Controllers Reference](.agents/context/controllers.md) — valtio patterns, all controllers, state shapes\n- [UI Components Guide](.agents/context/ui-components.md) — wui-_ and w3m-_ patterns, DangerJS rules, adding views\n- [Blockchain Adapters Guide](.agents/context/adapters.md) — AdapterBlueprint, creating new adapters\n- [Testing Guide](.agents/context/testing.md) — Vitest, Playwright, test locations, writing new tests\n- [Package Reference](.agents/context/packages.md) — all packages, build outputs, adding packages\n- [Contributing & PR Guide](.agents/context/contributing.md) — PR checks, changesets, release process\n","category":"root","tokens":2267}]}