---
name: workos-authkit-react
description: Integrate WorkOS AuthKit with React single-page applications. Client-side only authentication. Use when the project is a React SPA without Next.js or React Router.
---
# WorkOS AuthKit for React (SPA)
## Decision Tree
```
START
│
├─► Fetch README (BLOCKING)
│ github.com/workos/authkit-react/blob/main/README.md
│ README is source of truth. Stop if fetch fails.
│
├─► Detect Build Tool
│ ├─ vite.config.ts exists? → Vite
│ └─ otherwise → Create React App
│
├─► Set Env Var Prefix
│ ├─ Vite → VITE_WORKOS_CLIENT_ID
│ └─ CRA → REACT_APP_WORKOS_CLIENT_ID
│
└─► Implement per README
```
## Critical: Build Tool Detection
| Marker File | Build Tool | Env Prefix | Access Pattern |
| ------------------------- | ---------- | ------------ | ------------------------- |
| `vite.config.ts` | Vite | `VITE_` | `import.meta.env.VITE_*` |
| `craco.config.js` or none | CRA | `REACT_APP_` | `process.env.REACT_APP_*` |
**Wrong prefix = undefined values at runtime.** This is the #1 integration failure.
## Key Clarification: No Callback Route
The React SDK handles OAuth callbacks **internally** via AuthKitProvider.
- No server-side callback route needed
- SDK intercepts redirect URI client-side
- Token exchange happens automatically
Just ensure redirect URI env var matches WorkOS Dashboard exactly.
## Required Environment Variables
```
{PREFIX}WORKOS_CLIENT_ID=client_...
{PREFIX}WORKOS_REDIRECT_URI=http://localhost:5173/callback
```
No `WORKOS_API_KEY` needed. Client-side only SDK.
## Verification Checklist
- [ ] README fetched and read
- [ ] Build tool detected correctly
- [ ] Env var prefix matches build tool
- [ ] `.env` or `.env.local` has required vars
- [ ] No `next` dependency (wrong skill)
- [ ] No `react-router` dependency (wrong skill)
- [ ] AuthKitProvider wraps app root
- [ ] `pnpm build` exits 0
## Error Recovery
### "clientId is required"
**Cause:** Env var inaccessible (wrong prefix)
Check: Does prefix match build tool? Vite needs `VITE_`, CRA needs `REACT_APP_`.
### Auth state lost on refresh
**Cause:** Token persistence issue
Check: Browser dev tools → Application → Local Storage. SDK stores tokens here automatically.
### useAuth returns undefined
**Cause:** Component outside provider tree
Check: Entry file (`main.tsx` or `index.tsx`) wraps `` in ``.
### Callback redirect fails
**Cause:** URI mismatch
Check: Env var redirect URI exactly matches WorkOS Dashboard → Redirects configuration.