rdc-setup
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→ useyarn addpnpm-lock.yaml→ usepnpm addpackage-lock.jsonorbun.lockb→ usenpm installorbun 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,superagentinpackage.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-taginpackage.json.graphqlor.gqlfiles 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):
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:
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:
import { DataProvider } from '@data-client/react/nextjs';
export default function RootLayout({ children }) {
return (
<html>
<DataProvider>
<body>
{children}
</body>
</DataProvider>
</html>
);
}
Important: NextJS uses @data-client/react/nextjs import path.
Expo
Edit app/_layout.tsx:
import { Stack } from 'expo-router';
import { DataProvider } from '@data-client/react';
export default function RootLayout() {
return (
<DataProvider>
<Stack>
<Stack.Screen name="index" />
</Stack>
</DataProvider>
);
}
React Native
Edit entry file (e.g., index.tsx):
import { DataProvider } from '@data-client/react';
import { AppRegistry } from 'react-native';
const Root = () => (
<DataProvider>
<App />
</DataProvider>
);
AppRegistry.registerComponent('MyApp', () => Root);
Plain React (Vite, CRA, etc.)
Edit entry file (e.g., index.tsx, main.tsx, or src/index.tsx):
import { DataProvider } from '@data-client/react';
import ReactDOM from 'react-dom/client';
ReactDOM.createRoot(document.getElementById('root')!).render(
<DataProvider>
<App />
</DataProvider>,
);
Vue
Edit main.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:
- Install
@data-client/rest - Offer to create a custom
BaseEndpointclass extendingRestEndpoint - Configure common behaviors: urlPrefix, authentication, error handling
GraphQL APIs
Apply skill "rdc-graphql-setup" which will:
- Install
@data-client/graphql - Create and configure
GQLEndpointinstance - Set up authentication headers
Custom Async Operations
Apply skill "rdc-endpoint-setup" which will:
- Install
@data-client/endpoint - Offer to wrap existing async functions with
new Endpoint() - 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/nextjsfor NextJS) - No duplicate providers in component tree
- Protocol-specific setup completed via appropriate skill
Common Issues
NextJS: Wrong Import Path
❌ Wrong:
import { DataProvider } from '@data-client/react';
✅ Correct for NextJS:
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:
- Define data schemas using
Entity- see skill "rdc-schema" - Use hooks like
useSuspense,useQuery,useController- see skill "rdc-react" or "rdc-vue" - Define REST resources - see skill "rdc-rest"
References
For detailed API documentation, see the references directory:
- DataProvider - Root provider component
- installation - Installation guide
- getDefaultManagers - Default managers