The URL is the state
Filters, pagination, the chosen layout and the open item all live in the address bar. A shared link reopens exactly what the sender was looking at.
Two packages, one idea: describe it, don’t draw it
react-data-form turns an object into a form that holds its own state, validates, and reports what your API sends back. react-resource-view takes one resource declaration and renders its list, detail, create, edit and delete screens — wired to your API and to the URL.
$ pnpm add react-data-form react-resource-viewreact-data-form
Describe a form as data, let the library render it.
pnpm add react-data-form react-mini-i18n resource-registryreact-resource-view
Declare a resource, get its whole CRUD surface.
pnpm add react-resource-view react-data-formWritten once
A list has no separate column definition. The fields you describe are the form the reader edits, the columns the table shows and the payload your API receives — so take the description below apart and watch both halves follow.
Live — edit the description
Fields · 4 columns
The table has no column list of its own. Every switch above moves the form and the list at the same time — because they read the same object.
Read many ways
A layout is a line in viewVariants, not a screen you build. Declare several and the reader picks — the filters, the permissions and the forms carry over untouched.
One column per field, editable in place.
Filters, pagination, the chosen layout and the open item all live in the address bar. A shared link reopens exactly what the sender was looking at.
Neither package knows your router, your API client or your brand. Each touch point is a port with a default, injected once at startup.
A dialect holds what each backend spells differently — pages, filters, envelopes, errors — so one declared resource renders against any of the three, or a fourth you write.
A validator per field for the browser, and a mapper that puts a 422 from the server back on the fields that caused it.
Labels go through react-mini-i18n, so your application and the libraries translate from the same place.
Table, cards, item list, columns, split, calendar and timeline — declared side by side, switched by the reader. An eighth of your own is one command and one file.
The view package builds on the form package, so the documentation reads in that order — but each half stands on its own.
Both are written and maintained by Salvador Cardona — the rest of his work is on the author’s portfolio.