Each Resource declaration can wire 4 CRUD page types
Version 5.15.3 lets a resource declare 4 page components: list, edit, create, and show. The framework wires routes and record context around them for entities such as posts, customers, or invoices. Its building blocks cover tables, filters, forms, validation, notifications, permissions, translations, and themes. This is useful work to avoid. Internal apps often repeat the same state and error handling with different field names.
The browser still talks to your backend through a data provider. React-admin's README points to more than 45 adapters for REST, GraphQL, Firebase, and named frameworks. A provider exposes methods such as getList, getOne, create, and update, then translates their arguments into your API's URLs and payloads. The abstraction pays off when resources behave consistently. An API full of special commands and irregular response shapes will put more code into that adapter.
Authentication stays off until an auth provider turns it on
In version 5.15.3, authentication remains disabled until you pass an auth provider. The guide defines 6 provider methods for login, logout, identity, credential checks, error checks, and optional access control. Your code decides how those operations reach the identity service. The data provider must also attach the resulting credential to API calls. Custom routes need explicit protection or the app-wide requireAuth setting. That split is sensible, though it means a rendered login screen is not proof that the backend authorization model is correct.
The contributor setup makes the framework's scope visible. Our commit f0f9f33 checkout contained 3,214 files and about 234,981 lines of source before dependencies. Installing its Yarn workspaces added 2,692 packages and left 1,997 MB on disk. Those are monorepo development figures, not the dependency cost of adding the published react-admin package to one application. They matter if your team expects to debug internals, run upstream tests, or carry a patch.
What happened when we ran it
We cloned commit f0f9f33 into a fresh unprivileged container with Node 22, 3 CPUs, 8 GB of RAM, and no secrets. Its install completed in 218 seconds and its build in 152 seconds. Both steps succeeded. The checkout was 159.8 MB, and the repository had three CI workflow files. It had no Dockerfile, which is reasonable for a browser framework but leaves contributor environment parity to the package manager and project instructions.
The test step ended with exit code 1 after 200 seconds. Jest itself reported 288 passing suites, with 2,844 tests passed, none failed, and 11 skipped out of 2,855. After that clean Jest summary, Yarn printed Unknown Syntax Error: Unsupported option name ("-s"). The log establishes a command-line incompatibility after the tests. It does not show a failing React-admin assertion, so treating the whole run as either fully passing or as 1 failed test would both be wrong.
Version 5.15.3 still defaults to Material UI
The 5.15.3 package combines React, Material UI, React Hook Form, React Router, and TanStack Query. That gets a competent admin interface on screen quickly, including optimistic updates and cached queries. React-admin also permits custom layouts, fields, inputs, and lower-level controller hooks. Its architecture guide admits the cost of composition: changing one part can require replacing several wrapper components before the custom piece reaches the top-level Admin component.
Edge cases deserve application-level tests even after 2,844 upstream tests pass. Open issue 11368 reports that a sufficiently large TabbedForm on React 19 and React-admin 5.15.3 can hit React's maximum update depth while validation runs. Issue 11108 comes from a screen-reader user who found clickable Material UI table rows announced as plain text in the helpdesk demo. These reports concern specific components, not every screen. They are still good acceptance tests if your app relies on tabbed forms or row-click navigation.
The free core is mature, while some business features are paid
The 5.15.3 core package uses the MIT license and includes the usual resource views plus hooks for replacing visible parts. Marmelab sells an Enterprise Edition with private modules for functions such as advanced grids, role-based access control, audit logs, realtime updates, trees, and calendars. It also places professional support there. Check that boundary before committing to a design, especially if procurement will object after a prototype has already used an Enterprise example.
Maintenance looks active rather than merely popular. GitHub recorded 26,935 stars, 46 open issues, a last push on September 14, 2026, and release 5.15.3 on September 4. That release fixed access checks in DataTable, duplicate undo notifications, and a rich-text-editor crash. The 218-second install and 152-second build are the better warning for contributors: this is a large framework to understand. For a resource-heavy internal app, that cost can still be lower than owning every list, form, permission check, and loading state yourself.

