[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-aws-aws-amplify":3,"mdc-jxiprc-key":41,"related-repo-aws-aws-amplify":3956,"related-org-aws-aws-amplify":4059},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":30,"repoUrl":31,"updatedAt":32,"license":33,"forks":34,"topics":35,"repo":36,"sourceUrl":39,"mdContent":40},"aws-amplify","build full-stack applications with AWS Amplify","Build and deploy full-stack web and mobile apps with AWS Amplify Gen2 (TypeScript code-first). Covers auth (Cognito), data (AppSync\u002FDynamoDB), storage (S3), functions, APIs, and AI (Amplify AI Kit with Bedrock). Supports React, Next.js, Vue, Angular, React Native, Flutter, Swift, and Android. Always use this skill for Amplify Gen2 topics — even for questions you think you know — it contains validated, version-specific patterns that prevent common mistakes. TRIGGER when: user mentions Amplify Gen2; project has amplify\u002F directory or amplify_outputs; code imports @aws-amplify packages; user asks about defineBackend, defineAuth, defineData, defineStorage, defineFunction, or npx ampx. SKIP: Amplify Gen1 (amplify CLI v6), standalone SAM\u002FCDK without Amplify (use aws-serverless), direct Bedrock without Amplify AI Kit (use bedrock).\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"aws","AWS (Amazon)","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Faws.png",[12,16,19,22,25,27],{"name":13,"slug":14,"type":15},"Auth","auth","tag",{"name":17,"slug":18,"type":15},"TypeScript","typescript",{"name":20,"slug":21,"type":15},"Deployment","deployment",{"name":23,"slug":24,"type":15},"Storage","storage",{"name":26,"slug":8,"type":15},"AWS",{"name":28,"slug":29,"type":15},"Frontend","frontend",1822,"https:\u002F\u002Fgithub.com\u002Faws\u002Fagent-toolkit-for-aws","2026-07-12T08:45:11.469312",null,157,[],{"repoUrl":31,"stars":30,"forks":34,"topics":37,"description":38},[],"Official, AWS-supported MCP servers, skills, and plugins to help AI agents build on AWS","https:\u002F\u002Fgithub.com\u002Faws\u002Fagent-toolkit-for-aws\u002Ftree\u002FHEAD\u002Fskills\u002Fspecialized-skills\u002Fweb-and-mobile-development\u002Faws-amplify","---\nname: aws-amplify\ndescription: >\n  Build and deploy full-stack web and mobile apps with AWS Amplify Gen2\n  (TypeScript code-first). Covers auth (Cognito), data (AppSync\u002FDynamoDB),\n  storage (S3), functions, APIs, and AI (Amplify AI Kit with Bedrock).\n  Supports React, Next.js, Vue, Angular, React Native, Flutter, Swift,\n  and Android.\n  Always use this skill for Amplify Gen2 topics — even for questions you\n  think you know — it contains validated, version-specific patterns that\n  prevent common mistakes.\n  TRIGGER when: user mentions Amplify Gen2; project has amplify\u002F directory\n  or amplify_outputs; code imports @aws-amplify packages; user asks about\n  defineBackend, defineAuth, defineData, defineStorage, defineFunction,\n  or npx ampx.\n  SKIP: Amplify Gen1 (amplify CLI v6), standalone SAM\u002FCDK without Amplify\n  (use aws-serverless), direct Bedrock without Amplify AI Kit (use bedrock).\n---\n\n# AWS Amplify Gen2\n\nBuild and deploy full-stack applications using AWS Amplify Gen2's TypeScript\ncode-first approach. This skill covers backend resource creation, frontend\nintegration across 8 frameworks, and deployment workflows.\n\n## Prerequisites\n\n- Node.js ^18.19.0 || ^20.6.0 || >=22 and npm\n- AWS credentials configured (`aws sts get-caller-identity` succeeds)\n- For sandbox: `npx ampx --version` returns a valid version\n- For mobile: Platform-specific tooling (Xcode, Android Studio, Flutter SDK)\n\n## Defaults & Assumptions\n\nWhen the user does not specify a framework:\n\n- **Web:** Default to **React** (Vite) and explain the choice.\n- **Mobile:** Ask which platform (Flutter, Swift, Android, or React Native) —\n  there is no universal mobile default, so guessing leads to wasted effort.\n- **Neither specified:** If the user says \"build an app\" without clarifying web\n  vs. mobile, ask before proceeding — the framework choice affects every\n  subsequent step.\n- **Backend only:** If only backend changes are requested and no frontend\n  framework is mentioned, skip the frontend integration step entirely.\n\nWhen the user does not specify tooling or strategy:\n\n- **Package manager:** Default to **npm** unless the user specifies yarn or pnpm.\n- **Language:** Default to **TypeScript**. Gen2 backends are TypeScript-only;\n  frontends should follow the project's existing language.\n- **Next.js:** Default to **App Router** unless the user specifies Pages Router.\n- **React Native:** Ask whether the user uses **Expo** or **bare React Native CLI**.\n- **Auth:** You **MUST** ask which login method the user wants\n  (email\u002Fpassword, social login, SAML, passwordless, etc.). Do not assume a default.\n- **Data authorization:** default to **`publicApiKey`**\n  (`allow.publicApiKey()`) — this is the starter template default. When\n  auth is added, switch to **owner-based**\n  (`allow.owner()`) with `defaultAuthorizationMode: 'userPool'`.\n\n## Quick Start — Route to the Right Reference\n\n### Step 1: Identify the Task Type\n\n| Task                                     | Go To                                                                    |\n| ---------------------------------------- | ------------------------------------------------------------------------ |\n| **Create a new project**                 | → [scaffolding.md](references\u002Fscaffolding.md), then Step 2 and\u002For Step 3 |\n| **Add or modify a backend feature**      | → Step 2 (Backend Features)                                              |\n| **Connect frontend to existing backend** | → Step 3 (Frontend Integration)                                          |\n| **Deploy the application**               | → [deployment.md](references\u002Fdeployment.md)                              |\n\n### Step 2: Backend Features\n\nRead the corresponding reference for each backend feature you need:\n\n| Feature | Reference | When to Use |\n|---------|-----------|-------------|\n| Authentication | [auth-backend.md](references\u002Fauth-backend.md) | Email\u002Fpassword, social login, MFA, SAML\u002FOIDC |\n| Data Models | [data-backend.md](references\u002Fdata-backend.md) | GraphQL schema, DynamoDB, relationships, auth rules |\n| File Storage | [storage-backend.md](references\u002Fstorage-backend.md) | S3 uploads\u002Fdownloads, access rules |\n| Functions & API | [functions-and-api.md](references\u002Ffunctions-and-api.md) | Lambda, custom resolvers, REST\u002FHTTP APIs, calling from client |\n| AI Features | [ai.md](references\u002Fai.md) | Conversation, generation, AI tools via Bedrock *(backend config + React\u002FNext.js frontend)* |\n| Geo, PubSub, CDK | [geo-pubsub-cdk.md](references\u002Fgeo-pubsub-cdk.md) | Backend-only: custom CDK stacks, overrides, custom outputs. Backend + frontend: Geo, PubSub, Face Liveness |\n\nEach backend feature file is self-contained. Load only what you need.\n\n> **Routing note:** These files apply for both **adding** and **modifying**\n> features. Route to the same file whether the user says \"add auth\" or\n> \"change auth config\" — each reference covers the full define surface.\n\n### Step 3: Frontend Integration\n\nAfter configuring backend resources, connect the frontend. Choose by\nplatform and feature:\n\n**Web** (React, Next.js, Vue, Angular, React Native):\n\n| Feature                   | Reference                                   |\n| ------------------------- | ------------------------------------------- |\n| Auth UI & flows           | [auth-web.md](references\u002Fauth-web.md)       |\n| Data CRUD & subscriptions | [data-web.md](references\u002Fdata-web.md)       |\n| Storage upload\u002Fdownload   | [storage-web.md](references\u002Fstorage-web.md) |\n\n**Mobile** (Flutter, Swift, Android):\n\n| Feature                   | Reference                                         |\n| ------------------------- | ------------------------------------------------- |\n| Auth UI & flows           | [auth-mobile.md](references\u002Fauth-mobile.md)       |\n| Data CRUD & subscriptions | [data-mobile.md](references\u002Fdata-mobile.md)       |\n| Storage upload\u002Fdownload   | [storage-mobile.md](references\u002Fstorage-mobile.md) |\n\n> **Note:** AI and Functions frontend patterns are included in\n> [ai.md](references\u002Fai.md) and\n> [functions-and-api.md](references\u002Ffunctions-and-api.md) respectively —\n> they are **not** split into separate web\u002Fmobile files.\n\n## Core Concepts\n\n### Amplify Gen2 Architecture\n\n- **Code-first:** All backend resources defined in TypeScript under `amplify\u002F`\n- **Main config:** `amplify\u002Fbackend.ts` imports and combines all resources via\n  `defineBackend()`\n- **Resource files:** `amplify\u002Fauth\u002Fresource.ts`, `amplify\u002Fdata\u002Fresource.ts`,\n  `amplify\u002Fstorage\u002Fresource.ts`, `amplify\u002Ffunctions\u002F\u003Cname>\u002Fresource.ts`\n- **Generated output:** `amplify_outputs.json` — consumed by frontend\n  `Amplify.configure()`. **Gitignored** — generated by `npx ampx sandbox`\n  (local dev) or `npx ampx pipeline-deploy` (CI\u002FCD), never committed.\n\n### Directory Structure\n\n`amplify\u002F` and `src\u002F` must be siblings under the project root — placing\nthem at different directory levels breaks sandbox detection. (Exception: in monorepos, `amplify\u002F` may be in a `packages\u002F` subdirectory — the key is that `amplify_outputs.json` must be accessible from the frontend entry point.)\n\n```text\nproject-root\u002F\n├── amplify\u002F\n│   ├── backend.ts            # defineBackend({ auth, data, ... })\n│   ├── auth\u002Fresource.ts      # defineAuth({ ... })\n│   ├── data\u002Fresource.ts      # defineData({ schema })\n│   ├── storage\u002Fresource.ts   # defineStorage({ ... })\n│   └── functions\u002F\n│       └── my-func\u002F\n│           ├── resource.ts   # defineFunction({ ... })\n│           └── handler.ts    # export const handler = ...\n├── src\u002F                      # Frontend code\n├── amplify_outputs.json      # Generated, gitignored — never edit or commit\n└── package.json\n```\n\n### Key APIs\n\n| Package | Purpose |\n|---------|---------|\n| `@aws-amplify\u002Fbackend` | `defineAuth`, `defineData`, `defineStorage`, `defineFunction`, `defineBackend` |\n| `aws-amplify` | Frontend: `Amplify.configure()`, `generateClient()`, auth\u002Fdata\u002Fstorage APIs |\n| `@aws-amplify\u002Fui-react` | Pre-built UI: `\u003CAuthenticator>`, `\u003CStorageBrowser>` |\n| `@aws-amplify\u002Fui-react-ai` | AI UI: `\u003CAIConversation>`, `useAIConversation` |\n\n## Framework Setup\n\nThese patterns apply to **every** web task — not just new projects. Verify\neach one before implementing any feature.\n\n### Gen2 Detection\n\nBefore modifying any code, check if the project is already Gen2:\n\n1. `amplify\u002F` directory exists with `backend.ts`\n2. `@aws-amplify\u002Fbackend` in `package.json` devDependencies\n\nIf both are true, the project is already Gen2 — skip to feature\nimplementation. If `amplify\u002F.config\u002F` exists instead, this is a Gen1\nproject — do not proceed (requires separate migration skill).\n\n### Frontend Configuration\n\nImport the generated outputs and configure Amplify in the **correct entry\npoint** for your framework. Placing this in the wrong file causes silent\nfailures — Amplify API calls return undefined or empty responses with no error.\n\n**WARNING:** `amplify_outputs.json` must exist before the app can\ncompile — without it, the build fails with a module-not-found error.\nRun `npx ampx sandbox` (or `npx ampx sandbox --once`) first to\ngenerate it. See [scaffolding.md](references\u002Fscaffolding.md) for the correct sequence.\n\n**React (Vite)** — `src\u002Fmain.tsx`:\n\n```typescript\nimport { Amplify } from 'aws-amplify';\nimport outputs from '..\u002Famplify_outputs.json';\nAmplify.configure(outputs);\n```\n\n**Next.js (App Router)** — `app\u002Flayout.tsx`:\n\n> **Important:** `layout.tsx` is a server component in App Router. Use the `ConfigureAmplifyClientSide` client component pattern below instead.\n\n`{ ssr: true }` is a **Next.js-only** option (not needed by Vue, Angular, or React SPA). Both App Router and Pages Router use it, but apply it differently:\n\n> - **App Router** — set globally in `ConfigureAmplifyClientSide` client component\n> - **Pages Router** — set per-file where server-side access is needed\n\n#### Next.js App Router: Client-Side Configuration\n\nNext.js App Router requires a dedicated client component to configure Amplify for browser-side operations:\n\n```typescript\n\u002F\u002F components\u002FConfigureAmplifyClientSide.tsx\n\"use client\";\nimport { Amplify } from \"aws-amplify\";\nimport outputs from \"@\u002Famplify_outputs.json\";\n\nAmplify.configure(outputs, { ssr: true });\n\nexport default function ConfigureAmplifyClientSide() {\n  return null;\n}\n```\n\nImport in your root layout:\n\n```typescript\n\u002F\u002F app\u002Flayout.tsx\nimport ConfigureAmplifyClientSide from \"@\u002Fcomponents\u002FConfigureAmplifyClientSide\";\n\nexport default function RootLayout({ children }: { children: React.ReactNode }) {\n  return (\n    \u003Chtml>\n      \u003Cbody>\n        \u003CConfigureAmplifyClientSide \u002F>\n        {children}\n      \u003C\u002Fbody>\n    \u003C\u002Fhtml>\n  );\n}\n```\n\n> **Why?** In App Router, `layout.tsx` is a server component. Client components need `Amplify.configure()` to run in the browser. Without this, you get \"Auth UserPool not configured\" errors.\n\n**Vue** — `src\u002Fmain.js`:\n\n```javascript\nimport { Amplify } from 'aws-amplify';\nimport outputs from '..\u002Famplify_outputs.json';\nAmplify.configure(outputs);\n```\n\n**Angular** — `src\u002Fmain.ts`:\n\n```typescript\nimport { Amplify } from 'aws-amplify';\nimport outputs from '..\u002Famplify_outputs.json';\nAmplify.configure(outputs);\n```\n\n#### Next.js Pages Router\n\nPages Router does NOT need `{ ssr: true }` in `_app.tsx`. Instead, configure per-file where you need server-side access:\n\n```typescript\n\u002F\u002F pages\u002Fapi\u002Fprotected.ts or getServerSideProps\nimport { Amplify } from 'aws-amplify';\nimport outputs from '@\u002Famplify_outputs.json';\nAmplify.configure(outputs, { ssr: true });\n```\n\n> **Key difference:** App Router uses a global client component. Pages Router configures per-file.\n\n`\u003CAuthenticator.Provider>` is required in `layout.tsx` for auth context.\n\n### React Native\n\nReact Native uses the same `aws-amplify` JS package as web frameworks (it is\npart of amplify-js, not the native mobile SDKs). All web APIs apply to RN\nwith the additions below.\n\n#### Required Packages\n\n```bash\nnpm install aws-amplify @aws-amplify\u002Freact-native \\\n  @react-native-async-storage\u002Fasync-storage \\\n  react-native-get-random-values\n```\n\n`@react-native-async-storage\u002Fasync-storage` is **required** — the Amplify\nSDK uses it for token persistence and will fail at runtime without it.\n\n#### Configure Entry Points\n\nNo plugin registration needed — configure only.\n\n**React Native (Expo)** — `App.tsx`:\n\n```typescript\nimport 'react-native-get-random-values';  \u002F\u002F MUST be first\nimport { Amplify } from 'aws-amplify';\nimport outputs from '.\u002Famplify_outputs.json';\nAmplify.configure(outputs);\n```\n\n**React Native (Bare CLI)** — `index.js` (before `AppRegistry.registerComponent`):\n\n```typescript\nimport 'react-native-get-random-values';  \u002F\u002F MUST be first\nimport { Amplify } from 'aws-amplify';\nimport outputs from '.\u002Famplify_outputs.json';\nAmplify.configure(outputs);\n```\n\n#### React Native Pitfalls\n\n- **Import order:** `react-native-get-random-values` must be the FIRST\n  import in the entry file, before `aws-amplify`. Reversing the order causes\n  cryptographic failures at runtime.\n- **Missing AsyncStorage:** Without\n  `@react-native-async-storage\u002Fasync-storage`, auth tokens are not persisted\n  and users must re-authenticate on every app restart.\n\n### SvelteKit\n\nConfigure Amplify in the client hooks file:\n\n```typescript\n\u002F\u002F src\u002Fhooks.client.ts\nimport { Amplify } from 'aws-amplify';\nimport outputs from '..\u002Famplify_outputs.json';\n\nAmplify.configure(outputs);\n```\n\n> **Note:** No `@aws-amplify\u002Fui-*` components exist for Svelte. Use core APIs directly.\n\n### Unsupported Frameworks (Astro, Solid, etc.)\n\nFor frameworks without official Amplify support:\n\n1. Use `npm create amplify@latest -y` to scaffold the backend (works in any project)\n2. Configure Amplify inside a **client-side component** (not at build time)\n\n#### Astro\n\nAmplify is **client-side only** in Astro. Create a React component (no Astro syntax):\n\n```typescript\n\u002F\u002F src\u002Fcomponents\u002FAuthenticatedApp.tsx\nimport { Amplify } from 'aws-amplify';\nimport { Authenticator } from '@aws-amplify\u002Fui-react';\nimport outputs from '..\u002Famplify_outputs.json';\n\nAmplify.configure(outputs);\n\nexport default function AuthenticatedApp() {\n  return (\n    \u003CAuthenticator>\n      {({ signOut, user }) => \u003Cmain>Hello {user?.username}\u003C\u002Fmain>}\n    \u003C\u002FAuthenticator>\n  );\n}\n```\n\nUse in an Astro page with `client:only`:\n\n```astro\n---\n\u002F\u002F src\u002Fpages\u002Findex.astro — no Amplify imports here\n---\n\u003Chtml>\n  \u003Cbody>\n    \u003CAuthenticatedApp client:only=\"react\" \u002F>\n  \u003C\u002Fbody>\n\u003C\u002Fhtml>\n```\n\n> **Must use `client:only=\"react\"`** (NOT `client:load`) to avoid SSR hydration errors.\n\n## Links\n\n> All documentation links use `react` as the default platform slug. Replace `\u002Freact\u002F` in any URL with your target framework:\n\n| Framework | Slug |\n|-----------|------|\n| React | `react` |\n| Next.js | `nextjs` |\n| Vue | `vue` |\n| Angular | `angular` |\n| React Native | `react-native` |\n| Flutter | `flutter` |\n| Swift | `swift` |\n| Android | `android` |\n\n- [Amplify Docs for LLMs](https:\u002F\u002Fdocs.amplify.aws\u002Fai\u002Fllms.txt)\n- [Amplify Docs](https:\u002F\u002Fdocs.amplify.aws\u002F)\n- [How Amplify Works](https:\u002F\u002Fdocs.amplify.aws\u002Freact\u002Fhow-amplify-works\u002F)\n- [CLI Commands](https:\u002F\u002Fdocs.amplify.aws\u002Freact\u002Freference\u002Fcli-commands\u002F)\n- [React Quickstart](https:\u002F\u002Fdocs.amplify.aws\u002Freact\u002Fstart\u002Fquickstart\u002F)\n- [Next.js Quickstart](https:\u002F\u002Fdocs.amplify.aws\u002Fnextjs\u002Fstart\u002Fquickstart\u002F)\n- [Angular Quickstart](https:\u002F\u002Fdocs.amplify.aws\u002Fangular\u002Fstart\u002Fquickstart\u002F)\n- [Vue Quickstart](https:\u002F\u002Fdocs.amplify.aws\u002Fvue\u002Fstart\u002Fquickstart\u002F)\n- [React Native Quickstart](https:\u002F\u002Fdocs.amplify.aws\u002Freact-native\u002Fstart\u002Fquickstart\u002F)\n",{"data":42,"body":43},{"name":4,"description":6},{"type":44,"children":45},"root",[46,55,61,68,110,116,121,172,177,318,324,331,437,443,448,613,618,646,652,657,667,738,748,816,848,854,860,989,995,1034,1046,1052,1213,1219,1231,1237,1242,1280,1293,1299,1311,1348,1366,1491,1507,1535,1553,1585,1592,1597,1842,1847,2109,2136,2152,2253,2269,2368,2374,2393,2529,2542,2560,2566,2578,2584,2640,2658,2664,2669,2685,2816,2841,2967,2973,3016,3022,3027,3142,3162,3168,3173,3201,3207,3219,3564,3576,3647,3674,3680,3704,3856,3950],{"type":47,"tag":48,"props":49,"children":51},"element","h1",{"id":50},"aws-amplify-gen2",[52],{"type":53,"value":54},"text","AWS Amplify Gen2",{"type":47,"tag":56,"props":57,"children":58},"p",{},[59],{"type":53,"value":60},"Build and deploy full-stack applications using AWS Amplify Gen2's TypeScript\ncode-first approach. This skill covers backend resource creation, frontend\nintegration across 8 frameworks, and deployment workflows.",{"type":47,"tag":62,"props":63,"children":65},"h2",{"id":64},"prerequisites",[66],{"type":53,"value":67},"Prerequisites",{"type":47,"tag":69,"props":70,"children":71},"ul",{},[72,78,92,105],{"type":47,"tag":73,"props":74,"children":75},"li",{},[76],{"type":53,"value":77},"Node.js ^18.19.0 || ^20.6.0 || >=22 and npm",{"type":47,"tag":73,"props":79,"children":80},{},[81,83,90],{"type":53,"value":82},"AWS credentials configured (",{"type":47,"tag":84,"props":85,"children":87},"code",{"className":86},[],[88],{"type":53,"value":89},"aws sts get-caller-identity",{"type":53,"value":91}," succeeds)",{"type":47,"tag":73,"props":93,"children":94},{},[95,97,103],{"type":53,"value":96},"For sandbox: ",{"type":47,"tag":84,"props":98,"children":100},{"className":99},[],[101],{"type":53,"value":102},"npx ampx --version",{"type":53,"value":104}," returns a valid version",{"type":47,"tag":73,"props":106,"children":107},{},[108],{"type":53,"value":109},"For mobile: Platform-specific tooling (Xcode, Android Studio, Flutter SDK)",{"type":47,"tag":62,"props":111,"children":113},{"id":112},"defaults-assumptions",[114],{"type":53,"value":115},"Defaults & Assumptions",{"type":47,"tag":56,"props":117,"children":118},{},[119],{"type":53,"value":120},"When the user does not specify a framework:",{"type":47,"tag":69,"props":122,"children":123},{},[124,142,152,162],{"type":47,"tag":73,"props":125,"children":126},{},[127,133,135,140],{"type":47,"tag":128,"props":129,"children":130},"strong",{},[131],{"type":53,"value":132},"Web:",{"type":53,"value":134}," Default to ",{"type":47,"tag":128,"props":136,"children":137},{},[138],{"type":53,"value":139},"React",{"type":53,"value":141}," (Vite) and explain the choice.",{"type":47,"tag":73,"props":143,"children":144},{},[145,150],{"type":47,"tag":128,"props":146,"children":147},{},[148],{"type":53,"value":149},"Mobile:",{"type":53,"value":151}," Ask which platform (Flutter, Swift, Android, or React Native) —\nthere is no universal mobile default, so guessing leads to wasted effort.",{"type":47,"tag":73,"props":153,"children":154},{},[155,160],{"type":47,"tag":128,"props":156,"children":157},{},[158],{"type":53,"value":159},"Neither specified:",{"type":53,"value":161}," If the user says \"build an app\" without clarifying web\nvs. mobile, ask before proceeding — the framework choice affects every\nsubsequent step.",{"type":47,"tag":73,"props":163,"children":164},{},[165,170],{"type":47,"tag":128,"props":166,"children":167},{},[168],{"type":53,"value":169},"Backend only:",{"type":53,"value":171}," If only backend changes are requested and no frontend\nframework is mentioned, skip the frontend integration step entirely.",{"type":47,"tag":56,"props":173,"children":174},{},[175],{"type":53,"value":176},"When the user does not specify tooling or strategy:",{"type":47,"tag":69,"props":178,"children":179},{},[180,196,211,227,251,268],{"type":47,"tag":73,"props":181,"children":182},{},[183,188,189,194],{"type":47,"tag":128,"props":184,"children":185},{},[186],{"type":53,"value":187},"Package manager:",{"type":53,"value":134},{"type":47,"tag":128,"props":190,"children":191},{},[192],{"type":53,"value":193},"npm",{"type":53,"value":195}," unless the user specifies yarn or pnpm.",{"type":47,"tag":73,"props":197,"children":198},{},[199,204,205,209],{"type":47,"tag":128,"props":200,"children":201},{},[202],{"type":53,"value":203},"Language:",{"type":53,"value":134},{"type":47,"tag":128,"props":206,"children":207},{},[208],{"type":53,"value":17},{"type":53,"value":210},". Gen2 backends are TypeScript-only;\nfrontends should follow the project's existing language.",{"type":47,"tag":73,"props":212,"children":213},{},[214,219,220,225],{"type":47,"tag":128,"props":215,"children":216},{},[217],{"type":53,"value":218},"Next.js:",{"type":53,"value":134},{"type":47,"tag":128,"props":221,"children":222},{},[223],{"type":53,"value":224},"App Router",{"type":53,"value":226}," unless the user specifies Pages Router.",{"type":47,"tag":73,"props":228,"children":229},{},[230,235,237,242,244,249],{"type":47,"tag":128,"props":231,"children":232},{},[233],{"type":53,"value":234},"React Native:",{"type":53,"value":236}," Ask whether the user uses ",{"type":47,"tag":128,"props":238,"children":239},{},[240],{"type":53,"value":241},"Expo",{"type":53,"value":243}," or ",{"type":47,"tag":128,"props":245,"children":246},{},[247],{"type":53,"value":248},"bare React Native CLI",{"type":53,"value":250},".",{"type":47,"tag":73,"props":252,"children":253},{},[254,259,261,266],{"type":47,"tag":128,"props":255,"children":256},{},[257],{"type":53,"value":258},"Auth:",{"type":53,"value":260}," You ",{"type":47,"tag":128,"props":262,"children":263},{},[264],{"type":53,"value":265},"MUST",{"type":53,"value":267}," ask which login method the user wants\n(email\u002Fpassword, social login, SAML, passwordless, etc.). Do not assume a default.",{"type":47,"tag":73,"props":269,"children":270},{},[271,276,278,287,289,295,297,302,303,309,311,317],{"type":47,"tag":128,"props":272,"children":273},{},[274],{"type":53,"value":275},"Data authorization:",{"type":53,"value":277}," default to ",{"type":47,"tag":128,"props":279,"children":280},{},[281],{"type":47,"tag":84,"props":282,"children":284},{"className":283},[],[285],{"type":53,"value":286},"publicApiKey",{"type":53,"value":288},"\n(",{"type":47,"tag":84,"props":290,"children":292},{"className":291},[],[293],{"type":53,"value":294},"allow.publicApiKey()",{"type":53,"value":296},") — this is the starter template default. When\nauth is added, switch to ",{"type":47,"tag":128,"props":298,"children":299},{},[300],{"type":53,"value":301},"owner-based",{"type":53,"value":288},{"type":47,"tag":84,"props":304,"children":306},{"className":305},[],[307],{"type":53,"value":308},"allow.owner()",{"type":53,"value":310},") with ",{"type":47,"tag":84,"props":312,"children":314},{"className":313},[],[315],{"type":53,"value":316},"defaultAuthorizationMode: 'userPool'",{"type":53,"value":250},{"type":47,"tag":62,"props":319,"children":321},{"id":320},"quick-start-route-to-the-right-reference",[322],{"type":53,"value":323},"Quick Start — Route to the Right Reference",{"type":47,"tag":325,"props":326,"children":328},"h3",{"id":327},"step-1-identify-the-task-type",[329],{"type":53,"value":330},"Step 1: Identify the Task Type",{"type":47,"tag":332,"props":333,"children":334},"table",{},[335,354],{"type":47,"tag":336,"props":337,"children":338},"thead",{},[339],{"type":47,"tag":340,"props":341,"children":342},"tr",{},[343,349],{"type":47,"tag":344,"props":345,"children":346},"th",{},[347],{"type":53,"value":348},"Task",{"type":47,"tag":344,"props":350,"children":351},{},[352],{"type":53,"value":353},"Go To",{"type":47,"tag":355,"props":356,"children":357},"tbody",{},[358,384,400,416],{"type":47,"tag":340,"props":359,"children":360},{},[361,370],{"type":47,"tag":362,"props":363,"children":364},"td",{},[365],{"type":47,"tag":128,"props":366,"children":367},{},[368],{"type":53,"value":369},"Create a new project",{"type":47,"tag":362,"props":371,"children":372},{},[373,375,382],{"type":53,"value":374},"→ ",{"type":47,"tag":376,"props":377,"children":379},"a",{"href":378},"references\u002Fscaffolding.md",[380],{"type":53,"value":381},"scaffolding.md",{"type":53,"value":383},", then Step 2 and\u002For Step 3",{"type":47,"tag":340,"props":385,"children":386},{},[387,395],{"type":47,"tag":362,"props":388,"children":389},{},[390],{"type":47,"tag":128,"props":391,"children":392},{},[393],{"type":53,"value":394},"Add or modify a backend feature",{"type":47,"tag":362,"props":396,"children":397},{},[398],{"type":53,"value":399},"→ Step 2 (Backend Features)",{"type":47,"tag":340,"props":401,"children":402},{},[403,411],{"type":47,"tag":362,"props":404,"children":405},{},[406],{"type":47,"tag":128,"props":407,"children":408},{},[409],{"type":53,"value":410},"Connect frontend to existing backend",{"type":47,"tag":362,"props":412,"children":413},{},[414],{"type":53,"value":415},"→ Step 3 (Frontend Integration)",{"type":47,"tag":340,"props":417,"children":418},{},[419,427],{"type":47,"tag":362,"props":420,"children":421},{},[422],{"type":47,"tag":128,"props":423,"children":424},{},[425],{"type":53,"value":426},"Deploy the application",{"type":47,"tag":362,"props":428,"children":429},{},[430,431],{"type":53,"value":374},{"type":47,"tag":376,"props":432,"children":434},{"href":433},"references\u002Fdeployment.md",[435],{"type":53,"value":436},"deployment.md",{"type":47,"tag":325,"props":438,"children":440},{"id":439},"step-2-backend-features",[441],{"type":53,"value":442},"Step 2: Backend Features",{"type":47,"tag":56,"props":444,"children":445},{},[446],{"type":53,"value":447},"Read the corresponding reference for each backend feature you need:",{"type":47,"tag":332,"props":449,"children":450},{},[451,472],{"type":47,"tag":336,"props":452,"children":453},{},[454],{"type":47,"tag":340,"props":455,"children":456},{},[457,462,467],{"type":47,"tag":344,"props":458,"children":459},{},[460],{"type":53,"value":461},"Feature",{"type":47,"tag":344,"props":463,"children":464},{},[465],{"type":53,"value":466},"Reference",{"type":47,"tag":344,"props":468,"children":469},{},[470],{"type":53,"value":471},"When to Use",{"type":47,"tag":355,"props":473,"children":474},{},[475,497,519,541,563,591],{"type":47,"tag":340,"props":476,"children":477},{},[478,483,492],{"type":47,"tag":362,"props":479,"children":480},{},[481],{"type":53,"value":482},"Authentication",{"type":47,"tag":362,"props":484,"children":485},{},[486],{"type":47,"tag":376,"props":487,"children":489},{"href":488},"references\u002Fauth-backend.md",[490],{"type":53,"value":491},"auth-backend.md",{"type":47,"tag":362,"props":493,"children":494},{},[495],{"type":53,"value":496},"Email\u002Fpassword, social login, MFA, SAML\u002FOIDC",{"type":47,"tag":340,"props":498,"children":499},{},[500,505,514],{"type":47,"tag":362,"props":501,"children":502},{},[503],{"type":53,"value":504},"Data Models",{"type":47,"tag":362,"props":506,"children":507},{},[508],{"type":47,"tag":376,"props":509,"children":511},{"href":510},"references\u002Fdata-backend.md",[512],{"type":53,"value":513},"data-backend.md",{"type":47,"tag":362,"props":515,"children":516},{},[517],{"type":53,"value":518},"GraphQL schema, DynamoDB, relationships, auth rules",{"type":47,"tag":340,"props":520,"children":521},{},[522,527,536],{"type":47,"tag":362,"props":523,"children":524},{},[525],{"type":53,"value":526},"File Storage",{"type":47,"tag":362,"props":528,"children":529},{},[530],{"type":47,"tag":376,"props":531,"children":533},{"href":532},"references\u002Fstorage-backend.md",[534],{"type":53,"value":535},"storage-backend.md",{"type":47,"tag":362,"props":537,"children":538},{},[539],{"type":53,"value":540},"S3 uploads\u002Fdownloads, access rules",{"type":47,"tag":340,"props":542,"children":543},{},[544,549,558],{"type":47,"tag":362,"props":545,"children":546},{},[547],{"type":53,"value":548},"Functions & API",{"type":47,"tag":362,"props":550,"children":551},{},[552],{"type":47,"tag":376,"props":553,"children":555},{"href":554},"references\u002Ffunctions-and-api.md",[556],{"type":53,"value":557},"functions-and-api.md",{"type":47,"tag":362,"props":559,"children":560},{},[561],{"type":53,"value":562},"Lambda, custom resolvers, REST\u002FHTTP APIs, calling from client",{"type":47,"tag":340,"props":564,"children":565},{},[566,571,580],{"type":47,"tag":362,"props":567,"children":568},{},[569],{"type":53,"value":570},"AI Features",{"type":47,"tag":362,"props":572,"children":573},{},[574],{"type":47,"tag":376,"props":575,"children":577},{"href":576},"references\u002Fai.md",[578],{"type":53,"value":579},"ai.md",{"type":47,"tag":362,"props":581,"children":582},{},[583,585],{"type":53,"value":584},"Conversation, generation, AI tools via Bedrock ",{"type":47,"tag":586,"props":587,"children":588},"em",{},[589],{"type":53,"value":590},"(backend config + React\u002FNext.js frontend)",{"type":47,"tag":340,"props":592,"children":593},{},[594,599,608],{"type":47,"tag":362,"props":595,"children":596},{},[597],{"type":53,"value":598},"Geo, PubSub, CDK",{"type":47,"tag":362,"props":600,"children":601},{},[602],{"type":47,"tag":376,"props":603,"children":605},{"href":604},"references\u002Fgeo-pubsub-cdk.md",[606],{"type":53,"value":607},"geo-pubsub-cdk.md",{"type":47,"tag":362,"props":609,"children":610},{},[611],{"type":53,"value":612},"Backend-only: custom CDK stacks, overrides, custom outputs. Backend + frontend: Geo, PubSub, Face Liveness",{"type":47,"tag":56,"props":614,"children":615},{},[616],{"type":53,"value":617},"Each backend feature file is self-contained. Load only what you need.",{"type":47,"tag":619,"props":620,"children":621},"blockquote",{},[622],{"type":47,"tag":56,"props":623,"children":624},{},[625,630,632,637,639,644],{"type":47,"tag":128,"props":626,"children":627},{},[628],{"type":53,"value":629},"Routing note:",{"type":53,"value":631}," These files apply for both ",{"type":47,"tag":128,"props":633,"children":634},{},[635],{"type":53,"value":636},"adding",{"type":53,"value":638}," and ",{"type":47,"tag":128,"props":640,"children":641},{},[642],{"type":53,"value":643},"modifying",{"type":53,"value":645},"\nfeatures. Route to the same file whether the user says \"add auth\" or\n\"change auth config\" — each reference covers the full define surface.",{"type":47,"tag":325,"props":647,"children":649},{"id":648},"step-3-frontend-integration",[650],{"type":53,"value":651},"Step 3: Frontend Integration",{"type":47,"tag":56,"props":653,"children":654},{},[655],{"type":53,"value":656},"After configuring backend resources, connect the frontend. Choose by\nplatform and feature:",{"type":47,"tag":56,"props":658,"children":659},{},[660,665],{"type":47,"tag":128,"props":661,"children":662},{},[663],{"type":53,"value":664},"Web",{"type":53,"value":666}," (React, Next.js, Vue, Angular, React Native):",{"type":47,"tag":332,"props":668,"children":669},{},[670,684],{"type":47,"tag":336,"props":671,"children":672},{},[673],{"type":47,"tag":340,"props":674,"children":675},{},[676,680],{"type":47,"tag":344,"props":677,"children":678},{},[679],{"type":53,"value":461},{"type":47,"tag":344,"props":681,"children":682},{},[683],{"type":53,"value":466},{"type":47,"tag":355,"props":685,"children":686},{},[687,704,721],{"type":47,"tag":340,"props":688,"children":689},{},[690,695],{"type":47,"tag":362,"props":691,"children":692},{},[693],{"type":53,"value":694},"Auth UI & flows",{"type":47,"tag":362,"props":696,"children":697},{},[698],{"type":47,"tag":376,"props":699,"children":701},{"href":700},"references\u002Fauth-web.md",[702],{"type":53,"value":703},"auth-web.md",{"type":47,"tag":340,"props":705,"children":706},{},[707,712],{"type":47,"tag":362,"props":708,"children":709},{},[710],{"type":53,"value":711},"Data CRUD & subscriptions",{"type":47,"tag":362,"props":713,"children":714},{},[715],{"type":47,"tag":376,"props":716,"children":718},{"href":717},"references\u002Fdata-web.md",[719],{"type":53,"value":720},"data-web.md",{"type":47,"tag":340,"props":722,"children":723},{},[724,729],{"type":47,"tag":362,"props":725,"children":726},{},[727],{"type":53,"value":728},"Storage upload\u002Fdownload",{"type":47,"tag":362,"props":730,"children":731},{},[732],{"type":47,"tag":376,"props":733,"children":735},{"href":734},"references\u002Fstorage-web.md",[736],{"type":53,"value":737},"storage-web.md",{"type":47,"tag":56,"props":739,"children":740},{},[741,746],{"type":47,"tag":128,"props":742,"children":743},{},[744],{"type":53,"value":745},"Mobile",{"type":53,"value":747}," (Flutter, Swift, Android):",{"type":47,"tag":332,"props":749,"children":750},{},[751,765],{"type":47,"tag":336,"props":752,"children":753},{},[754],{"type":47,"tag":340,"props":755,"children":756},{},[757,761],{"type":47,"tag":344,"props":758,"children":759},{},[760],{"type":53,"value":461},{"type":47,"tag":344,"props":762,"children":763},{},[764],{"type":53,"value":466},{"type":47,"tag":355,"props":766,"children":767},{},[768,784,800],{"type":47,"tag":340,"props":769,"children":770},{},[771,775],{"type":47,"tag":362,"props":772,"children":773},{},[774],{"type":53,"value":694},{"type":47,"tag":362,"props":776,"children":777},{},[778],{"type":47,"tag":376,"props":779,"children":781},{"href":780},"references\u002Fauth-mobile.md",[782],{"type":53,"value":783},"auth-mobile.md",{"type":47,"tag":340,"props":785,"children":786},{},[787,791],{"type":47,"tag":362,"props":788,"children":789},{},[790],{"type":53,"value":711},{"type":47,"tag":362,"props":792,"children":793},{},[794],{"type":47,"tag":376,"props":795,"children":797},{"href":796},"references\u002Fdata-mobile.md",[798],{"type":53,"value":799},"data-mobile.md",{"type":47,"tag":340,"props":801,"children":802},{},[803,807],{"type":47,"tag":362,"props":804,"children":805},{},[806],{"type":53,"value":728},{"type":47,"tag":362,"props":808,"children":809},{},[810],{"type":47,"tag":376,"props":811,"children":813},{"href":812},"references\u002Fstorage-mobile.md",[814],{"type":53,"value":815},"storage-mobile.md",{"type":47,"tag":619,"props":817,"children":818},{},[819],{"type":47,"tag":56,"props":820,"children":821},{},[822,827,829,833,835,839,841,846],{"type":47,"tag":128,"props":823,"children":824},{},[825],{"type":53,"value":826},"Note:",{"type":53,"value":828}," AI and Functions frontend patterns are included in\n",{"type":47,"tag":376,"props":830,"children":831},{"href":576},[832],{"type":53,"value":579},{"type":53,"value":834}," and\n",{"type":47,"tag":376,"props":836,"children":837},{"href":554},[838],{"type":53,"value":557},{"type":53,"value":840}," respectively —\nthey are ",{"type":47,"tag":128,"props":842,"children":843},{},[844],{"type":53,"value":845},"not",{"type":53,"value":847}," split into separate web\u002Fmobile files.",{"type":47,"tag":62,"props":849,"children":851},{"id":850},"core-concepts",[852],{"type":53,"value":853},"Core Concepts",{"type":47,"tag":325,"props":855,"children":857},{"id":856},"amplify-gen2-architecture",[858],{"type":53,"value":859},"Amplify Gen2 Architecture",{"type":47,"tag":69,"props":861,"children":862},{},[863,879,903,941],{"type":47,"tag":73,"props":864,"children":865},{},[866,871,873],{"type":47,"tag":128,"props":867,"children":868},{},[869],{"type":53,"value":870},"Code-first:",{"type":53,"value":872}," All backend resources defined in TypeScript under ",{"type":47,"tag":84,"props":874,"children":876},{"className":875},[],[877],{"type":53,"value":878},"amplify\u002F",{"type":47,"tag":73,"props":880,"children":881},{},[882,887,889,895,897],{"type":47,"tag":128,"props":883,"children":884},{},[885],{"type":53,"value":886},"Main config:",{"type":53,"value":888}," ",{"type":47,"tag":84,"props":890,"children":892},{"className":891},[],[893],{"type":53,"value":894},"amplify\u002Fbackend.ts",{"type":53,"value":896}," imports and combines all resources via\n",{"type":47,"tag":84,"props":898,"children":900},{"className":899},[],[901],{"type":53,"value":902},"defineBackend()",{"type":47,"tag":73,"props":904,"children":905},{},[906,911,912,918,920,926,928,934,935],{"type":47,"tag":128,"props":907,"children":908},{},[909],{"type":53,"value":910},"Resource files:",{"type":53,"value":888},{"type":47,"tag":84,"props":913,"children":915},{"className":914},[],[916],{"type":53,"value":917},"amplify\u002Fauth\u002Fresource.ts",{"type":53,"value":919},", ",{"type":47,"tag":84,"props":921,"children":923},{"className":922},[],[924],{"type":53,"value":925},"amplify\u002Fdata\u002Fresource.ts",{"type":53,"value":927},",\n",{"type":47,"tag":84,"props":929,"children":931},{"className":930},[],[932],{"type":53,"value":933},"amplify\u002Fstorage\u002Fresource.ts",{"type":53,"value":919},{"type":47,"tag":84,"props":936,"children":938},{"className":937},[],[939],{"type":53,"value":940},"amplify\u002Ffunctions\u002F\u003Cname>\u002Fresource.ts",{"type":47,"tag":73,"props":942,"children":943},{},[944,949,950,956,958,964,966,971,973,979,981,987],{"type":47,"tag":128,"props":945,"children":946},{},[947],{"type":53,"value":948},"Generated output:",{"type":53,"value":888},{"type":47,"tag":84,"props":951,"children":953},{"className":952},[],[954],{"type":53,"value":955},"amplify_outputs.json",{"type":53,"value":957}," — consumed by frontend\n",{"type":47,"tag":84,"props":959,"children":961},{"className":960},[],[962],{"type":53,"value":963},"Amplify.configure()",{"type":53,"value":965},". ",{"type":47,"tag":128,"props":967,"children":968},{},[969],{"type":53,"value":970},"Gitignored",{"type":53,"value":972}," — generated by ",{"type":47,"tag":84,"props":974,"children":976},{"className":975},[],[977],{"type":53,"value":978},"npx ampx sandbox",{"type":53,"value":980},"\n(local dev) or ",{"type":47,"tag":84,"props":982,"children":984},{"className":983},[],[985],{"type":53,"value":986},"npx ampx pipeline-deploy",{"type":53,"value":988}," (CI\u002FCD), never committed.",{"type":47,"tag":325,"props":990,"children":992},{"id":991},"directory-structure",[993],{"type":53,"value":994},"Directory Structure",{"type":47,"tag":56,"props":996,"children":997},{},[998,1003,1004,1010,1012,1017,1019,1025,1027,1032],{"type":47,"tag":84,"props":999,"children":1001},{"className":1000},[],[1002],{"type":53,"value":878},{"type":53,"value":638},{"type":47,"tag":84,"props":1005,"children":1007},{"className":1006},[],[1008],{"type":53,"value":1009},"src\u002F",{"type":53,"value":1011}," must be siblings under the project root — placing\nthem at different directory levels breaks sandbox detection. (Exception: in monorepos, ",{"type":47,"tag":84,"props":1013,"children":1015},{"className":1014},[],[1016],{"type":53,"value":878},{"type":53,"value":1018}," may be in a ",{"type":47,"tag":84,"props":1020,"children":1022},{"className":1021},[],[1023],{"type":53,"value":1024},"packages\u002F",{"type":53,"value":1026}," subdirectory — the key is that ",{"type":47,"tag":84,"props":1028,"children":1030},{"className":1029},[],[1031],{"type":53,"value":955},{"type":53,"value":1033}," must be accessible from the frontend entry point.)",{"type":47,"tag":1035,"props":1036,"children":1041},"pre",{"className":1037,"code":1039,"language":53,"meta":1040},[1038],"language-text","project-root\u002F\n├── amplify\u002F\n│   ├── backend.ts            # defineBackend({ auth, data, ... })\n│   ├── auth\u002Fresource.ts      # defineAuth({ ... })\n│   ├── data\u002Fresource.ts      # defineData({ schema })\n│   ├── storage\u002Fresource.ts   # defineStorage({ ... })\n│   └── functions\u002F\n│       └── my-func\u002F\n│           ├── resource.ts   # defineFunction({ ... })\n│           └── handler.ts    # export const handler = ...\n├── src\u002F                      # Frontend code\n├── amplify_outputs.json      # Generated, gitignored — never edit or commit\n└── package.json\n","",[1042],{"type":47,"tag":84,"props":1043,"children":1044},{"__ignoreMap":1040},[1045],{"type":53,"value":1039},{"type":47,"tag":325,"props":1047,"children":1049},{"id":1048},"key-apis",[1050],{"type":53,"value":1051},"Key APIs",{"type":47,"tag":332,"props":1053,"children":1054},{},[1055,1071],{"type":47,"tag":336,"props":1056,"children":1057},{},[1058],{"type":47,"tag":340,"props":1059,"children":1060},{},[1061,1066],{"type":47,"tag":344,"props":1062,"children":1063},{},[1064],{"type":53,"value":1065},"Package",{"type":47,"tag":344,"props":1067,"children":1068},{},[1069],{"type":53,"value":1070},"Purpose",{"type":47,"tag":355,"props":1072,"children":1073},{},[1074,1123,1153,1183],{"type":47,"tag":340,"props":1075,"children":1076},{},[1077,1086],{"type":47,"tag":362,"props":1078,"children":1079},{},[1080],{"type":47,"tag":84,"props":1081,"children":1083},{"className":1082},[],[1084],{"type":53,"value":1085},"@aws-amplify\u002Fbackend",{"type":47,"tag":362,"props":1087,"children":1088},{},[1089,1095,1096,1102,1103,1109,1110,1116,1117],{"type":47,"tag":84,"props":1090,"children":1092},{"className":1091},[],[1093],{"type":53,"value":1094},"defineAuth",{"type":53,"value":919},{"type":47,"tag":84,"props":1097,"children":1099},{"className":1098},[],[1100],{"type":53,"value":1101},"defineData",{"type":53,"value":919},{"type":47,"tag":84,"props":1104,"children":1106},{"className":1105},[],[1107],{"type":53,"value":1108},"defineStorage",{"type":53,"value":919},{"type":47,"tag":84,"props":1111,"children":1113},{"className":1112},[],[1114],{"type":53,"value":1115},"defineFunction",{"type":53,"value":919},{"type":47,"tag":84,"props":1118,"children":1120},{"className":1119},[],[1121],{"type":53,"value":1122},"defineBackend",{"type":47,"tag":340,"props":1124,"children":1125},{},[1126,1134],{"type":47,"tag":362,"props":1127,"children":1128},{},[1129],{"type":47,"tag":84,"props":1130,"children":1132},{"className":1131},[],[1133],{"type":53,"value":4},{"type":47,"tag":362,"props":1135,"children":1136},{},[1137,1139,1144,1145,1151],{"type":53,"value":1138},"Frontend: ",{"type":47,"tag":84,"props":1140,"children":1142},{"className":1141},[],[1143],{"type":53,"value":963},{"type":53,"value":919},{"type":47,"tag":84,"props":1146,"children":1148},{"className":1147},[],[1149],{"type":53,"value":1150},"generateClient()",{"type":53,"value":1152},", auth\u002Fdata\u002Fstorage APIs",{"type":47,"tag":340,"props":1154,"children":1155},{},[1156,1165],{"type":47,"tag":362,"props":1157,"children":1158},{},[1159],{"type":47,"tag":84,"props":1160,"children":1162},{"className":1161},[],[1163],{"type":53,"value":1164},"@aws-amplify\u002Fui-react",{"type":47,"tag":362,"props":1166,"children":1167},{},[1168,1170,1176,1177],{"type":53,"value":1169},"Pre-built UI: ",{"type":47,"tag":84,"props":1171,"children":1173},{"className":1172},[],[1174],{"type":53,"value":1175},"\u003CAuthenticator>",{"type":53,"value":919},{"type":47,"tag":84,"props":1178,"children":1180},{"className":1179},[],[1181],{"type":53,"value":1182},"\u003CStorageBrowser>",{"type":47,"tag":340,"props":1184,"children":1185},{},[1186,1195],{"type":47,"tag":362,"props":1187,"children":1188},{},[1189],{"type":47,"tag":84,"props":1190,"children":1192},{"className":1191},[],[1193],{"type":53,"value":1194},"@aws-amplify\u002Fui-react-ai",{"type":47,"tag":362,"props":1196,"children":1197},{},[1198,1200,1206,1207],{"type":53,"value":1199},"AI UI: ",{"type":47,"tag":84,"props":1201,"children":1203},{"className":1202},[],[1204],{"type":53,"value":1205},"\u003CAIConversation>",{"type":53,"value":919},{"type":47,"tag":84,"props":1208,"children":1210},{"className":1209},[],[1211],{"type":53,"value":1212},"useAIConversation",{"type":47,"tag":62,"props":1214,"children":1216},{"id":1215},"framework-setup",[1217],{"type":53,"value":1218},"Framework Setup",{"type":47,"tag":56,"props":1220,"children":1221},{},[1222,1224,1229],{"type":53,"value":1223},"These patterns apply to ",{"type":47,"tag":128,"props":1225,"children":1226},{},[1227],{"type":53,"value":1228},"every",{"type":53,"value":1230}," web task — not just new projects. Verify\neach one before implementing any feature.",{"type":47,"tag":325,"props":1232,"children":1234},{"id":1233},"gen2-detection",[1235],{"type":53,"value":1236},"Gen2 Detection",{"type":47,"tag":56,"props":1238,"children":1239},{},[1240],{"type":53,"value":1241},"Before modifying any code, check if the project is already Gen2:",{"type":47,"tag":1243,"props":1244,"children":1245},"ol",{},[1246,1262],{"type":47,"tag":73,"props":1247,"children":1248},{},[1249,1254,1256],{"type":47,"tag":84,"props":1250,"children":1252},{"className":1251},[],[1253],{"type":53,"value":878},{"type":53,"value":1255}," directory exists with ",{"type":47,"tag":84,"props":1257,"children":1259},{"className":1258},[],[1260],{"type":53,"value":1261},"backend.ts",{"type":47,"tag":73,"props":1263,"children":1264},{},[1265,1270,1272,1278],{"type":47,"tag":84,"props":1266,"children":1268},{"className":1267},[],[1269],{"type":53,"value":1085},{"type":53,"value":1271}," in ",{"type":47,"tag":84,"props":1273,"children":1275},{"className":1274},[],[1276],{"type":53,"value":1277},"package.json",{"type":53,"value":1279}," devDependencies",{"type":47,"tag":56,"props":1281,"children":1282},{},[1283,1285,1291],{"type":53,"value":1284},"If both are true, the project is already Gen2 — skip to feature\nimplementation. If ",{"type":47,"tag":84,"props":1286,"children":1288},{"className":1287},[],[1289],{"type":53,"value":1290},"amplify\u002F.config\u002F",{"type":53,"value":1292}," exists instead, this is a Gen1\nproject — do not proceed (requires separate migration skill).",{"type":47,"tag":325,"props":1294,"children":1296},{"id":1295},"frontend-configuration",[1297],{"type":53,"value":1298},"Frontend Configuration",{"type":47,"tag":56,"props":1300,"children":1301},{},[1302,1304,1309],{"type":53,"value":1303},"Import the generated outputs and configure Amplify in the ",{"type":47,"tag":128,"props":1305,"children":1306},{},[1307],{"type":53,"value":1308},"correct entry\npoint",{"type":53,"value":1310}," for your framework. Placing this in the wrong file causes silent\nfailures — Amplify API calls return undefined or empty responses with no error.",{"type":47,"tag":56,"props":1312,"children":1313},{},[1314,1319,1320,1325,1327,1332,1334,1340,1342,1346],{"type":47,"tag":128,"props":1315,"children":1316},{},[1317],{"type":53,"value":1318},"WARNING:",{"type":53,"value":888},{"type":47,"tag":84,"props":1321,"children":1323},{"className":1322},[],[1324],{"type":53,"value":955},{"type":53,"value":1326}," must exist before the app can\ncompile — without it, the build fails with a module-not-found error.\nRun ",{"type":47,"tag":84,"props":1328,"children":1330},{"className":1329},[],[1331],{"type":53,"value":978},{"type":53,"value":1333}," (or ",{"type":47,"tag":84,"props":1335,"children":1337},{"className":1336},[],[1338],{"type":53,"value":1339},"npx ampx sandbox --once",{"type":53,"value":1341},") first to\ngenerate it. See ",{"type":47,"tag":376,"props":1343,"children":1344},{"href":378},[1345],{"type":53,"value":381},{"type":53,"value":1347}," for the correct sequence.",{"type":47,"tag":56,"props":1349,"children":1350},{},[1351,1356,1358,1364],{"type":47,"tag":128,"props":1352,"children":1353},{},[1354],{"type":53,"value":1355},"React (Vite)",{"type":53,"value":1357}," — ",{"type":47,"tag":84,"props":1359,"children":1361},{"className":1360},[],[1362],{"type":53,"value":1363},"src\u002Fmain.tsx",{"type":53,"value":1365},":",{"type":47,"tag":1035,"props":1367,"children":1370},{"className":1368,"code":1369,"language":18,"meta":1040,"style":1040},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { Amplify } from 'aws-amplify';\nimport outputs from '..\u002Famplify_outputs.json';\nAmplify.configure(outputs);\n",[1371],{"type":47,"tag":84,"props":1372,"children":1373},{"__ignoreMap":1040},[1374,1428,1463],{"type":47,"tag":1375,"props":1376,"children":1379},"span",{"class":1377,"line":1378},"line",1,[1380,1386,1392,1398,1403,1408,1413,1418,1423],{"type":47,"tag":1375,"props":1381,"children":1383},{"style":1382},"--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic",[1384],{"type":53,"value":1385},"import",{"type":47,"tag":1375,"props":1387,"children":1389},{"style":1388},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1390],{"type":53,"value":1391}," {",{"type":47,"tag":1375,"props":1393,"children":1395},{"style":1394},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[1396],{"type":53,"value":1397}," Amplify",{"type":47,"tag":1375,"props":1399,"children":1400},{"style":1388},[1401],{"type":53,"value":1402}," }",{"type":47,"tag":1375,"props":1404,"children":1405},{"style":1382},[1406],{"type":53,"value":1407}," from",{"type":47,"tag":1375,"props":1409,"children":1410},{"style":1388},[1411],{"type":53,"value":1412}," '",{"type":47,"tag":1375,"props":1414,"children":1416},{"style":1415},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[1417],{"type":53,"value":4},{"type":47,"tag":1375,"props":1419,"children":1420},{"style":1388},[1421],{"type":53,"value":1422},"'",{"type":47,"tag":1375,"props":1424,"children":1425},{"style":1388},[1426],{"type":53,"value":1427},";\n",{"type":47,"tag":1375,"props":1429,"children":1431},{"class":1377,"line":1430},2,[1432,1436,1441,1446,1450,1455,1459],{"type":47,"tag":1375,"props":1433,"children":1434},{"style":1382},[1435],{"type":53,"value":1385},{"type":47,"tag":1375,"props":1437,"children":1438},{"style":1394},[1439],{"type":53,"value":1440}," outputs ",{"type":47,"tag":1375,"props":1442,"children":1443},{"style":1382},[1444],{"type":53,"value":1445},"from",{"type":47,"tag":1375,"props":1447,"children":1448},{"style":1388},[1449],{"type":53,"value":1412},{"type":47,"tag":1375,"props":1451,"children":1452},{"style":1415},[1453],{"type":53,"value":1454},"..\u002Famplify_outputs.json",{"type":47,"tag":1375,"props":1456,"children":1457},{"style":1388},[1458],{"type":53,"value":1422},{"type":47,"tag":1375,"props":1460,"children":1461},{"style":1388},[1462],{"type":53,"value":1427},{"type":47,"tag":1375,"props":1464,"children":1466},{"class":1377,"line":1465},3,[1467,1472,1476,1482,1487],{"type":47,"tag":1375,"props":1468,"children":1469},{"style":1394},[1470],{"type":53,"value":1471},"Amplify",{"type":47,"tag":1375,"props":1473,"children":1474},{"style":1388},[1475],{"type":53,"value":250},{"type":47,"tag":1375,"props":1477,"children":1479},{"style":1478},"--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF",[1480],{"type":53,"value":1481},"configure",{"type":47,"tag":1375,"props":1483,"children":1484},{"style":1394},[1485],{"type":53,"value":1486},"(outputs)",{"type":47,"tag":1375,"props":1488,"children":1489},{"style":1388},[1490],{"type":53,"value":1427},{"type":47,"tag":56,"props":1492,"children":1493},{},[1494,1499,1500,1506],{"type":47,"tag":128,"props":1495,"children":1496},{},[1497],{"type":53,"value":1498},"Next.js (App Router)",{"type":53,"value":1357},{"type":47,"tag":84,"props":1501,"children":1503},{"className":1502},[],[1504],{"type":53,"value":1505},"app\u002Flayout.tsx",{"type":53,"value":1365},{"type":47,"tag":619,"props":1508,"children":1509},{},[1510],{"type":47,"tag":56,"props":1511,"children":1512},{},[1513,1518,1519,1525,1527,1533],{"type":47,"tag":128,"props":1514,"children":1515},{},[1516],{"type":53,"value":1517},"Important:",{"type":53,"value":888},{"type":47,"tag":84,"props":1520,"children":1522},{"className":1521},[],[1523],{"type":53,"value":1524},"layout.tsx",{"type":53,"value":1526}," is a server component in App Router. Use the ",{"type":47,"tag":84,"props":1528,"children":1530},{"className":1529},[],[1531],{"type":53,"value":1532},"ConfigureAmplifyClientSide",{"type":53,"value":1534}," client component pattern below instead.",{"type":47,"tag":56,"props":1536,"children":1537},{},[1538,1544,1546,1551],{"type":47,"tag":84,"props":1539,"children":1541},{"className":1540},[],[1542],{"type":53,"value":1543},"{ ssr: true }",{"type":53,"value":1545}," is a ",{"type":47,"tag":128,"props":1547,"children":1548},{},[1549],{"type":53,"value":1550},"Next.js-only",{"type":53,"value":1552}," option (not needed by Vue, Angular, or React SPA). Both App Router and Pages Router use it, but apply it differently:",{"type":47,"tag":619,"props":1554,"children":1555},{},[1556],{"type":47,"tag":69,"props":1557,"children":1558},{},[1559,1575],{"type":47,"tag":73,"props":1560,"children":1561},{},[1562,1566,1568,1573],{"type":47,"tag":128,"props":1563,"children":1564},{},[1565],{"type":53,"value":224},{"type":53,"value":1567}," — set globally in ",{"type":47,"tag":84,"props":1569,"children":1571},{"className":1570},[],[1572],{"type":53,"value":1532},{"type":53,"value":1574}," client component",{"type":47,"tag":73,"props":1576,"children":1577},{},[1578,1583],{"type":47,"tag":128,"props":1579,"children":1580},{},[1581],{"type":53,"value":1582},"Pages Router",{"type":53,"value":1584}," — set per-file where server-side access is needed",{"type":47,"tag":1586,"props":1587,"children":1589},"h4",{"id":1588},"nextjs-app-router-client-side-configuration",[1590],{"type":53,"value":1591},"Next.js App Router: Client-Side Configuration",{"type":47,"tag":56,"props":1593,"children":1594},{},[1595],{"type":53,"value":1596},"Next.js App Router requires a dedicated client component to configure Amplify for browser-side operations:",{"type":47,"tag":1035,"props":1598,"children":1600},{"className":1368,"code":1599,"language":18,"meta":1040,"style":1040},"\u002F\u002F components\u002FConfigureAmplifyClientSide.tsx\n\"use client\";\nimport { Amplify } from \"aws-amplify\";\nimport outputs from \"@\u002Famplify_outputs.json\";\n\nAmplify.configure(outputs, { ssr: true });\n\nexport default function ConfigureAmplifyClientSide() {\n  return null;\n}\n",[1601],{"type":47,"tag":84,"props":1602,"children":1603},{"__ignoreMap":1040},[1604,1613,1634,1674,1707,1717,1776,1784,1819,1833],{"type":47,"tag":1375,"props":1605,"children":1606},{"class":1377,"line":1378},[1607],{"type":47,"tag":1375,"props":1608,"children":1610},{"style":1609},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1611],{"type":53,"value":1612},"\u002F\u002F components\u002FConfigureAmplifyClientSide.tsx\n",{"type":47,"tag":1375,"props":1614,"children":1615},{"class":1377,"line":1430},[1616,1621,1626,1630],{"type":47,"tag":1375,"props":1617,"children":1618},{"style":1388},[1619],{"type":53,"value":1620},"\"",{"type":47,"tag":1375,"props":1622,"children":1623},{"style":1415},[1624],{"type":53,"value":1625},"use client",{"type":47,"tag":1375,"props":1627,"children":1628},{"style":1388},[1629],{"type":53,"value":1620},{"type":47,"tag":1375,"props":1631,"children":1632},{"style":1388},[1633],{"type":53,"value":1427},{"type":47,"tag":1375,"props":1635,"children":1636},{"class":1377,"line":1465},[1637,1641,1645,1649,1653,1657,1662,1666,1670],{"type":47,"tag":1375,"props":1638,"children":1639},{"style":1382},[1640],{"type":53,"value":1385},{"type":47,"tag":1375,"props":1642,"children":1643},{"style":1388},[1644],{"type":53,"value":1391},{"type":47,"tag":1375,"props":1646,"children":1647},{"style":1394},[1648],{"type":53,"value":1397},{"type":47,"tag":1375,"props":1650,"children":1651},{"style":1388},[1652],{"type":53,"value":1402},{"type":47,"tag":1375,"props":1654,"children":1655},{"style":1382},[1656],{"type":53,"value":1407},{"type":47,"tag":1375,"props":1658,"children":1659},{"style":1388},[1660],{"type":53,"value":1661}," \"",{"type":47,"tag":1375,"props":1663,"children":1664},{"style":1415},[1665],{"type":53,"value":4},{"type":47,"tag":1375,"props":1667,"children":1668},{"style":1388},[1669],{"type":53,"value":1620},{"type":47,"tag":1375,"props":1671,"children":1672},{"style":1388},[1673],{"type":53,"value":1427},{"type":47,"tag":1375,"props":1675,"children":1677},{"class":1377,"line":1676},4,[1678,1682,1686,1690,1694,1699,1703],{"type":47,"tag":1375,"props":1679,"children":1680},{"style":1382},[1681],{"type":53,"value":1385},{"type":47,"tag":1375,"props":1683,"children":1684},{"style":1394},[1685],{"type":53,"value":1440},{"type":47,"tag":1375,"props":1687,"children":1688},{"style":1382},[1689],{"type":53,"value":1445},{"type":47,"tag":1375,"props":1691,"children":1692},{"style":1388},[1693],{"type":53,"value":1661},{"type":47,"tag":1375,"props":1695,"children":1696},{"style":1415},[1697],{"type":53,"value":1698},"@\u002Famplify_outputs.json",{"type":47,"tag":1375,"props":1700,"children":1701},{"style":1388},[1702],{"type":53,"value":1620},{"type":47,"tag":1375,"props":1704,"children":1705},{"style":1388},[1706],{"type":53,"value":1427},{"type":47,"tag":1375,"props":1708,"children":1710},{"class":1377,"line":1709},5,[1711],{"type":47,"tag":1375,"props":1712,"children":1714},{"emptyLinePlaceholder":1713},true,[1715],{"type":53,"value":1716},"\n",{"type":47,"tag":1375,"props":1718,"children":1720},{"class":1377,"line":1719},6,[1721,1725,1729,1733,1738,1743,1747,1753,1757,1763,1767,1772],{"type":47,"tag":1375,"props":1722,"children":1723},{"style":1394},[1724],{"type":53,"value":1471},{"type":47,"tag":1375,"props":1726,"children":1727},{"style":1388},[1728],{"type":53,"value":250},{"type":47,"tag":1375,"props":1730,"children":1731},{"style":1478},[1732],{"type":53,"value":1481},{"type":47,"tag":1375,"props":1734,"children":1735},{"style":1394},[1736],{"type":53,"value":1737},"(outputs",{"type":47,"tag":1375,"props":1739,"children":1740},{"style":1388},[1741],{"type":53,"value":1742},",",{"type":47,"tag":1375,"props":1744,"children":1745},{"style":1388},[1746],{"type":53,"value":1391},{"type":47,"tag":1375,"props":1748,"children":1750},{"style":1749},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[1751],{"type":53,"value":1752}," ssr",{"type":47,"tag":1375,"props":1754,"children":1755},{"style":1388},[1756],{"type":53,"value":1365},{"type":47,"tag":1375,"props":1758,"children":1760},{"style":1759},"--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC",[1761],{"type":53,"value":1762}," true",{"type":47,"tag":1375,"props":1764,"children":1765},{"style":1388},[1766],{"type":53,"value":1402},{"type":47,"tag":1375,"props":1768,"children":1769},{"style":1394},[1770],{"type":53,"value":1771},")",{"type":47,"tag":1375,"props":1773,"children":1774},{"style":1388},[1775],{"type":53,"value":1427},{"type":47,"tag":1375,"props":1777,"children":1779},{"class":1377,"line":1778},7,[1780],{"type":47,"tag":1375,"props":1781,"children":1782},{"emptyLinePlaceholder":1713},[1783],{"type":53,"value":1716},{"type":47,"tag":1375,"props":1785,"children":1787},{"class":1377,"line":1786},8,[1788,1793,1798,1804,1809,1814],{"type":47,"tag":1375,"props":1789,"children":1790},{"style":1382},[1791],{"type":53,"value":1792},"export",{"type":47,"tag":1375,"props":1794,"children":1795},{"style":1382},[1796],{"type":53,"value":1797}," default",{"type":47,"tag":1375,"props":1799,"children":1801},{"style":1800},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[1802],{"type":53,"value":1803}," function",{"type":47,"tag":1375,"props":1805,"children":1806},{"style":1478},[1807],{"type":53,"value":1808}," ConfigureAmplifyClientSide",{"type":47,"tag":1375,"props":1810,"children":1811},{"style":1388},[1812],{"type":53,"value":1813},"()",{"type":47,"tag":1375,"props":1815,"children":1816},{"style":1388},[1817],{"type":53,"value":1818}," {\n",{"type":47,"tag":1375,"props":1820,"children":1822},{"class":1377,"line":1821},9,[1823,1828],{"type":47,"tag":1375,"props":1824,"children":1825},{"style":1382},[1826],{"type":53,"value":1827},"  return",{"type":47,"tag":1375,"props":1829,"children":1830},{"style":1388},[1831],{"type":53,"value":1832}," null;\n",{"type":47,"tag":1375,"props":1834,"children":1836},{"class":1377,"line":1835},10,[1837],{"type":47,"tag":1375,"props":1838,"children":1839},{"style":1388},[1840],{"type":53,"value":1841},"}\n",{"type":47,"tag":56,"props":1843,"children":1844},{},[1845],{"type":53,"value":1846},"Import in your root layout:",{"type":47,"tag":1035,"props":1848,"children":1850},{"className":1368,"code":1849,"language":18,"meta":1040,"style":1040},"\u002F\u002F app\u002Flayout.tsx\nimport ConfigureAmplifyClientSide from \"@\u002Fcomponents\u002FConfigureAmplifyClientSide\";\n\nexport default function RootLayout({ children }: { children: React.ReactNode }) {\n  return (\n    \u003Chtml>\n      \u003Cbody>\n        \u003CConfigureAmplifyClientSide \u002F>\n        {children}\n      \u003C\u002Fbody>\n    \u003C\u002Fhtml>\n  );\n}\n",[1851],{"type":47,"tag":84,"props":1852,"children":1853},{"__ignoreMap":1040},[1854,1862,1895,1902,1974,1986,2004,2021,2038,2055,2071,2088,2101],{"type":47,"tag":1375,"props":1855,"children":1856},{"class":1377,"line":1378},[1857],{"type":47,"tag":1375,"props":1858,"children":1859},{"style":1609},[1860],{"type":53,"value":1861},"\u002F\u002F app\u002Flayout.tsx\n",{"type":47,"tag":1375,"props":1863,"children":1864},{"class":1377,"line":1430},[1865,1869,1874,1878,1882,1887,1891],{"type":47,"tag":1375,"props":1866,"children":1867},{"style":1382},[1868],{"type":53,"value":1385},{"type":47,"tag":1375,"props":1870,"children":1871},{"style":1394},[1872],{"type":53,"value":1873}," ConfigureAmplifyClientSide ",{"type":47,"tag":1375,"props":1875,"children":1876},{"style":1382},[1877],{"type":53,"value":1445},{"type":47,"tag":1375,"props":1879,"children":1880},{"style":1388},[1881],{"type":53,"value":1661},{"type":47,"tag":1375,"props":1883,"children":1884},{"style":1415},[1885],{"type":53,"value":1886},"@\u002Fcomponents\u002FConfigureAmplifyClientSide",{"type":47,"tag":1375,"props":1888,"children":1889},{"style":1388},[1890],{"type":53,"value":1620},{"type":47,"tag":1375,"props":1892,"children":1893},{"style":1388},[1894],{"type":53,"value":1427},{"type":47,"tag":1375,"props":1896,"children":1897},{"class":1377,"line":1465},[1898],{"type":47,"tag":1375,"props":1899,"children":1900},{"emptyLinePlaceholder":1713},[1901],{"type":53,"value":1716},{"type":47,"tag":1375,"props":1903,"children":1904},{"class":1377,"line":1676},[1905,1909,1913,1917,1922,1927,1933,1938,1942,1946,1950,1956,1960,1965,1970],{"type":47,"tag":1375,"props":1906,"children":1907},{"style":1382},[1908],{"type":53,"value":1792},{"type":47,"tag":1375,"props":1910,"children":1911},{"style":1382},[1912],{"type":53,"value":1797},{"type":47,"tag":1375,"props":1914,"children":1915},{"style":1800},[1916],{"type":53,"value":1803},{"type":47,"tag":1375,"props":1918,"children":1919},{"style":1478},[1920],{"type":53,"value":1921}," RootLayout",{"type":47,"tag":1375,"props":1923,"children":1924},{"style":1388},[1925],{"type":53,"value":1926},"({",{"type":47,"tag":1375,"props":1928,"children":1930},{"style":1929},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic",[1931],{"type":53,"value":1932}," children",{"type":47,"tag":1375,"props":1934,"children":1935},{"style":1388},[1936],{"type":53,"value":1937}," }:",{"type":47,"tag":1375,"props":1939,"children":1940},{"style":1388},[1941],{"type":53,"value":1391},{"type":47,"tag":1375,"props":1943,"children":1944},{"style":1749},[1945],{"type":53,"value":1932},{"type":47,"tag":1375,"props":1947,"children":1948},{"style":1388},[1949],{"type":53,"value":1365},{"type":47,"tag":1375,"props":1951,"children":1953},{"style":1952},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1954],{"type":53,"value":1955}," React",{"type":47,"tag":1375,"props":1957,"children":1958},{"style":1388},[1959],{"type":53,"value":250},{"type":47,"tag":1375,"props":1961,"children":1962},{"style":1952},[1963],{"type":53,"value":1964},"ReactNode",{"type":47,"tag":1375,"props":1966,"children":1967},{"style":1388},[1968],{"type":53,"value":1969}," })",{"type":47,"tag":1375,"props":1971,"children":1972},{"style":1388},[1973],{"type":53,"value":1818},{"type":47,"tag":1375,"props":1975,"children":1976},{"class":1377,"line":1709},[1977,1981],{"type":47,"tag":1375,"props":1978,"children":1979},{"style":1382},[1980],{"type":53,"value":1827},{"type":47,"tag":1375,"props":1982,"children":1983},{"style":1749},[1984],{"type":53,"value":1985}," (\n",{"type":47,"tag":1375,"props":1987,"children":1988},{"class":1377,"line":1719},[1989,1994,1999],{"type":47,"tag":1375,"props":1990,"children":1991},{"style":1749},[1992],{"type":53,"value":1993},"    \u003C",{"type":47,"tag":1375,"props":1995,"children":1996},{"style":1952},[1997],{"type":53,"value":1998},"html",{"type":47,"tag":1375,"props":2000,"children":2001},{"style":1749},[2002],{"type":53,"value":2003},">\n",{"type":47,"tag":1375,"props":2005,"children":2006},{"class":1377,"line":1778},[2007,2012,2017],{"type":47,"tag":1375,"props":2008,"children":2009},{"style":1749},[2010],{"type":53,"value":2011},"      \u003C",{"type":47,"tag":1375,"props":2013,"children":2014},{"style":1952},[2015],{"type":53,"value":2016},"body",{"type":47,"tag":1375,"props":2018,"children":2019},{"style":1749},[2020],{"type":53,"value":2003},{"type":47,"tag":1375,"props":2022,"children":2023},{"class":1377,"line":1786},[2024,2029,2033],{"type":47,"tag":1375,"props":2025,"children":2026},{"style":1388},[2027],{"type":53,"value":2028},"        \u003C",{"type":47,"tag":1375,"props":2030,"children":2031},{"style":1394},[2032],{"type":53,"value":1532},{"type":47,"tag":1375,"props":2034,"children":2035},{"style":1388},[2036],{"type":53,"value":2037}," \u002F>\n",{"type":47,"tag":1375,"props":2039,"children":2040},{"class":1377,"line":1821},[2041,2046,2051],{"type":47,"tag":1375,"props":2042,"children":2043},{"style":1388},[2044],{"type":53,"value":2045},"        {",{"type":47,"tag":1375,"props":2047,"children":2048},{"style":1929},[2049],{"type":53,"value":2050},"children",{"type":47,"tag":1375,"props":2052,"children":2053},{"style":1388},[2054],{"type":53,"value":1841},{"type":47,"tag":1375,"props":2056,"children":2057},{"class":1377,"line":1835},[2058,2063,2067],{"type":47,"tag":1375,"props":2059,"children":2060},{"style":1388},[2061],{"type":53,"value":2062},"      \u003C\u002F",{"type":47,"tag":1375,"props":2064,"children":2065},{"style":1394},[2066],{"type":53,"value":2016},{"type":47,"tag":1375,"props":2068,"children":2069},{"style":1388},[2070],{"type":53,"value":2003},{"type":47,"tag":1375,"props":2072,"children":2074},{"class":1377,"line":2073},11,[2075,2080,2084],{"type":47,"tag":1375,"props":2076,"children":2077},{"style":1388},[2078],{"type":53,"value":2079},"    \u003C\u002F",{"type":47,"tag":1375,"props":2081,"children":2082},{"style":1394},[2083],{"type":53,"value":1998},{"type":47,"tag":1375,"props":2085,"children":2086},{"style":1388},[2087],{"type":53,"value":2003},{"type":47,"tag":1375,"props":2089,"children":2091},{"class":1377,"line":2090},12,[2092,2097],{"type":47,"tag":1375,"props":2093,"children":2094},{"style":1749},[2095],{"type":53,"value":2096},"  )",{"type":47,"tag":1375,"props":2098,"children":2099},{"style":1388},[2100],{"type":53,"value":1427},{"type":47,"tag":1375,"props":2102,"children":2104},{"class":1377,"line":2103},13,[2105],{"type":47,"tag":1375,"props":2106,"children":2107},{"style":1388},[2108],{"type":53,"value":1841},{"type":47,"tag":619,"props":2110,"children":2111},{},[2112],{"type":47,"tag":56,"props":2113,"children":2114},{},[2115,2120,2122,2127,2129,2134],{"type":47,"tag":128,"props":2116,"children":2117},{},[2118],{"type":53,"value":2119},"Why?",{"type":53,"value":2121}," In App Router, ",{"type":47,"tag":84,"props":2123,"children":2125},{"className":2124},[],[2126],{"type":53,"value":1524},{"type":53,"value":2128}," is a server component. Client components need ",{"type":47,"tag":84,"props":2130,"children":2132},{"className":2131},[],[2133],{"type":53,"value":963},{"type":53,"value":2135}," to run in the browser. Without this, you get \"Auth UserPool not configured\" errors.",{"type":47,"tag":56,"props":2137,"children":2138},{},[2139,2144,2145,2151],{"type":47,"tag":128,"props":2140,"children":2141},{},[2142],{"type":53,"value":2143},"Vue",{"type":53,"value":1357},{"type":47,"tag":84,"props":2146,"children":2148},{"className":2147},[],[2149],{"type":53,"value":2150},"src\u002Fmain.js",{"type":53,"value":1365},{"type":47,"tag":1035,"props":2153,"children":2156},{"className":2154,"code":1369,"language":2155,"meta":1040,"style":1040},"language-javascript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","javascript",[2157],{"type":47,"tag":84,"props":2158,"children":2159},{"__ignoreMap":1040},[2160,2199,2230],{"type":47,"tag":1375,"props":2161,"children":2162},{"class":1377,"line":1378},[2163,2167,2171,2175,2179,2183,2187,2191,2195],{"type":47,"tag":1375,"props":2164,"children":2165},{"style":1382},[2166],{"type":53,"value":1385},{"type":47,"tag":1375,"props":2168,"children":2169},{"style":1388},[2170],{"type":53,"value":1391},{"type":47,"tag":1375,"props":2172,"children":2173},{"style":1394},[2174],{"type":53,"value":1397},{"type":47,"tag":1375,"props":2176,"children":2177},{"style":1388},[2178],{"type":53,"value":1402},{"type":47,"tag":1375,"props":2180,"children":2181},{"style":1382},[2182],{"type":53,"value":1407},{"type":47,"tag":1375,"props":2184,"children":2185},{"style":1388},[2186],{"type":53,"value":1412},{"type":47,"tag":1375,"props":2188,"children":2189},{"style":1415},[2190],{"type":53,"value":4},{"type":47,"tag":1375,"props":2192,"children":2193},{"style":1388},[2194],{"type":53,"value":1422},{"type":47,"tag":1375,"props":2196,"children":2197},{"style":1388},[2198],{"type":53,"value":1427},{"type":47,"tag":1375,"props":2200,"children":2201},{"class":1377,"line":1430},[2202,2206,2210,2214,2218,2222,2226],{"type":47,"tag":1375,"props":2203,"children":2204},{"style":1382},[2205],{"type":53,"value":1385},{"type":47,"tag":1375,"props":2207,"children":2208},{"style":1394},[2209],{"type":53,"value":1440},{"type":47,"tag":1375,"props":2211,"children":2212},{"style":1382},[2213],{"type":53,"value":1445},{"type":47,"tag":1375,"props":2215,"children":2216},{"style":1388},[2217],{"type":53,"value":1412},{"type":47,"tag":1375,"props":2219,"children":2220},{"style":1415},[2221],{"type":53,"value":1454},{"type":47,"tag":1375,"props":2223,"children":2224},{"style":1388},[2225],{"type":53,"value":1422},{"type":47,"tag":1375,"props":2227,"children":2228},{"style":1388},[2229],{"type":53,"value":1427},{"type":47,"tag":1375,"props":2231,"children":2232},{"class":1377,"line":1465},[2233,2237,2241,2245,2249],{"type":47,"tag":1375,"props":2234,"children":2235},{"style":1394},[2236],{"type":53,"value":1471},{"type":47,"tag":1375,"props":2238,"children":2239},{"style":1388},[2240],{"type":53,"value":250},{"type":47,"tag":1375,"props":2242,"children":2243},{"style":1478},[2244],{"type":53,"value":1481},{"type":47,"tag":1375,"props":2246,"children":2247},{"style":1394},[2248],{"type":53,"value":1486},{"type":47,"tag":1375,"props":2250,"children":2251},{"style":1388},[2252],{"type":53,"value":1427},{"type":47,"tag":56,"props":2254,"children":2255},{},[2256,2261,2262,2268],{"type":47,"tag":128,"props":2257,"children":2258},{},[2259],{"type":53,"value":2260},"Angular",{"type":53,"value":1357},{"type":47,"tag":84,"props":2263,"children":2265},{"className":2264},[],[2266],{"type":53,"value":2267},"src\u002Fmain.ts",{"type":53,"value":1365},{"type":47,"tag":1035,"props":2270,"children":2271},{"className":1368,"code":1369,"language":18,"meta":1040,"style":1040},[2272],{"type":47,"tag":84,"props":2273,"children":2274},{"__ignoreMap":1040},[2275,2314,2345],{"type":47,"tag":1375,"props":2276,"children":2277},{"class":1377,"line":1378},[2278,2282,2286,2290,2294,2298,2302,2306,2310],{"type":47,"tag":1375,"props":2279,"children":2280},{"style":1382},[2281],{"type":53,"value":1385},{"type":47,"tag":1375,"props":2283,"children":2284},{"style":1388},[2285],{"type":53,"value":1391},{"type":47,"tag":1375,"props":2287,"children":2288},{"style":1394},[2289],{"type":53,"value":1397},{"type":47,"tag":1375,"props":2291,"children":2292},{"style":1388},[2293],{"type":53,"value":1402},{"type":47,"tag":1375,"props":2295,"children":2296},{"style":1382},[2297],{"type":53,"value":1407},{"type":47,"tag":1375,"props":2299,"children":2300},{"style":1388},[2301],{"type":53,"value":1412},{"type":47,"tag":1375,"props":2303,"children":2304},{"style":1415},[2305],{"type":53,"value":4},{"type":47,"tag":1375,"props":2307,"children":2308},{"style":1388},[2309],{"type":53,"value":1422},{"type":47,"tag":1375,"props":2311,"children":2312},{"style":1388},[2313],{"type":53,"value":1427},{"type":47,"tag":1375,"props":2315,"children":2316},{"class":1377,"line":1430},[2317,2321,2325,2329,2333,2337,2341],{"type":47,"tag":1375,"props":2318,"children":2319},{"style":1382},[2320],{"type":53,"value":1385},{"type":47,"tag":1375,"props":2322,"children":2323},{"style":1394},[2324],{"type":53,"value":1440},{"type":47,"tag":1375,"props":2326,"children":2327},{"style":1382},[2328],{"type":53,"value":1445},{"type":47,"tag":1375,"props":2330,"children":2331},{"style":1388},[2332],{"type":53,"value":1412},{"type":47,"tag":1375,"props":2334,"children":2335},{"style":1415},[2336],{"type":53,"value":1454},{"type":47,"tag":1375,"props":2338,"children":2339},{"style":1388},[2340],{"type":53,"value":1422},{"type":47,"tag":1375,"props":2342,"children":2343},{"style":1388},[2344],{"type":53,"value":1427},{"type":47,"tag":1375,"props":2346,"children":2347},{"class":1377,"line":1465},[2348,2352,2356,2360,2364],{"type":47,"tag":1375,"props":2349,"children":2350},{"style":1394},[2351],{"type":53,"value":1471},{"type":47,"tag":1375,"props":2353,"children":2354},{"style":1388},[2355],{"type":53,"value":250},{"type":47,"tag":1375,"props":2357,"children":2358},{"style":1478},[2359],{"type":53,"value":1481},{"type":47,"tag":1375,"props":2361,"children":2362},{"style":1394},[2363],{"type":53,"value":1486},{"type":47,"tag":1375,"props":2365,"children":2366},{"style":1388},[2367],{"type":53,"value":1427},{"type":47,"tag":1586,"props":2369,"children":2371},{"id":2370},"nextjs-pages-router",[2372],{"type":53,"value":2373},"Next.js Pages Router",{"type":47,"tag":56,"props":2375,"children":2376},{},[2377,2379,2384,2385,2391],{"type":53,"value":2378},"Pages Router does NOT need ",{"type":47,"tag":84,"props":2380,"children":2382},{"className":2381},[],[2383],{"type":53,"value":1543},{"type":53,"value":1271},{"type":47,"tag":84,"props":2386,"children":2388},{"className":2387},[],[2389],{"type":53,"value":2390},"_app.tsx",{"type":53,"value":2392},". Instead, configure per-file where you need server-side access:",{"type":47,"tag":1035,"props":2394,"children":2396},{"className":1368,"code":2395,"language":18,"meta":1040,"style":1040},"\u002F\u002F pages\u002Fapi\u002Fprotected.ts or getServerSideProps\nimport { Amplify } from 'aws-amplify';\nimport outputs from '@\u002Famplify_outputs.json';\nAmplify.configure(outputs, { ssr: true });\n",[2397],{"type":47,"tag":84,"props":2398,"children":2399},{"__ignoreMap":1040},[2400,2408,2447,2478],{"type":47,"tag":1375,"props":2401,"children":2402},{"class":1377,"line":1378},[2403],{"type":47,"tag":1375,"props":2404,"children":2405},{"style":1609},[2406],{"type":53,"value":2407},"\u002F\u002F pages\u002Fapi\u002Fprotected.ts or getServerSideProps\n",{"type":47,"tag":1375,"props":2409,"children":2410},{"class":1377,"line":1430},[2411,2415,2419,2423,2427,2431,2435,2439,2443],{"type":47,"tag":1375,"props":2412,"children":2413},{"style":1382},[2414],{"type":53,"value":1385},{"type":47,"tag":1375,"props":2416,"children":2417},{"style":1388},[2418],{"type":53,"value":1391},{"type":47,"tag":1375,"props":2420,"children":2421},{"style":1394},[2422],{"type":53,"value":1397},{"type":47,"tag":1375,"props":2424,"children":2425},{"style":1388},[2426],{"type":53,"value":1402},{"type":47,"tag":1375,"props":2428,"children":2429},{"style":1382},[2430],{"type":53,"value":1407},{"type":47,"tag":1375,"props":2432,"children":2433},{"style":1388},[2434],{"type":53,"value":1412},{"type":47,"tag":1375,"props":2436,"children":2437},{"style":1415},[2438],{"type":53,"value":4},{"type":47,"tag":1375,"props":2440,"children":2441},{"style":1388},[2442],{"type":53,"value":1422},{"type":47,"tag":1375,"props":2444,"children":2445},{"style":1388},[2446],{"type":53,"value":1427},{"type":47,"tag":1375,"props":2448,"children":2449},{"class":1377,"line":1465},[2450,2454,2458,2462,2466,2470,2474],{"type":47,"tag":1375,"props":2451,"children":2452},{"style":1382},[2453],{"type":53,"value":1385},{"type":47,"tag":1375,"props":2455,"children":2456},{"style":1394},[2457],{"type":53,"value":1440},{"type":47,"tag":1375,"props":2459,"children":2460},{"style":1382},[2461],{"type":53,"value":1445},{"type":47,"tag":1375,"props":2463,"children":2464},{"style":1388},[2465],{"type":53,"value":1412},{"type":47,"tag":1375,"props":2467,"children":2468},{"style":1415},[2469],{"type":53,"value":1698},{"type":47,"tag":1375,"props":2471,"children":2472},{"style":1388},[2473],{"type":53,"value":1422},{"type":47,"tag":1375,"props":2475,"children":2476},{"style":1388},[2477],{"type":53,"value":1427},{"type":47,"tag":1375,"props":2479,"children":2480},{"class":1377,"line":1676},[2481,2485,2489,2493,2497,2501,2505,2509,2513,2517,2521,2525],{"type":47,"tag":1375,"props":2482,"children":2483},{"style":1394},[2484],{"type":53,"value":1471},{"type":47,"tag":1375,"props":2486,"children":2487},{"style":1388},[2488],{"type":53,"value":250},{"type":47,"tag":1375,"props":2490,"children":2491},{"style":1478},[2492],{"type":53,"value":1481},{"type":47,"tag":1375,"props":2494,"children":2495},{"style":1394},[2496],{"type":53,"value":1737},{"type":47,"tag":1375,"props":2498,"children":2499},{"style":1388},[2500],{"type":53,"value":1742},{"type":47,"tag":1375,"props":2502,"children":2503},{"style":1388},[2504],{"type":53,"value":1391},{"type":47,"tag":1375,"props":2506,"children":2507},{"style":1749},[2508],{"type":53,"value":1752},{"type":47,"tag":1375,"props":2510,"children":2511},{"style":1388},[2512],{"type":53,"value":1365},{"type":47,"tag":1375,"props":2514,"children":2515},{"style":1759},[2516],{"type":53,"value":1762},{"type":47,"tag":1375,"props":2518,"children":2519},{"style":1388},[2520],{"type":53,"value":1402},{"type":47,"tag":1375,"props":2522,"children":2523},{"style":1394},[2524],{"type":53,"value":1771},{"type":47,"tag":1375,"props":2526,"children":2527},{"style":1388},[2528],{"type":53,"value":1427},{"type":47,"tag":619,"props":2530,"children":2531},{},[2532],{"type":47,"tag":56,"props":2533,"children":2534},{},[2535,2540],{"type":47,"tag":128,"props":2536,"children":2537},{},[2538],{"type":53,"value":2539},"Key difference:",{"type":53,"value":2541}," App Router uses a global client component. Pages Router configures per-file.",{"type":47,"tag":56,"props":2543,"children":2544},{},[2545,2551,2553,2558],{"type":47,"tag":84,"props":2546,"children":2548},{"className":2547},[],[2549],{"type":53,"value":2550},"\u003CAuthenticator.Provider>",{"type":53,"value":2552}," is required in ",{"type":47,"tag":84,"props":2554,"children":2556},{"className":2555},[],[2557],{"type":53,"value":1524},{"type":53,"value":2559}," for auth context.",{"type":47,"tag":325,"props":2561,"children":2563},{"id":2562},"react-native",[2564],{"type":53,"value":2565},"React Native",{"type":47,"tag":56,"props":2567,"children":2568},{},[2569,2571,2576],{"type":53,"value":2570},"React Native uses the same ",{"type":47,"tag":84,"props":2572,"children":2574},{"className":2573},[],[2575],{"type":53,"value":4},{"type":53,"value":2577}," JS package as web frameworks (it is\npart of amplify-js, not the native mobile SDKs). All web APIs apply to RN\nwith the additions below.",{"type":47,"tag":1586,"props":2579,"children":2581},{"id":2580},"required-packages",[2582],{"type":53,"value":2583},"Required Packages",{"type":47,"tag":1035,"props":2585,"children":2589},{"className":2586,"code":2587,"language":2588,"meta":1040,"style":1040},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","npm install aws-amplify @aws-amplify\u002Freact-native \\\n  @react-native-async-storage\u002Fasync-storage \\\n  react-native-get-random-values\n","bash",[2590],{"type":47,"tag":84,"props":2591,"children":2592},{"__ignoreMap":1040},[2593,2620,2632],{"type":47,"tag":1375,"props":2594,"children":2595},{"class":1377,"line":1378},[2596,2600,2605,2610,2615],{"type":47,"tag":1375,"props":2597,"children":2598},{"style":1952},[2599],{"type":53,"value":193},{"type":47,"tag":1375,"props":2601,"children":2602},{"style":1415},[2603],{"type":53,"value":2604}," install",{"type":47,"tag":1375,"props":2606,"children":2607},{"style":1415},[2608],{"type":53,"value":2609}," aws-amplify",{"type":47,"tag":1375,"props":2611,"children":2612},{"style":1415},[2613],{"type":53,"value":2614}," @aws-amplify\u002Freact-native",{"type":47,"tag":1375,"props":2616,"children":2617},{"style":1394},[2618],{"type":53,"value":2619}," \\\n",{"type":47,"tag":1375,"props":2621,"children":2622},{"class":1377,"line":1430},[2623,2628],{"type":47,"tag":1375,"props":2624,"children":2625},{"style":1415},[2626],{"type":53,"value":2627},"  @react-native-async-storage\u002Fasync-storage",{"type":47,"tag":1375,"props":2629,"children":2630},{"style":1394},[2631],{"type":53,"value":2619},{"type":47,"tag":1375,"props":2633,"children":2634},{"class":1377,"line":1465},[2635],{"type":47,"tag":1375,"props":2636,"children":2637},{"style":1415},[2638],{"type":53,"value":2639},"  react-native-get-random-values\n",{"type":47,"tag":56,"props":2641,"children":2642},{},[2643,2649,2651,2656],{"type":47,"tag":84,"props":2644,"children":2646},{"className":2645},[],[2647],{"type":53,"value":2648},"@react-native-async-storage\u002Fasync-storage",{"type":53,"value":2650}," is ",{"type":47,"tag":128,"props":2652,"children":2653},{},[2654],{"type":53,"value":2655},"required",{"type":53,"value":2657}," — the Amplify\nSDK uses it for token persistence and will fail at runtime without it.",{"type":47,"tag":1586,"props":2659,"children":2661},{"id":2660},"configure-entry-points",[2662],{"type":53,"value":2663},"Configure Entry Points",{"type":47,"tag":56,"props":2665,"children":2666},{},[2667],{"type":53,"value":2668},"No plugin registration needed — configure only.",{"type":47,"tag":56,"props":2670,"children":2671},{},[2672,2677,2678,2684],{"type":47,"tag":128,"props":2673,"children":2674},{},[2675],{"type":53,"value":2676},"React Native (Expo)",{"type":53,"value":1357},{"type":47,"tag":84,"props":2679,"children":2681},{"className":2680},[],[2682],{"type":53,"value":2683},"App.tsx",{"type":53,"value":1365},{"type":47,"tag":1035,"props":2686,"children":2688},{"className":1368,"code":2687,"language":18,"meta":1040,"style":1040},"import 'react-native-get-random-values';  \u002F\u002F MUST be first\nimport { Amplify } from 'aws-amplify';\nimport outputs from '.\u002Famplify_outputs.json';\nAmplify.configure(outputs);\n",[2689],{"type":47,"tag":84,"props":2690,"children":2691},{"__ignoreMap":1040},[2692,2722,2761,2793],{"type":47,"tag":1375,"props":2693,"children":2694},{"class":1377,"line":1378},[2695,2699,2703,2708,2712,2717],{"type":47,"tag":1375,"props":2696,"children":2697},{"style":1382},[2698],{"type":53,"value":1385},{"type":47,"tag":1375,"props":2700,"children":2701},{"style":1388},[2702],{"type":53,"value":1412},{"type":47,"tag":1375,"props":2704,"children":2705},{"style":1415},[2706],{"type":53,"value":2707},"react-native-get-random-values",{"type":47,"tag":1375,"props":2709,"children":2710},{"style":1388},[2711],{"type":53,"value":1422},{"type":47,"tag":1375,"props":2713,"children":2714},{"style":1388},[2715],{"type":53,"value":2716},";",{"type":47,"tag":1375,"props":2718,"children":2719},{"style":1609},[2720],{"type":53,"value":2721},"  \u002F\u002F MUST be first\n",{"type":47,"tag":1375,"props":2723,"children":2724},{"class":1377,"line":1430},[2725,2729,2733,2737,2741,2745,2749,2753,2757],{"type":47,"tag":1375,"props":2726,"children":2727},{"style":1382},[2728],{"type":53,"value":1385},{"type":47,"tag":1375,"props":2730,"children":2731},{"style":1388},[2732],{"type":53,"value":1391},{"type":47,"tag":1375,"props":2734,"children":2735},{"style":1394},[2736],{"type":53,"value":1397},{"type":47,"tag":1375,"props":2738,"children":2739},{"style":1388},[2740],{"type":53,"value":1402},{"type":47,"tag":1375,"props":2742,"children":2743},{"style":1382},[2744],{"type":53,"value":1407},{"type":47,"tag":1375,"props":2746,"children":2747},{"style":1388},[2748],{"type":53,"value":1412},{"type":47,"tag":1375,"props":2750,"children":2751},{"style":1415},[2752],{"type":53,"value":4},{"type":47,"tag":1375,"props":2754,"children":2755},{"style":1388},[2756],{"type":53,"value":1422},{"type":47,"tag":1375,"props":2758,"children":2759},{"style":1388},[2760],{"type":53,"value":1427},{"type":47,"tag":1375,"props":2762,"children":2763},{"class":1377,"line":1465},[2764,2768,2772,2776,2780,2785,2789],{"type":47,"tag":1375,"props":2765,"children":2766},{"style":1382},[2767],{"type":53,"value":1385},{"type":47,"tag":1375,"props":2769,"children":2770},{"style":1394},[2771],{"type":53,"value":1440},{"type":47,"tag":1375,"props":2773,"children":2774},{"style":1382},[2775],{"type":53,"value":1445},{"type":47,"tag":1375,"props":2777,"children":2778},{"style":1388},[2779],{"type":53,"value":1412},{"type":47,"tag":1375,"props":2781,"children":2782},{"style":1415},[2783],{"type":53,"value":2784},".\u002Famplify_outputs.json",{"type":47,"tag":1375,"props":2786,"children":2787},{"style":1388},[2788],{"type":53,"value":1422},{"type":47,"tag":1375,"props":2790,"children":2791},{"style":1388},[2792],{"type":53,"value":1427},{"type":47,"tag":1375,"props":2794,"children":2795},{"class":1377,"line":1676},[2796,2800,2804,2808,2812],{"type":47,"tag":1375,"props":2797,"children":2798},{"style":1394},[2799],{"type":53,"value":1471},{"type":47,"tag":1375,"props":2801,"children":2802},{"style":1388},[2803],{"type":53,"value":250},{"type":47,"tag":1375,"props":2805,"children":2806},{"style":1478},[2807],{"type":53,"value":1481},{"type":47,"tag":1375,"props":2809,"children":2810},{"style":1394},[2811],{"type":53,"value":1486},{"type":47,"tag":1375,"props":2813,"children":2814},{"style":1388},[2815],{"type":53,"value":1427},{"type":47,"tag":56,"props":2817,"children":2818},{},[2819,2824,2825,2831,2833,2839],{"type":47,"tag":128,"props":2820,"children":2821},{},[2822],{"type":53,"value":2823},"React Native (Bare CLI)",{"type":53,"value":1357},{"type":47,"tag":84,"props":2826,"children":2828},{"className":2827},[],[2829],{"type":53,"value":2830},"index.js",{"type":53,"value":2832}," (before ",{"type":47,"tag":84,"props":2834,"children":2836},{"className":2835},[],[2837],{"type":53,"value":2838},"AppRegistry.registerComponent",{"type":53,"value":2840},"):",{"type":47,"tag":1035,"props":2842,"children":2843},{"className":1368,"code":2687,"language":18,"meta":1040,"style":1040},[2844],{"type":47,"tag":84,"props":2845,"children":2846},{"__ignoreMap":1040},[2847,2874,2913,2944],{"type":47,"tag":1375,"props":2848,"children":2849},{"class":1377,"line":1378},[2850,2854,2858,2862,2866,2870],{"type":47,"tag":1375,"props":2851,"children":2852},{"style":1382},[2853],{"type":53,"value":1385},{"type":47,"tag":1375,"props":2855,"children":2856},{"style":1388},[2857],{"type":53,"value":1412},{"type":47,"tag":1375,"props":2859,"children":2860},{"style":1415},[2861],{"type":53,"value":2707},{"type":47,"tag":1375,"props":2863,"children":2864},{"style":1388},[2865],{"type":53,"value":1422},{"type":47,"tag":1375,"props":2867,"children":2868},{"style":1388},[2869],{"type":53,"value":2716},{"type":47,"tag":1375,"props":2871,"children":2872},{"style":1609},[2873],{"type":53,"value":2721},{"type":47,"tag":1375,"props":2875,"children":2876},{"class":1377,"line":1430},[2877,2881,2885,2889,2893,2897,2901,2905,2909],{"type":47,"tag":1375,"props":2878,"children":2879},{"style":1382},[2880],{"type":53,"value":1385},{"type":47,"tag":1375,"props":2882,"children":2883},{"style":1388},[2884],{"type":53,"value":1391},{"type":47,"tag":1375,"props":2886,"children":2887},{"style":1394},[2888],{"type":53,"value":1397},{"type":47,"tag":1375,"props":2890,"children":2891},{"style":1388},[2892],{"type":53,"value":1402},{"type":47,"tag":1375,"props":2894,"children":2895},{"style":1382},[2896],{"type":53,"value":1407},{"type":47,"tag":1375,"props":2898,"children":2899},{"style":1388},[2900],{"type":53,"value":1412},{"type":47,"tag":1375,"props":2902,"children":2903},{"style":1415},[2904],{"type":53,"value":4},{"type":47,"tag":1375,"props":2906,"children":2907},{"style":1388},[2908],{"type":53,"value":1422},{"type":47,"tag":1375,"props":2910,"children":2911},{"style":1388},[2912],{"type":53,"value":1427},{"type":47,"tag":1375,"props":2914,"children":2915},{"class":1377,"line":1465},[2916,2920,2924,2928,2932,2936,2940],{"type":47,"tag":1375,"props":2917,"children":2918},{"style":1382},[2919],{"type":53,"value":1385},{"type":47,"tag":1375,"props":2921,"children":2922},{"style":1394},[2923],{"type":53,"value":1440},{"type":47,"tag":1375,"props":2925,"children":2926},{"style":1382},[2927],{"type":53,"value":1445},{"type":47,"tag":1375,"props":2929,"children":2930},{"style":1388},[2931],{"type":53,"value":1412},{"type":47,"tag":1375,"props":2933,"children":2934},{"style":1415},[2935],{"type":53,"value":2784},{"type":47,"tag":1375,"props":2937,"children":2938},{"style":1388},[2939],{"type":53,"value":1422},{"type":47,"tag":1375,"props":2941,"children":2942},{"style":1388},[2943],{"type":53,"value":1427},{"type":47,"tag":1375,"props":2945,"children":2946},{"class":1377,"line":1676},[2947,2951,2955,2959,2963],{"type":47,"tag":1375,"props":2948,"children":2949},{"style":1394},[2950],{"type":53,"value":1471},{"type":47,"tag":1375,"props":2952,"children":2953},{"style":1388},[2954],{"type":53,"value":250},{"type":47,"tag":1375,"props":2956,"children":2957},{"style":1478},[2958],{"type":53,"value":1481},{"type":47,"tag":1375,"props":2960,"children":2961},{"style":1394},[2962],{"type":53,"value":1486},{"type":47,"tag":1375,"props":2964,"children":2965},{"style":1388},[2966],{"type":53,"value":1427},{"type":47,"tag":1586,"props":2968,"children":2970},{"id":2969},"react-native-pitfalls",[2971],{"type":53,"value":2972},"React Native Pitfalls",{"type":47,"tag":69,"props":2974,"children":2975},{},[2976,2999],{"type":47,"tag":73,"props":2977,"children":2978},{},[2979,2984,2985,2990,2992,2997],{"type":47,"tag":128,"props":2980,"children":2981},{},[2982],{"type":53,"value":2983},"Import order:",{"type":53,"value":888},{"type":47,"tag":84,"props":2986,"children":2988},{"className":2987},[],[2989],{"type":53,"value":2707},{"type":53,"value":2991}," must be the FIRST\nimport in the entry file, before ",{"type":47,"tag":84,"props":2993,"children":2995},{"className":2994},[],[2996],{"type":53,"value":4},{"type":53,"value":2998},". Reversing the order causes\ncryptographic failures at runtime.",{"type":47,"tag":73,"props":3000,"children":3001},{},[3002,3007,3009,3014],{"type":47,"tag":128,"props":3003,"children":3004},{},[3005],{"type":53,"value":3006},"Missing AsyncStorage:",{"type":53,"value":3008}," Without\n",{"type":47,"tag":84,"props":3010,"children":3012},{"className":3011},[],[3013],{"type":53,"value":2648},{"type":53,"value":3015},", auth tokens are not persisted\nand users must re-authenticate on every app restart.",{"type":47,"tag":325,"props":3017,"children":3019},{"id":3018},"sveltekit",[3020],{"type":53,"value":3021},"SvelteKit",{"type":47,"tag":56,"props":3023,"children":3024},{},[3025],{"type":53,"value":3026},"Configure Amplify in the client hooks file:",{"type":47,"tag":1035,"props":3028,"children":3030},{"className":1368,"code":3029,"language":18,"meta":1040,"style":1040},"\u002F\u002F src\u002Fhooks.client.ts\nimport { Amplify } from 'aws-amplify';\nimport outputs from '..\u002Famplify_outputs.json';\n\nAmplify.configure(outputs);\n",[3031],{"type":47,"tag":84,"props":3032,"children":3033},{"__ignoreMap":1040},[3034,3042,3081,3112,3119],{"type":47,"tag":1375,"props":3035,"children":3036},{"class":1377,"line":1378},[3037],{"type":47,"tag":1375,"props":3038,"children":3039},{"style":1609},[3040],{"type":53,"value":3041},"\u002F\u002F src\u002Fhooks.client.ts\n",{"type":47,"tag":1375,"props":3043,"children":3044},{"class":1377,"line":1430},[3045,3049,3053,3057,3061,3065,3069,3073,3077],{"type":47,"tag":1375,"props":3046,"children":3047},{"style":1382},[3048],{"type":53,"value":1385},{"type":47,"tag":1375,"props":3050,"children":3051},{"style":1388},[3052],{"type":53,"value":1391},{"type":47,"tag":1375,"props":3054,"children":3055},{"style":1394},[3056],{"type":53,"value":1397},{"type":47,"tag":1375,"props":3058,"children":3059},{"style":1388},[3060],{"type":53,"value":1402},{"type":47,"tag":1375,"props":3062,"children":3063},{"style":1382},[3064],{"type":53,"value":1407},{"type":47,"tag":1375,"props":3066,"children":3067},{"style":1388},[3068],{"type":53,"value":1412},{"type":47,"tag":1375,"props":3070,"children":3071},{"style":1415},[3072],{"type":53,"value":4},{"type":47,"tag":1375,"props":3074,"children":3075},{"style":1388},[3076],{"type":53,"value":1422},{"type":47,"tag":1375,"props":3078,"children":3079},{"style":1388},[3080],{"type":53,"value":1427},{"type":47,"tag":1375,"props":3082,"children":3083},{"class":1377,"line":1465},[3084,3088,3092,3096,3100,3104,3108],{"type":47,"tag":1375,"props":3085,"children":3086},{"style":1382},[3087],{"type":53,"value":1385},{"type":47,"tag":1375,"props":3089,"children":3090},{"style":1394},[3091],{"type":53,"value":1440},{"type":47,"tag":1375,"props":3093,"children":3094},{"style":1382},[3095],{"type":53,"value":1445},{"type":47,"tag":1375,"props":3097,"children":3098},{"style":1388},[3099],{"type":53,"value":1412},{"type":47,"tag":1375,"props":3101,"children":3102},{"style":1415},[3103],{"type":53,"value":1454},{"type":47,"tag":1375,"props":3105,"children":3106},{"style":1388},[3107],{"type":53,"value":1422},{"type":47,"tag":1375,"props":3109,"children":3110},{"style":1388},[3111],{"type":53,"value":1427},{"type":47,"tag":1375,"props":3113,"children":3114},{"class":1377,"line":1676},[3115],{"type":47,"tag":1375,"props":3116,"children":3117},{"emptyLinePlaceholder":1713},[3118],{"type":53,"value":1716},{"type":47,"tag":1375,"props":3120,"children":3121},{"class":1377,"line":1709},[3122,3126,3130,3134,3138],{"type":47,"tag":1375,"props":3123,"children":3124},{"style":1394},[3125],{"type":53,"value":1471},{"type":47,"tag":1375,"props":3127,"children":3128},{"style":1388},[3129],{"type":53,"value":250},{"type":47,"tag":1375,"props":3131,"children":3132},{"style":1478},[3133],{"type":53,"value":1481},{"type":47,"tag":1375,"props":3135,"children":3136},{"style":1394},[3137],{"type":53,"value":1486},{"type":47,"tag":1375,"props":3139,"children":3140},{"style":1388},[3141],{"type":53,"value":1427},{"type":47,"tag":619,"props":3143,"children":3144},{},[3145],{"type":47,"tag":56,"props":3146,"children":3147},{},[3148,3152,3154,3160],{"type":47,"tag":128,"props":3149,"children":3150},{},[3151],{"type":53,"value":826},{"type":53,"value":3153}," No ",{"type":47,"tag":84,"props":3155,"children":3157},{"className":3156},[],[3158],{"type":53,"value":3159},"@aws-amplify\u002Fui-*",{"type":53,"value":3161}," components exist for Svelte. Use core APIs directly.",{"type":47,"tag":325,"props":3163,"children":3165},{"id":3164},"unsupported-frameworks-astro-solid-etc",[3166],{"type":53,"value":3167},"Unsupported Frameworks (Astro, Solid, etc.)",{"type":47,"tag":56,"props":3169,"children":3170},{},[3171],{"type":53,"value":3172},"For frameworks without official Amplify support:",{"type":47,"tag":1243,"props":3174,"children":3175},{},[3176,3189],{"type":47,"tag":73,"props":3177,"children":3178},{},[3179,3181,3187],{"type":53,"value":3180},"Use ",{"type":47,"tag":84,"props":3182,"children":3184},{"className":3183},[],[3185],{"type":53,"value":3186},"npm create amplify@latest -y",{"type":53,"value":3188}," to scaffold the backend (works in any project)",{"type":47,"tag":73,"props":3190,"children":3191},{},[3192,3194,3199],{"type":53,"value":3193},"Configure Amplify inside a ",{"type":47,"tag":128,"props":3195,"children":3196},{},[3197],{"type":53,"value":3198},"client-side component",{"type":53,"value":3200}," (not at build time)",{"type":47,"tag":1586,"props":3202,"children":3204},{"id":3203},"astro",[3205],{"type":53,"value":3206},"Astro",{"type":47,"tag":56,"props":3208,"children":3209},{},[3210,3212,3217],{"type":53,"value":3211},"Amplify is ",{"type":47,"tag":128,"props":3213,"children":3214},{},[3215],{"type":53,"value":3216},"client-side only",{"type":53,"value":3218}," in Astro. Create a React component (no Astro syntax):",{"type":47,"tag":1035,"props":3220,"children":3222},{"className":1368,"code":3221,"language":18,"meta":1040,"style":1040},"\u002F\u002F src\u002Fcomponents\u002FAuthenticatedApp.tsx\nimport { Amplify } from 'aws-amplify';\nimport { Authenticator } from '@aws-amplify\u002Fui-react';\nimport outputs from '..\u002Famplify_outputs.json';\n\nAmplify.configure(outputs);\n\nexport default function AuthenticatedApp() {\n  return (\n    \u003CAuthenticator>\n      {({ signOut, user }) => \u003Cmain>Hello {user?.username}\u003C\u002Fmain>}\n    \u003C\u002FAuthenticator>\n  );\n}\n",[3223],{"type":47,"tag":84,"props":3224,"children":3225},{"__ignoreMap":1040},[3226,3234,3273,3313,3344,3351,3374,3381,3409,3420,3436,3530,3545,3556],{"type":47,"tag":1375,"props":3227,"children":3228},{"class":1377,"line":1378},[3229],{"type":47,"tag":1375,"props":3230,"children":3231},{"style":1609},[3232],{"type":53,"value":3233},"\u002F\u002F src\u002Fcomponents\u002FAuthenticatedApp.tsx\n",{"type":47,"tag":1375,"props":3235,"children":3236},{"class":1377,"line":1430},[3237,3241,3245,3249,3253,3257,3261,3265,3269],{"type":47,"tag":1375,"props":3238,"children":3239},{"style":1382},[3240],{"type":53,"value":1385},{"type":47,"tag":1375,"props":3242,"children":3243},{"style":1388},[3244],{"type":53,"value":1391},{"type":47,"tag":1375,"props":3246,"children":3247},{"style":1394},[3248],{"type":53,"value":1397},{"type":47,"tag":1375,"props":3250,"children":3251},{"style":1388},[3252],{"type":53,"value":1402},{"type":47,"tag":1375,"props":3254,"children":3255},{"style":1382},[3256],{"type":53,"value":1407},{"type":47,"tag":1375,"props":3258,"children":3259},{"style":1388},[3260],{"type":53,"value":1412},{"type":47,"tag":1375,"props":3262,"children":3263},{"style":1415},[3264],{"type":53,"value":4},{"type":47,"tag":1375,"props":3266,"children":3267},{"style":1388},[3268],{"type":53,"value":1422},{"type":47,"tag":1375,"props":3270,"children":3271},{"style":1388},[3272],{"type":53,"value":1427},{"type":47,"tag":1375,"props":3274,"children":3275},{"class":1377,"line":1465},[3276,3280,3284,3289,3293,3297,3301,3305,3309],{"type":47,"tag":1375,"props":3277,"children":3278},{"style":1382},[3279],{"type":53,"value":1385},{"type":47,"tag":1375,"props":3281,"children":3282},{"style":1388},[3283],{"type":53,"value":1391},{"type":47,"tag":1375,"props":3285,"children":3286},{"style":1394},[3287],{"type":53,"value":3288}," Authenticator",{"type":47,"tag":1375,"props":3290,"children":3291},{"style":1388},[3292],{"type":53,"value":1402},{"type":47,"tag":1375,"props":3294,"children":3295},{"style":1382},[3296],{"type":53,"value":1407},{"type":47,"tag":1375,"props":3298,"children":3299},{"style":1388},[3300],{"type":53,"value":1412},{"type":47,"tag":1375,"props":3302,"children":3303},{"style":1415},[3304],{"type":53,"value":1164},{"type":47,"tag":1375,"props":3306,"children":3307},{"style":1388},[3308],{"type":53,"value":1422},{"type":47,"tag":1375,"props":3310,"children":3311},{"style":1388},[3312],{"type":53,"value":1427},{"type":47,"tag":1375,"props":3314,"children":3315},{"class":1377,"line":1676},[3316,3320,3324,3328,3332,3336,3340],{"type":47,"tag":1375,"props":3317,"children":3318},{"style":1382},[3319],{"type":53,"value":1385},{"type":47,"tag":1375,"props":3321,"children":3322},{"style":1394},[3323],{"type":53,"value":1440},{"type":47,"tag":1375,"props":3325,"children":3326},{"style":1382},[3327],{"type":53,"value":1445},{"type":47,"tag":1375,"props":3329,"children":3330},{"style":1388},[3331],{"type":53,"value":1412},{"type":47,"tag":1375,"props":3333,"children":3334},{"style":1415},[3335],{"type":53,"value":1454},{"type":47,"tag":1375,"props":3337,"children":3338},{"style":1388},[3339],{"type":53,"value":1422},{"type":47,"tag":1375,"props":3341,"children":3342},{"style":1388},[3343],{"type":53,"value":1427},{"type":47,"tag":1375,"props":3345,"children":3346},{"class":1377,"line":1709},[3347],{"type":47,"tag":1375,"props":3348,"children":3349},{"emptyLinePlaceholder":1713},[3350],{"type":53,"value":1716},{"type":47,"tag":1375,"props":3352,"children":3353},{"class":1377,"line":1719},[3354,3358,3362,3366,3370],{"type":47,"tag":1375,"props":3355,"children":3356},{"style":1394},[3357],{"type":53,"value":1471},{"type":47,"tag":1375,"props":3359,"children":3360},{"style":1388},[3361],{"type":53,"value":250},{"type":47,"tag":1375,"props":3363,"children":3364},{"style":1478},[3365],{"type":53,"value":1481},{"type":47,"tag":1375,"props":3367,"children":3368},{"style":1394},[3369],{"type":53,"value":1486},{"type":47,"tag":1375,"props":3371,"children":3372},{"style":1388},[3373],{"type":53,"value":1427},{"type":47,"tag":1375,"props":3375,"children":3376},{"class":1377,"line":1778},[3377],{"type":47,"tag":1375,"props":3378,"children":3379},{"emptyLinePlaceholder":1713},[3380],{"type":53,"value":1716},{"type":47,"tag":1375,"props":3382,"children":3383},{"class":1377,"line":1786},[3384,3388,3392,3396,3401,3405],{"type":47,"tag":1375,"props":3385,"children":3386},{"style":1382},[3387],{"type":53,"value":1792},{"type":47,"tag":1375,"props":3389,"children":3390},{"style":1382},[3391],{"type":53,"value":1797},{"type":47,"tag":1375,"props":3393,"children":3394},{"style":1800},[3395],{"type":53,"value":1803},{"type":47,"tag":1375,"props":3397,"children":3398},{"style":1478},[3399],{"type":53,"value":3400}," AuthenticatedApp",{"type":47,"tag":1375,"props":3402,"children":3403},{"style":1388},[3404],{"type":53,"value":1813},{"type":47,"tag":1375,"props":3406,"children":3407},{"style":1388},[3408],{"type":53,"value":1818},{"type":47,"tag":1375,"props":3410,"children":3411},{"class":1377,"line":1821},[3412,3416],{"type":47,"tag":1375,"props":3413,"children":3414},{"style":1382},[3415],{"type":53,"value":1827},{"type":47,"tag":1375,"props":3417,"children":3418},{"style":1749},[3419],{"type":53,"value":1985},{"type":47,"tag":1375,"props":3421,"children":3422},{"class":1377,"line":1835},[3423,3427,3432],{"type":47,"tag":1375,"props":3424,"children":3425},{"style":1749},[3426],{"type":53,"value":1993},{"type":47,"tag":1375,"props":3428,"children":3429},{"style":1952},[3430],{"type":53,"value":3431},"Authenticator",{"type":47,"tag":1375,"props":3433,"children":3434},{"style":1749},[3435],{"type":53,"value":2003},{"type":47,"tag":1375,"props":3437,"children":3438},{"class":1377,"line":2073},[3439,3444,3449,3454,3459,3463,3468,3472,3477,3482,3487,3492,3497,3502,3506,3511,3516,3521,3525],{"type":47,"tag":1375,"props":3440,"children":3441},{"style":1388},[3442],{"type":53,"value":3443},"      {",{"type":47,"tag":1375,"props":3445,"children":3446},{"style":1749},[3447],{"type":53,"value":3448},"(",{"type":47,"tag":1375,"props":3450,"children":3451},{"style":1388},[3452],{"type":53,"value":3453},"{",{"type":47,"tag":1375,"props":3455,"children":3456},{"style":1929},[3457],{"type":53,"value":3458}," signOut",{"type":47,"tag":1375,"props":3460,"children":3461},{"style":1388},[3462],{"type":53,"value":1742},{"type":47,"tag":1375,"props":3464,"children":3465},{"style":1929},[3466],{"type":53,"value":3467}," user",{"type":47,"tag":1375,"props":3469,"children":3470},{"style":1388},[3471],{"type":53,"value":1402},{"type":47,"tag":1375,"props":3473,"children":3474},{"style":1749},[3475],{"type":53,"value":3476},") ",{"type":47,"tag":1375,"props":3478,"children":3479},{"style":1388},[3480],{"type":53,"value":3481},"=>",{"type":47,"tag":1375,"props":3483,"children":3484},{"style":1749},[3485],{"type":53,"value":3486}," \u003C",{"type":47,"tag":1375,"props":3488,"children":3489},{"style":1952},[3490],{"type":53,"value":3491},"main",{"type":47,"tag":1375,"props":3493,"children":3494},{"style":1749},[3495],{"type":53,"value":3496},">",{"type":47,"tag":1375,"props":3498,"children":3499},{"style":1394},[3500],{"type":53,"value":3501},"Hello",{"type":47,"tag":1375,"props":3503,"children":3504},{"style":1388},[3505],{"type":53,"value":1391},{"type":47,"tag":1375,"props":3507,"children":3508},{"style":1749},[3509],{"type":53,"value":3510},"user?.",{"type":47,"tag":1375,"props":3512,"children":3513},{"style":1394},[3514],{"type":53,"value":3515},"username",{"type":47,"tag":1375,"props":3517,"children":3518},{"style":1388},[3519],{"type":53,"value":3520},"}\u003C\u002F",{"type":47,"tag":1375,"props":3522,"children":3523},{"style":1394},[3524],{"type":53,"value":3491},{"type":47,"tag":1375,"props":3526,"children":3527},{"style":1388},[3528],{"type":53,"value":3529},">}\n",{"type":47,"tag":1375,"props":3531,"children":3532},{"class":1377,"line":2090},[3533,3537,3541],{"type":47,"tag":1375,"props":3534,"children":3535},{"style":1388},[3536],{"type":53,"value":2079},{"type":47,"tag":1375,"props":3538,"children":3539},{"style":1394},[3540],{"type":53,"value":3431},{"type":47,"tag":1375,"props":3542,"children":3543},{"style":1388},[3544],{"type":53,"value":2003},{"type":47,"tag":1375,"props":3546,"children":3547},{"class":1377,"line":2103},[3548,3552],{"type":47,"tag":1375,"props":3549,"children":3550},{"style":1749},[3551],{"type":53,"value":2096},{"type":47,"tag":1375,"props":3553,"children":3554},{"style":1388},[3555],{"type":53,"value":1427},{"type":47,"tag":1375,"props":3557,"children":3559},{"class":1377,"line":3558},14,[3560],{"type":47,"tag":1375,"props":3561,"children":3562},{"style":1388},[3563],{"type":53,"value":1841},{"type":47,"tag":56,"props":3565,"children":3566},{},[3567,3569,3575],{"type":53,"value":3568},"Use in an Astro page with ",{"type":47,"tag":84,"props":3570,"children":3572},{"className":3571},[],[3573],{"type":53,"value":3574},"client:only",{"type":53,"value":1365},{"type":47,"tag":1035,"props":3577,"children":3580},{"className":3578,"code":3579,"language":3203,"meta":1040,"style":1040},"language-astro shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","---\n\u002F\u002F src\u002Fpages\u002Findex.astro — no Amplify imports here\n---\n\u003Chtml>\n  \u003Cbody>\n    \u003CAuthenticatedApp client:only=\"react\" \u002F>\n  \u003C\u002Fbody>\n\u003C\u002Fhtml>\n",[3581],{"type":47,"tag":84,"props":3582,"children":3583},{"__ignoreMap":1040},[3584,3592,3600,3607,3615,3623,3631,3639],{"type":47,"tag":1375,"props":3585,"children":3586},{"class":1377,"line":1378},[3587],{"type":47,"tag":1375,"props":3588,"children":3589},{},[3590],{"type":53,"value":3591},"---\n",{"type":47,"tag":1375,"props":3593,"children":3594},{"class":1377,"line":1430},[3595],{"type":47,"tag":1375,"props":3596,"children":3597},{},[3598],{"type":53,"value":3599},"\u002F\u002F src\u002Fpages\u002Findex.astro — no Amplify imports here\n",{"type":47,"tag":1375,"props":3601,"children":3602},{"class":1377,"line":1465},[3603],{"type":47,"tag":1375,"props":3604,"children":3605},{},[3606],{"type":53,"value":3591},{"type":47,"tag":1375,"props":3608,"children":3609},{"class":1377,"line":1676},[3610],{"type":47,"tag":1375,"props":3611,"children":3612},{},[3613],{"type":53,"value":3614},"\u003Chtml>\n",{"type":47,"tag":1375,"props":3616,"children":3617},{"class":1377,"line":1709},[3618],{"type":47,"tag":1375,"props":3619,"children":3620},{},[3621],{"type":53,"value":3622},"  \u003Cbody>\n",{"type":47,"tag":1375,"props":3624,"children":3625},{"class":1377,"line":1719},[3626],{"type":47,"tag":1375,"props":3627,"children":3628},{},[3629],{"type":53,"value":3630},"    \u003CAuthenticatedApp client:only=\"react\" \u002F>\n",{"type":47,"tag":1375,"props":3632,"children":3633},{"class":1377,"line":1778},[3634],{"type":47,"tag":1375,"props":3635,"children":3636},{},[3637],{"type":53,"value":3638},"  \u003C\u002Fbody>\n",{"type":47,"tag":1375,"props":3640,"children":3641},{"class":1377,"line":1786},[3642],{"type":47,"tag":1375,"props":3643,"children":3644},{},[3645],{"type":53,"value":3646},"\u003C\u002Fhtml>\n",{"type":47,"tag":619,"props":3648,"children":3649},{},[3650],{"type":47,"tag":56,"props":3651,"children":3652},{},[3653,3664,3666,3672],{"type":47,"tag":128,"props":3654,"children":3655},{},[3656,3658],{"type":53,"value":3657},"Must use ",{"type":47,"tag":84,"props":3659,"children":3661},{"className":3660},[],[3662],{"type":53,"value":3663},"client:only=\"react\"",{"type":53,"value":3665}," (NOT ",{"type":47,"tag":84,"props":3667,"children":3669},{"className":3668},[],[3670],{"type":53,"value":3671},"client:load",{"type":53,"value":3673},") to avoid SSR hydration errors.",{"type":47,"tag":62,"props":3675,"children":3677},{"id":3676},"links",[3678],{"type":53,"value":3679},"Links",{"type":47,"tag":619,"props":3681,"children":3682},{},[3683],{"type":47,"tag":56,"props":3684,"children":3685},{},[3686,3688,3694,3696,3702],{"type":53,"value":3687},"All documentation links use ",{"type":47,"tag":84,"props":3689,"children":3691},{"className":3690},[],[3692],{"type":53,"value":3693},"react",{"type":53,"value":3695}," as the default platform slug. Replace ",{"type":47,"tag":84,"props":3697,"children":3699},{"className":3698},[],[3700],{"type":53,"value":3701},"\u002Freact\u002F",{"type":53,"value":3703}," in any URL with your target framework:",{"type":47,"tag":332,"props":3705,"children":3706},{},[3707,3723],{"type":47,"tag":336,"props":3708,"children":3709},{},[3710],{"type":47,"tag":340,"props":3711,"children":3712},{},[3713,3718],{"type":47,"tag":344,"props":3714,"children":3715},{},[3716],{"type":53,"value":3717},"Framework",{"type":47,"tag":344,"props":3719,"children":3720},{},[3721],{"type":53,"value":3722},"Slug",{"type":47,"tag":355,"props":3724,"children":3725},{},[3726,3741,3758,3774,3790,3805,3822,3839],{"type":47,"tag":340,"props":3727,"children":3728},{},[3729,3733],{"type":47,"tag":362,"props":3730,"children":3731},{},[3732],{"type":53,"value":139},{"type":47,"tag":362,"props":3734,"children":3735},{},[3736],{"type":47,"tag":84,"props":3737,"children":3739},{"className":3738},[],[3740],{"type":53,"value":3693},{"type":47,"tag":340,"props":3742,"children":3743},{},[3744,3749],{"type":47,"tag":362,"props":3745,"children":3746},{},[3747],{"type":53,"value":3748},"Next.js",{"type":47,"tag":362,"props":3750,"children":3751},{},[3752],{"type":47,"tag":84,"props":3753,"children":3755},{"className":3754},[],[3756],{"type":53,"value":3757},"nextjs",{"type":47,"tag":340,"props":3759,"children":3760},{},[3761,3765],{"type":47,"tag":362,"props":3762,"children":3763},{},[3764],{"type":53,"value":2143},{"type":47,"tag":362,"props":3766,"children":3767},{},[3768],{"type":47,"tag":84,"props":3769,"children":3771},{"className":3770},[],[3772],{"type":53,"value":3773},"vue",{"type":47,"tag":340,"props":3775,"children":3776},{},[3777,3781],{"type":47,"tag":362,"props":3778,"children":3779},{},[3780],{"type":53,"value":2260},{"type":47,"tag":362,"props":3782,"children":3783},{},[3784],{"type":47,"tag":84,"props":3785,"children":3787},{"className":3786},[],[3788],{"type":53,"value":3789},"angular",{"type":47,"tag":340,"props":3791,"children":3792},{},[3793,3797],{"type":47,"tag":362,"props":3794,"children":3795},{},[3796],{"type":53,"value":2565},{"type":47,"tag":362,"props":3798,"children":3799},{},[3800],{"type":47,"tag":84,"props":3801,"children":3803},{"className":3802},[],[3804],{"type":53,"value":2562},{"type":47,"tag":340,"props":3806,"children":3807},{},[3808,3813],{"type":47,"tag":362,"props":3809,"children":3810},{},[3811],{"type":53,"value":3812},"Flutter",{"type":47,"tag":362,"props":3814,"children":3815},{},[3816],{"type":47,"tag":84,"props":3817,"children":3819},{"className":3818},[],[3820],{"type":53,"value":3821},"flutter",{"type":47,"tag":340,"props":3823,"children":3824},{},[3825,3830],{"type":47,"tag":362,"props":3826,"children":3827},{},[3828],{"type":53,"value":3829},"Swift",{"type":47,"tag":362,"props":3831,"children":3832},{},[3833],{"type":47,"tag":84,"props":3834,"children":3836},{"className":3835},[],[3837],{"type":53,"value":3838},"swift",{"type":47,"tag":340,"props":3840,"children":3841},{},[3842,3847],{"type":47,"tag":362,"props":3843,"children":3844},{},[3845],{"type":53,"value":3846},"Android",{"type":47,"tag":362,"props":3848,"children":3849},{},[3850],{"type":47,"tag":84,"props":3851,"children":3853},{"className":3852},[],[3854],{"type":53,"value":3855},"android",{"type":47,"tag":69,"props":3857,"children":3858},{},[3859,3870,3880,3890,3900,3910,3920,3930,3940],{"type":47,"tag":73,"props":3860,"children":3861},{},[3862],{"type":47,"tag":376,"props":3863,"children":3867},{"href":3864,"rel":3865},"https:\u002F\u002Fdocs.amplify.aws\u002Fai\u002Fllms.txt",[3866],"nofollow",[3868],{"type":53,"value":3869},"Amplify Docs for LLMs",{"type":47,"tag":73,"props":3871,"children":3872},{},[3873],{"type":47,"tag":376,"props":3874,"children":3877},{"href":3875,"rel":3876},"https:\u002F\u002Fdocs.amplify.aws\u002F",[3866],[3878],{"type":53,"value":3879},"Amplify Docs",{"type":47,"tag":73,"props":3881,"children":3882},{},[3883],{"type":47,"tag":376,"props":3884,"children":3887},{"href":3885,"rel":3886},"https:\u002F\u002Fdocs.amplify.aws\u002Freact\u002Fhow-amplify-works\u002F",[3866],[3888],{"type":53,"value":3889},"How Amplify Works",{"type":47,"tag":73,"props":3891,"children":3892},{},[3893],{"type":47,"tag":376,"props":3894,"children":3897},{"href":3895,"rel":3896},"https:\u002F\u002Fdocs.amplify.aws\u002Freact\u002Freference\u002Fcli-commands\u002F",[3866],[3898],{"type":53,"value":3899},"CLI Commands",{"type":47,"tag":73,"props":3901,"children":3902},{},[3903],{"type":47,"tag":376,"props":3904,"children":3907},{"href":3905,"rel":3906},"https:\u002F\u002Fdocs.amplify.aws\u002Freact\u002Fstart\u002Fquickstart\u002F",[3866],[3908],{"type":53,"value":3909},"React Quickstart",{"type":47,"tag":73,"props":3911,"children":3912},{},[3913],{"type":47,"tag":376,"props":3914,"children":3917},{"href":3915,"rel":3916},"https:\u002F\u002Fdocs.amplify.aws\u002Fnextjs\u002Fstart\u002Fquickstart\u002F",[3866],[3918],{"type":53,"value":3919},"Next.js Quickstart",{"type":47,"tag":73,"props":3921,"children":3922},{},[3923],{"type":47,"tag":376,"props":3924,"children":3927},{"href":3925,"rel":3926},"https:\u002F\u002Fdocs.amplify.aws\u002Fangular\u002Fstart\u002Fquickstart\u002F",[3866],[3928],{"type":53,"value":3929},"Angular Quickstart",{"type":47,"tag":73,"props":3931,"children":3932},{},[3933],{"type":47,"tag":376,"props":3934,"children":3937},{"href":3935,"rel":3936},"https:\u002F\u002Fdocs.amplify.aws\u002Fvue\u002Fstart\u002Fquickstart\u002F",[3866],[3938],{"type":53,"value":3939},"Vue Quickstart",{"type":47,"tag":73,"props":3941,"children":3942},{},[3943],{"type":47,"tag":376,"props":3944,"children":3947},{"href":3945,"rel":3946},"https:\u002F\u002Fdocs.amplify.aws\u002Freact-native\u002Fstart\u002Fquickstart\u002F",[3866],[3948],{"type":53,"value":3949},"React Native Quickstart",{"type":47,"tag":3951,"props":3952,"children":3953},"style",{},[3954],{"type":53,"value":3955},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":3957,"total":4058},[3958,3975,3989,4004,4017,4027,4042],{"slug":3959,"name":3959,"fn":3960,"description":3961,"org":3962,"tags":3963,"stars":30,"repoUrl":31,"updatedAt":3974},"agents-build","add capabilities to existing agent projects","Use when adding capabilities to an existing agent project — memory, app integration, VPC, multi-agent, migration, model changes, browser, code interpreter, or resource removal. Triggers on: \"add memory\", \"remember across sessions\", \"call agent from app\", \"invoke agent from code\", \"auth to call agent\", \"streaming responses\", \"VPC\", \"VPC connectivity\", \"VPC error\", \"can't reach from VPC\", \"multi-agent\", \"A2A\", \"A2A auth\", \"orchestrator not delegating\", \"specialist not called\", \"migrate Bedrock Agent\", \"after import\", \"migration issue\", \"framework for migration\", \"change model\", \"browser tool\", \"code interpreter\", \"delete agent\", \"tear down\", \"agentcore remove\", \"cross-account memory\", \"resource-based policy on memory\", \"pay for x402 content\", \"402 Payment Required\", \"microtransactions\", \"paid API or tool\". Not for connecting to external APIs via Gateway — use agents-connect. Not for scaffolding a new project — use agents-get-started. Not for CLI\u002Fdev server errors — use agents-debug. Strands vs LangGraph in a migration context routes here.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3964,3967,3970,3971],{"name":3965,"slug":3966,"type":15},"Agents","agents",{"name":3968,"slug":3969,"type":15},"Automation","automation",{"name":26,"slug":8,"type":15},{"name":3972,"slug":3973,"type":15},"Engineering","engineering","2026-07-12T08:42:53.812877",{"slug":3976,"name":3976,"fn":3977,"description":3978,"org":3979,"tags":3980,"stars":30,"repoUrl":31,"updatedAt":3988},"agents-connect","connect agents to external services","Use when connecting your agent to external APIs, tools, or services via Gateway, or restricting tool access with Cedar policies. Handles gateway setup, target types, outbound auth (OAuth, API key, IAM), credentials, and Cedar policy authoring. Triggers on: \"connect to API\", \"add gateway\", \"connect to MCP server\", \"Lambda tools\", \"OpenAPI\", \"gateway target\", \"Cedar policy\", \"restrict tools\", \"policy engine\", \"gateway auth error\", \"store API key\", \"outbound credential\", \"env var API key\", \"API key None after deploy\", \"credential not available after deploy\", \"should this be a gateway target\", \"give my agent tools\", \"add tools to agent\". Not for inbound auth (who can call your agent) — use agents-harden. Not for debugging agent behavior — use agents-debug. Not for VPC networking errors (agent can't reach APIs due to VPC) — use agents-build. Not for creating or hosting a new MCP server project — use agents-get-started.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3981,3982,3985,3987],{"name":3965,"slug":3966,"type":15},{"name":3983,"slug":3984,"type":15},"API Development","api-development",{"name":482,"slug":3986,"type":15},"authentication",{"name":26,"slug":8,"type":15},"2026-07-16T06:00:38.866147",{"slug":3990,"name":3990,"fn":3991,"description":3992,"org":3993,"tags":3994,"stars":30,"repoUrl":31,"updatedAt":4003},"agents-debug","debug agent and environment issues","Use when your agent or environment is broken — wrong answers, errors, timeouts, tool failures, or CLI issues. Reads traces and logs to diagnose root causes. Also checks prerequisites when the CLI itself isn't working. Triggers on: \"agent not working\", \"wrong answer\", \"agent error\", \"tool call failing\", \"debug agent\", \"check logs\", \"read traces\", \"broken\", \"500 error\", \"424 error\", \"model access denied\", \"command not found\", \"stuck in DELETING\", \"maxVms exceeded\", \"cold start diagnosis\", \"cold start slow\", \"agentcore create error\", \"create failed\", \"exit code 7\", \"connection refused local dev\". Not for deploy failures — use agents-deploy. Not for performance tuning without errors — use agents-optimize. Not for VPC configuration — use agents-build. Not for observability setup or missing logs — use agents-optimize.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[3995,3996,3997,4000],{"name":3965,"slug":3966,"type":15},{"name":26,"slug":8,"type":15},{"name":3998,"slug":3999,"type":15},"Debugging","debugging",{"name":4001,"slug":4002,"type":15},"Observability","observability","2026-07-16T06:00:44.679093",{"slug":4005,"name":4005,"fn":4006,"description":4007,"org":4008,"tags":4009,"stars":30,"repoUrl":31,"updatedAt":4016},"agents-deploy","deploy AI agents to AWS","Use when deploying your agent to AWS, or when a deploy has failed. Handles pre-flight validation, CDK\u002FIAM\u002Fquota error diagnosis, version management, rollback, and canary deployments. Triggers on: \"deploy my agent\", \"agentcore deploy\", \"deploy failed\", \"CDK error\", \"rollback\", \"canary deploy\", \"pin version\", \"redeploy\", \"deploy stuck\". Not for production hardening — use agents-harden. Not for adding capabilities before deploy — use agents-build or agents-connect. Not for VPC configuration errors — use agents-build.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4010,4011,4012,4015],{"name":3965,"slug":3966,"type":15},{"name":26,"slug":8,"type":15},{"name":4013,"slug":4014,"type":15},"CI\u002FCD","ci-cd",{"name":20,"slug":21,"type":15},"2026-07-12T08:42:55.059577",{"slug":4018,"name":4018,"fn":4019,"description":4020,"org":4021,"tags":4022,"stars":30,"repoUrl":31,"updatedAt":4026},"agents-get-started","scaffold and deploy new agent projects","Use when a developer wants to create a new agent project or get started with AgentCore. Handles framework selection, project scaffolding, first deploy, and first invocation. Triggers on: \"build an agent\", \"create an agent\", \"get started\", \"new project\", \"agentcore create\", \"which framework\", \"Strands vs LangGraph\", \"hello world agent\", \"first agent\", \"create MCP server\", \"host MCP server\", \"agentcore dev\", \"dev server\", \"what port\", \"local development\". Not for adding capabilities to existing projects — use agents-build or agents-connect. Strands vs LangGraph in a migration context routes to agents-build, not here. Connecting to an existing MCP server routes to agents-connect, not here.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4023,4024,4025],{"name":3965,"slug":3966,"type":15},{"name":26,"slug":8,"type":15},{"name":20,"slug":21,"type":15},"2026-07-12T08:42:51.963247",{"slug":4028,"name":4028,"fn":4029,"description":4030,"org":4031,"tags":4032,"stars":30,"repoUrl":31,"updatedAt":4041},"agents-harden","harden agents for production","Use when preparing your agent for production — IAM scoping, inbound auth (JWT, SigV4), secrets management, cold start optimization, session lifecycle, rate limiting, input validation, and quota guidance. Triggers on: \"production checklist\", \"harden agent\", \"production ready\", \"secure agent\", \"inbound auth\", \"going live\", \"cold start optimization\", \"session lifecycle\", \"StopRuntimeSession\", \"quota\", \"throttling\", \"maxVms\", \"rate limit\", \"security audit of outbound API calls\", \"gateway target audit for production\", \"restrict who can call\", \"lock down endpoint\", \"only our app can call\". Not for Cedar tool-restriction policies — use agents-connect. Not for quality measurement — use agents-optimize. Not for outbound credential storage or API key wiring — use agents-connect. Not for A2A agent-to-agent auth — use agents-build. Cold start observation and diagnosis (not optimization) routes to agents-debug.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4033,4034,4035,4038],{"name":3965,"slug":3966,"type":15},{"name":26,"slug":8,"type":15},{"name":4036,"slug":4037,"type":15},"Best Practices","best-practices",{"name":4039,"slug":4040,"type":15},"Security","security","2026-07-16T06:00:42.174705",{"slug":4043,"name":4043,"fn":4044,"description":4045,"org":4046,"tags":4047,"stars":30,"repoUrl":31,"updatedAt":4057},"agents-optimize","optimize agent quality and performance","Use when measuring or improving agent quality and performance — set up evaluators, online monitoring, CI\u002FCD quality gates, observability, or cost optimization. Triggers on: \"evaluate my agent\", \"add evaluator\", \"measure quality\", \"quality gate\", \"run evals\", \"agent too slow\", \"why is it slow\", \"reduce latency\", \"set up observability\", \"CloudWatch dashboard\", \"how much does my agent cost\", \"cost optimization\", \"logs not showing up\", \"logs missing\", \"spans not found\", \"eval failing\", \"eval error\", \"dev traces\", \"local traces\", \"agentcore dev traces\", \"traces to CloudWatch\". Not for debugging errors or crashes — use agents-debug. Slow but correct routes here; broken routes to debug.\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4048,4049,4050,4053,4054],{"name":3965,"slug":3966,"type":15},{"name":26,"slug":8,"type":15},{"name":4051,"slug":4052,"type":15},"Evals","evals",{"name":4001,"slug":4002,"type":15},{"name":4055,"slug":4056,"type":15},"Performance","performance","2026-07-12T08:42:56.488105",114,{"items":4060,"total":4177},[4061,4068,4075,4082,4089,4095,4102,4110,4127,4140,4152,4167],{"slug":3959,"name":3959,"fn":3960,"description":3961,"org":4062,"tags":4063,"stars":30,"repoUrl":31,"updatedAt":3974},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4064,4065,4066,4067],{"name":3965,"slug":3966,"type":15},{"name":3968,"slug":3969,"type":15},{"name":26,"slug":8,"type":15},{"name":3972,"slug":3973,"type":15},{"slug":3976,"name":3976,"fn":3977,"description":3978,"org":4069,"tags":4070,"stars":30,"repoUrl":31,"updatedAt":3988},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4071,4072,4073,4074],{"name":3965,"slug":3966,"type":15},{"name":3983,"slug":3984,"type":15},{"name":482,"slug":3986,"type":15},{"name":26,"slug":8,"type":15},{"slug":3990,"name":3990,"fn":3991,"description":3992,"org":4076,"tags":4077,"stars":30,"repoUrl":31,"updatedAt":4003},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4078,4079,4080,4081],{"name":3965,"slug":3966,"type":15},{"name":26,"slug":8,"type":15},{"name":3998,"slug":3999,"type":15},{"name":4001,"slug":4002,"type":15},{"slug":4005,"name":4005,"fn":4006,"description":4007,"org":4083,"tags":4084,"stars":30,"repoUrl":31,"updatedAt":4016},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4085,4086,4087,4088],{"name":3965,"slug":3966,"type":15},{"name":26,"slug":8,"type":15},{"name":4013,"slug":4014,"type":15},{"name":20,"slug":21,"type":15},{"slug":4018,"name":4018,"fn":4019,"description":4020,"org":4090,"tags":4091,"stars":30,"repoUrl":31,"updatedAt":4026},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4092,4093,4094],{"name":3965,"slug":3966,"type":15},{"name":26,"slug":8,"type":15},{"name":20,"slug":21,"type":15},{"slug":4028,"name":4028,"fn":4029,"description":4030,"org":4096,"tags":4097,"stars":30,"repoUrl":31,"updatedAt":4041},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4098,4099,4100,4101],{"name":3965,"slug":3966,"type":15},{"name":26,"slug":8,"type":15},{"name":4036,"slug":4037,"type":15},{"name":4039,"slug":4040,"type":15},{"slug":4043,"name":4043,"fn":4044,"description":4045,"org":4103,"tags":4104,"stars":30,"repoUrl":31,"updatedAt":4057},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4105,4106,4107,4108,4109],{"name":3965,"slug":3966,"type":15},{"name":26,"slug":8,"type":15},{"name":4051,"slug":4052,"type":15},{"name":4001,"slug":4002,"type":15},{"name":4055,"slug":4056,"type":15},{"slug":4111,"name":4111,"fn":4112,"description":4113,"org":4114,"tags":4115,"stars":30,"repoUrl":31,"updatedAt":4126},"amazon-aurora-mysql","manage Amazon Aurora MySQL clusters","Amazon Aurora MySQL — creates, modifies, and advises on Aurora MySQL clusters specifically (MySQL-compatible engine, Aurora serverless, parallel query). Trigger for Aurora MySQL cluster operations, ACU sizing, I\u002FO-Optimized storage, commitment pricing, or MySQL upgrade planning. Aurora MySQL uses full (VPC-based) configuration — express configuration is PostgreSQL-only. For Aurora PostgreSQL, use amazon-aurora-postgresql instead. Contains safety guardrails and response templates that override defaults.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4116,4117,4120,4123],{"name":26,"slug":8,"type":15},{"name":4118,"slug":4119,"type":15},"Database","database",{"name":4121,"slug":4122,"type":15},"MySQL","mysql",{"name":4124,"slug":4125,"type":15},"Serverless","serverless","2026-07-12T08:43:13.27939",{"slug":4128,"name":4128,"fn":4129,"description":4130,"org":4131,"tags":4132,"stars":30,"repoUrl":31,"updatedAt":4139},"amazon-aurora-postgresql","configure Amazon Aurora PostgreSQL clusters","Amazon Aurora PostgreSQL — creates, modifies, and advises on Aurora PostgreSQL clusters specifically (PostgreSQL-compatible engine, Aurora serverless, express configuration, pgvector, Babelfish). Trigger for Aurora PostgreSQL cluster operations, express-configuration quick-start, ACU sizing, I\u002FO-Optimized storage, commitment pricing, or PostgreSQL upgrade planning. For Aurora MySQL, use amazon-aurora-mysql instead. Contains safety guardrails, express-first routing, and response templates that override defaults.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4133,4134,4135,4138],{"name":26,"slug":8,"type":15},{"name":4118,"slug":4119,"type":15},{"name":4136,"slug":4137,"type":15},"PostgreSQL","postgresql",{"name":4124,"slug":4125,"type":15},"2026-07-16T06:00:34.789624",{"slug":4141,"name":4141,"fn":4142,"description":4143,"org":4144,"tags":4145,"stars":30,"repoUrl":31,"updatedAt":4151},"amazon-bedrock","build generative AI apps with Amazon Bedrock","Builds generative AI applications on Amazon Bedrock. Covers model invocation (Converse API, InvokeModel), RAG with Knowledge Bases, Bedrock Agents, Guardrails, and AgentCore. Use when invoking models, setting up Knowledge Bases, creating agents, applying guardrails, deploying to AgentCore, migrating\u002Fporting\u002Fconverting a Bedrock Agent (including inline agents) to an AgentCore Harness, troubleshooting Bedrock errors (ThrottlingException, AccessDeniedException), or choosing models (Claude, Llama, Nova, Titan). ALSO USE for prompt caching setup and debugging, quota health checks and throttling diagnosis, cost attribution and tracking, migrating between Claude model generations (4.5 to 4.6 to 4.7), chunking strategies, API selection (Converse vs InvokeModel), guardrail capabilities, and model selection. Also covers AgentCore Payments setup (x402, microtransactions, Payment Manager, Connector, Instrument, Coinbase CDP, Stripe Privy, 402 Payment Required, pay for content, paid endpoint, agent payments). NOT for custom model training, Rekognition, or Comprehend.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4146,4147,4148],{"name":3965,"slug":3966,"type":15},{"name":26,"slug":8,"type":15},{"name":4149,"slug":4150,"type":15},"LLM","llm","2026-07-25T05:30:35.20899",{"slug":4153,"name":4153,"fn":4154,"description":4155,"org":4156,"tags":4157,"stars":30,"repoUrl":31,"updatedAt":4166},"amazon-documentdb","manage Amazon DocumentDB clusters","Manages Amazon DocumentDB end-to-end — serverless-on-8.0 cluster setup, TLS\u002FVPC\u002Fdriver config, flexible-schema and vector-search data modeling, MongoDB compatibility assessment, DMS-based migration, slow-query diagnosis, major version upgrades (4.0→5.0→8.0), Well-Architected reviews (41-check wa_review.py), cost estimation, and security hardening. Retrieve for every DocumentDB question and when the user asks to set up or migrate MongoDB to AWS — DocumentDB is AWS's MongoDB-compatible managed database. Triggers: JSON document store, document database, MongoDB on AWS, Nested fields, Lambda cannot connect, TLS handshake, VPC port 27017, IAM auth, Secrets Manager, encryption at rest, $graphLookup, flexible schema, COLLSCAN, compound index, DMS migration, CDC cutover, $vectorSearch, RAG, Global Clusters, DR replication, cost sizing, audit, health check, production-readiness.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4158,4159,4160,4163],{"name":26,"slug":8,"type":15},{"name":4118,"slug":4119,"type":15},{"name":4161,"slug":4162,"type":15},"MongoDB","mongodb",{"name":4164,"slug":4165,"type":15},"NoSQL","nosql","2026-07-12T08:43:00.455878",{"slug":4168,"name":4168,"fn":4169,"description":4170,"org":4171,"tags":4172,"stars":30,"repoUrl":31,"updatedAt":4176},"amazon-dynamodb","design and debug DynamoDB data layers","Designs, reviews, and debugs DynamoDB data layers from design axioms — enumerates access patterns, chooses partition\u002Fsort keys and GSIs, decides single-table vs. multi-table, configures Streams, Global Tables, TTL, and zero-ETL integrations to OpenSearch\u002FRedshift\u002FSageMaker Lakehouse, and produces a defensible data-layer design with a monthly cost estimate and optional live validation. Applies whenever a user is designing, reviewing, or refactoring anything backed by DynamoDB — schemas, access patterns, GSIs, single- vs. multi-table choices, Streams consumers, transactional outboxes, Global Tables, zero-ETL pipelines — even when they don't say \"axioms\" or \"design review.\" Also applies when debugging hot partitions, throttling, unbounded Scans, LWW conflicts, or surprise bills on DynamoDB workloads.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4173,4174,4175],{"name":26,"slug":8,"type":15},{"name":4118,"slug":4119,"type":15},{"name":4164,"slug":4165,"type":15},"2026-07-16T06:00:37.690386",115]