// the find
marmelab/react-admin
A frontend Framework for single-page applications on top of REST/GraphQL APIs, using TypeScript, React and Material Design
react-admin is a mature, opinionated framework for building CRUD admin interfaces on top of REST or GraphQL APIs. It's built on MUI, react-hook-form, react-router, and TanStack Query, and handles the entire lifecycle from data fetching to forms, filtering, permissions, and i18n. Best fit for internal tools, dashboards, and back-office apps where you control the API shape.
- Data provider abstraction is genuinely well-designed: swapping backends is a matter of swapping one object, and there are 45+ community-maintained adapters for common APIs (Supabase, Firebase, Django REST, etc.).
- Component library coverage is deep—ReferenceInput with autocomplete, editable datagrids, TabbedForms, wizard forms, optimistic updates with undo, realtime support, and RBAC are all built-in rather than left as exercises for the user.
- The hooks-and-controllers architecture (useListController, useEditController, etc.) lets you replace any visual layer while keeping all the data/state logic, so escaping MUI defaults is possible without rewriting everything.
- Documentation is unusually thorough: every component has a dedicated docs page with props table, code examples, and often a live sandbox. The upgrade guide and changelog are maintained consistently across major versions.
- MUI coupling is deep despite claims of replaceability. Swapping to Tailwind or another design system requires fighting internal sx props, theme tokens, and MUI-specific component APIs throughout—it's technically possible but not a casual afternoon's work.
- The enterprise edition gates a significant chunk of genuinely useful features (AG Grid integration, calendar, tree inputs, audit log, realtime, RBAC helpers) behind a paid subscription, which is fine but makes the free tier feel incomplete for non-trivial apps.
- Bundle size is substantial. A minimal setup pulls in the full MUI library, react-router, TanStack Query, react-hook-form, and ra-core—cold load performance on slow connections can be noticeably bad without aggressive code splitting.
- The opinionated URL and state structure (list params in the URL, record context via React context) creates friction when embedding react-admin views inside an existing app that has its own routing or state management conventions.