Refine.dev Framework
Refine is a headless React framework for building enterprise CRUD applications. It provides data fetching, routing, authentication, and access control out of the box while remaining UI-agnostic.
Core Concepts
Refine is built around these key abstractions:
- Data Provider — adapter for your backend (REST, GraphQL, etc.)
- Resources — entities in your app (e.g.,
posts, users, products)
- Hooks —
useList, useOne, useCreate, useUpdate, useDelete, useForm, useTable
- Auth Provider — handles login, logout, permissions
- Router Provider — integrates with React Router, etc.
Quick Start (Vite)
Scaffold: npm create refine-app@latest (select Vite, Mantine, REST API). For manual setup, install @refinedev/core @refinedev/mantine @refinedev/react-router and Mantine packages.
Minimal App Structure
// src/App.tsx
import { Refine } from "@refinedev/core";
import { MantineProvider } from "@mantine/core";
import routerProvider from "@refinedev/react-router";
import dataProvider from "@refinedev/simple-rest";
import { BrowserRouter, Routes, Route } from "react-router-dom";
function App() {
return (
<BrowserRouter>
<MantineProvider>
<Refine
dataProvider={dataProvider("https://api.example.com")}
routerProvider={routerProvider}
resources={[
{
name: "posts",
list: "/posts",
create: "/posts/create",
edit: "/posts/edit/:id",
show: "/posts/show/:id",
},
]}
>
<Routes>{/* Your routes here */}</Routes>
</Refine>
</MantineProvider>
</BrowserRouter>
);
}
Critical Prohibitions
- Do NOT mix multiple UI libraries (pick Mantine and stick with it)
- Do NOT bypass data provider — always use Refine hooks for data operations
- Do NOT hardcode API URLs — use data provider configuration
- Do NOT skip resource definition — all CRUD entities must be declared in
resources
- Do NOT ignore TypeScript types — Refine is fully typed, leverage it
Steps for New Feature
- Define the resource in
<Refine resources={[...]}>
- Create page components (List, Create, Edit, Show)
- Set up routes matching resource paths
- Use appropriate hooks (
useTable for lists, useForm for create/edit)
- Configure auth provider if authentication is needed
Definition of Done
Release Note (5.0.12)
useList and useTable now preserve custom fields returned by getList, which matters when your data provider returns extra aggregate or pagination metadata alongside the row list.
References (Detailed Guides)
Core
- data-providers.md — Data provider interface, available providers, custom implementation
- resources.md — Resource definition and configuration
- routing.md — React Router integration and route patterns
Hooks
- hooks.md — All hooks: useList, useOne, useCreate, useUpdate, useDelete, useForm, useTable, useSelect
Security & Auth
- auth.md — Auth provider, access control, RBAC/ABAC, Casbin/CASL integration
UI & Components
- mantine-ui.md — Mantine components integration
- inferencer.md — Auto-generate CRUD pages from API schema
Utilities & Features
- notifications.md — Notification provider and useNotification hook
- i18n.md — Internationalization with i18nProvider
- realtime.md — LiveProvider for websocket/realtime subscriptions
Links
1---
2name: refine-dev
3description: "Refine.dev headless React framework for CRUD apps: data providers, resources, routing, authentication, hooks, and forms. Use when building admin panels, dashboards, or internal tools with React and various backends (REST, GraphQL, Supabase, Strapi), or configuring Refine data providers and authentication. Keywords: Refine, CRUD, admin panel, data provider, React."
4metadata:
5 version: "5.0.12"
6 release_date: "2026-04-02"
7---
8
9# Refine.dev Framework
10
11Refine is a headless React framework for building enterprise CRUD applications. It provides data fetching, routing, authentication, and access control out of the box while remaining UI-agnostic.
12
13## Core Concepts
14
15Refine is built around these key abstractions:
16
171. **Data Provider** — adapter for your backend (REST, GraphQL, etc.)
182. **Resources** — entities in your app (e.g., `posts`, `users`, `products`)
193. **Hooks** — `useList`, `useOne`, `useCreate`, `useUpdate`, `useDelete`, `useForm`, `useTable`
204. **Auth Provider** — handles login, logout, permissions
215. **Router Provider** — integrates with React Router, etc.
22
23## Quick Start (Vite)
24
25Scaffold: `npm create refine-app@latest` (select Vite, Mantine, REST API). For manual setup, install `@refinedev/core @refinedev/mantine @refinedev/react-router` and Mantine packages.
26
27## Minimal App Structure
28
29```tsx
30// src/App.tsx
31import { Refine } from "@refinedev/core";
32import { MantineProvider } from "@mantine/core";
33import routerProvider from "@refinedev/react-router";
34import dataProvider from "@refinedev/simple-rest";
35import { BrowserRouter, Routes, Route } from "react-router-dom";
36
37function App() {
38 return (
39 <BrowserRouter>
40 <MantineProvider>
41 <Refine
42 dataProvider={dataProvider("https://api.example.com")}
43 routerProvider={routerProvider}
44 resources={[
45 {
46 name: "posts",
47 list: "/posts",
48 create: "/posts/create",
49 edit: "/posts/edit/:id",
50 show: "/posts/show/:id",
51 },
52 ]}
53 >
54 <Routes>{/* Your routes here */}</Routes>
55 </Refine>
56 </MantineProvider>
57 </BrowserRouter>
58 );
59}
60```
61
62## Critical Prohibitions
63
64- Do NOT mix multiple UI libraries (pick Mantine and stick with it)
65- Do NOT bypass data provider — always use Refine hooks for data operations
66- Do NOT hardcode API URLs — use data provider configuration
67- Do NOT skip resource definition — all CRUD entities must be declared in `resources`
68- Do NOT ignore TypeScript types — Refine is fully typed, leverage it
69
70## Steps for New Feature
71
721. Define the resource in `<Refine resources={[...]}>`
732. Create page components (List, Create, Edit, Show)
743. Set up routes matching resource paths
754. Use appropriate hooks (`useTable` for lists, `useForm` for create/edit)
765. Configure auth provider if authentication is needed
77
78## Definition of Done
79
80- [ ] Resource defined in Refine configuration
81- [ ] All CRUD pages implemented with proper hooks
82- [ ] Routes match resource configuration
83- [ ] TypeScript types for resource data defined
84- [ ] Error handling in place
85- [ ] Loading states handled
86
87## Release Note (5.0.12)
88
89- `useList` and `useTable` now preserve custom fields returned by `getList`, which matters when your data provider returns extra aggregate or pagination metadata alongside the row list.
90
91## References (Detailed Guides)
92
93### Core
94
95- [data-providers.md](references/data-providers.md) — Data provider interface, available providers, custom implementation
96- [resources.md](references/resources.md) — Resource definition and configuration
97- [routing.md](references/routing.md) — React Router integration and route patterns
98
99### Hooks
100
101- [hooks.md](references/hooks.md) — All hooks: useList, useOne, useCreate, useUpdate, useDelete, useForm, useTable, useSelect
102
103### Security & Auth
104
105- [auth.md](references/auth.md) — Auth provider, access control, RBAC/ABAC, Casbin/CASL integration
106
107### UI & Components
108
109- [mantine-ui.md](references/mantine-ui.md) — Mantine components integration
110- [inferencer.md](references/inferencer.md) — Auto-generate CRUD pages from API schema
111
112### Utilities & Features
113
114- [notifications.md](references/notifications.md) — Notification provider and useNotification hook
115- [i18n.md](references/i18n.md) — Internationalization with i18nProvider
116- [realtime.md](references/realtime.md) — LiveProvider for websocket/realtime subscriptions
117
118## Links
119
120- [Documentation](https://refine.dev/docs/)
121- [Releases](https://github.com/refinedev/refine/releases)
122- [GitHub](https://github.com/refinedev/refine)
123- [npm](https://www.npmjs.com/package/@refinedev/core)