---
name: rdc-setup
description: Install and set up @data-client/react or @data-client/vue in a project. Detects project type (NextJS, Expo, React Native, Vue, plain React) and protocol (REST, GraphQL, custom), then hands off to protocol-specific setup skills.
disable-model-invocation: true
---
# Setup Reactive Data Client
## Detection Steps
Before installing, detect the project type and protocol by checking these files:
### 1. Detect Package Manager
Check which lock file exists:
- `yarn.lock` → use `yarn add`
- `pnpm-lock.yaml` → use `pnpm add`
- `package-lock.json` or `bun.lockb` → use `npm install` or `bun add`
### 2. Detect Project Type
Check `package.json` dependencies:
| Check | Project Type |
|-------|--------------|
| `"next"` in dependencies | **NextJS** |
| `"expo"` in dependencies | **Expo** |
| `"vue"` in dependencies | **Vue** |
| `"react-native"` in dependencies (no expo) | **React Native** |
| `"react"` in dependencies | **Plain React** |
### 3. Detect Protocol Type
Scan the codebase to determine which data-fetching protocols are used:
#### REST Detection
Look for these patterns:
- `fetch()` calls with REST-style URLs (`/api/`, `/users/`, etc.)
- HTTP client libraries: `axios`, `ky`, `got`, `superagent` in `package.json`
- Files with REST patterns: `api.ts`, `client.ts`, `services/*.ts`
- URL patterns with path parameters: `/users/:id`, `/posts/:postId/comments`
- HTTP methods in code: `method: 'GET'`, `method: 'POST'`, `.get(`, `.post(`
#### GraphQL Detection
Look for these patterns:
- `@apollo/client`, `graphql-request`, `urql`, `graphql-tag` in `package.json`
- `.graphql` or `.gql` files in the project
- `gql\`` template literal tags
- GraphQL query patterns: `query {`, `mutation {`, `subscription {`
- GraphQL endpoint URLs: `/graphql`
#### Custom Protocol Detection
For async operations that don't match REST or GraphQL:
- Custom async functions returning Promises
- Third-party SDK clients (Firebase, Supabase, AWS SDK, etc.)
- IndexedDB or other local async storage
## Installation
### Core Packages
| Framework | Core Package |
|-----------|----------|
| React (all) | `@data-client/react` + dev: `@data-client/test` |
| Vue | `@data-client/vue` (testing included) |
### Install Command Examples
**React (NextJS, Expo, React Native, plain React):**
```bash
npm install @data-client/react && npm install -D @data-client/test
yarn add @data-client/react && yarn add -D @data-client/test
pnpm add @data-client/react && pnpm add -D @data-client/test
```
**Vue:**
```bash
npm install @data-client/vue
yarn add @data-client/vue
pnpm add @data-client/vue
```
## Provider Setup
After installing, add the provider at the top-level component.
### NextJS (App Router)
Edit `app/layout.tsx`:
```tsx
import { DataProvider } from '@data-client/react/nextjs';
export default function RootLayout({ children }) {
return (
{children}
);
}
```
**Important**: NextJS uses `@data-client/react/nextjs` import path.
### Expo
Edit `app/_layout.tsx`:
```tsx
import { Stack } from 'expo-router';
import { DataProvider } from '@data-client/react';
export default function RootLayout() {
return (
);
}
```
### React Native
Edit entry file (e.g., `index.tsx`):
```tsx
import { DataProvider } from '@data-client/react';
import { AppRegistry } from 'react-native';
const Root = () => (
);
AppRegistry.registerComponent('MyApp', () => Root);
```
### Plain React (Vite, CRA, etc.)
Edit entry file (e.g., `index.tsx`, `main.tsx`, or `src/index.tsx`):
```tsx
import { DataProvider } from '@data-client/react';
import ReactDOM from 'react-dom/client';
ReactDOM.createRoot(document.getElementById('root')!).render(
,
);
```
### Vue
Edit `main.ts`:
```ts
import { createApp } from 'vue';
import { DataClientPlugin } from '@data-client/vue';
import App from './App.vue';
const app = createApp(App);
app.use(DataClientPlugin, {
// optional overrides
// managers: getDefaultManagers(),
// initialState,
// Controller,
// gcPolicy,
});
app.mount('#app');
```
## Protocol-Specific Setup
After provider setup, apply the appropriate skill based on detected protocol:
### REST APIs
Apply skill **"rdc-rest-setup"** which will:
1. Install `@data-client/rest`
2. Offer to create a custom `BaseEndpoint` class extending `RestEndpoint`
3. Configure common behaviors: urlPrefix, authentication, error handling
### GraphQL APIs
Apply skill **"rdc-graphql-setup"** which will:
1. Install `@data-client/graphql`
2. Create and configure `GQLEndpoint` instance
3. Set up authentication headers
### Custom Async Operations
Apply skill **"rdc-endpoint-setup"** which will:
1. Install `@data-client/endpoint`
2. Offer to wrap existing async functions with `new Endpoint()`
3. Configure schemas and caching options
### Multiple Protocols
If multiple protocols are detected, apply multiple setup skills. Each protocol package can be installed alongside others.
## Verification Checklist
After setup, verify:
- [ ] Core packages installed in `package.json`
- [ ] Provider/Plugin wraps the app at root level
- [ ] Correct import path used (especially `@data-client/react/nextjs` for NextJS)
- [ ] No duplicate providers in component tree
- [ ] Protocol-specific setup completed via appropriate skill
## Common Issues
### NextJS: Wrong Import Path
❌ Wrong:
```tsx
import { DataProvider } from '@data-client/react';
```
✅ Correct for NextJS:
```tsx
import { DataProvider } from '@data-client/react/nextjs';
```
### Provider Not at Root
The `DataProvider` must wrap all components that use data-client hooks. Place it at the topmost level possible.
## Next Steps
After core setup and protocol-specific setup:
1. Define data schemas using `Entity` - see skill "rdc-schema"
2. Use hooks like `useSuspense`, `useQuery`, `useController` - see skill "rdc-react"
3. Define REST resources - see skill "rdc-rest"
## References
For detailed API documentation, see the [references](references/) directory:
- [DataProvider](references/DataProvider.md) - Root provider component
- [installation](references/installation.md) - Installation guide
- [getDefaultManagers](references/getDefaultManagers.md) - Default managers