Introducing Grocery CRUD v3.3
We are really excited about this one! Version 3.3 brings the whole front-end up to date. Grocery CRUD Enterprise now runs on React 19, is built with Vite, and comes with a brand new theme that doesn't need any CSS framework.
Most of the work happens behind the scenes, and that is the whole point. Your CRUDs load faster, the assets folder is smaller, and upgrading takes the same two commands as always.
React 19
The front-end has moved from React 18 to React 19, and all the libraries around it moved too. We didn't do this just to change a number. React 19 removes a lot of old APIs, and staying behind would mean relying on libraries that nobody maintains anymore.
| What | From | To |
|---|---|---|
| React | 18 | 19 |
| Redux Toolkit | 1 | 2 |
| React Redux | 8 | 9 |
| Rich text editor | Quill 1 | Quill 2 |
| Date picker | 7 | 9 |
| Drag and drop | 16 | 18 |
| Date library | date-fns 2 | date-fns 4 |
Two of these changes deserve a closer look.
The rich text editor behind the texteditor field type is now a library that is actively
maintained and built on Quill 2. The toolbar, the buttons and the HTML saved in your database are all
the same, so your existing content works exactly as before.
The date library used to be loaded twice, in two different major versions: once by Grocery CRUD and once by the date picker. Now they share one current version.
A faster build with Vite
We replaced Create React App with Vite. The development server, the production build, the test runner, the linter and Storybook all run on the same modern toolchain now.
You will notice it most in the file size. The biggest third-party libraries (the rich text editor, the date picker and the drag and drop library) are no longer in the main file. Each one loads only when a field type or a dialog really needs it. The main bundle is about a third smaller, and that is the file every page has to download before your grid shows up.
The date and time locales got the same treatment. Grocery CRUD has one small locale file for each supported language, and the browser downloads only the one it needs:
| Assets | Before | Now |
|---|---|---|
Locale files in assets |
~1.8 MB | ~362 kB |
If your application runs in a language that Grocery CRUD supports, the dates show in that language. And if a browser asks for a regional variant that we don't ship separately, it now falls back to the right language instead of English.
A new theme: grocery-crud (BETA)
Until now, every theme was built on somebody else's CSS framework. To make Grocery CRUD look right, you needed Bootstrap on the page.
Not anymore! The new grocery-crud theme brings its own styling. You can put a CRUD in an
application with no CSS framework, or with its own design system, and you don't have to add Bootstrap
next to it.
It is a BETA in 3.3, and it already covers everything the datagrid does day to day: the grid, filtering, the add, edit and view forms, all the modals, column visibility, column reordering and resizable columns. You get both a light and a dark skin.
You select it like any other theme:
$crud->setTheme('grocery-crud');
AI ready
Version 3.3 is AI ready! In the background, we have prepared Grocery CRUD to work with AI in the
future. One goal for 3.3 is to add an AGENTS.md file with instructions for the project, so AI agents
can install Grocery CRUD for you.
Coming from 3.1? Here's what 3.2 brought
A lot arrived with the 3.2 releases. If you jump straight to 3.3, you get all of this too:
- Inline edit:
inlineEditFields()lets your users edit a record right in the datagrid, without opening a form. setCustomQuery(): drive the datagrid with your own SQL query, sorting included.setDefaultState(): open a CRUD directly on a form instead of the grid.- Standalone form pages:
unsetList()removes the listing completely, andunsetBackToList()removes the button that goes back to it. unsetPagination(): remove the pagination and the row limit, and show every record.- Toast notifications on add, edit and delete, with the new
show_toast_notificationsconfiguration. - Right-to-left support for the pagination icons.
- PHP 8.4 compatibility, with PHP 8.1 as the new minimum.
- Fresh translations for all 35 languages, and Latvian is new.
Upgrading to 3.3
Good news: there are no breaking changes. Nothing about how Grocery CRUD loads into your page has changed. The front-end is still one script that the library loads for you from the same assets folder, just like before. If you serve your assets from a custom location, that keeps working too.
So it is the usual:
composer update --prefer-dist
Then update your public asset files, the same way you do for any Grocery CRUD update. If you use
Codeigniter 4 or Laravel and have the publish command in your composer.json, that one command does
both.
Last but not least
When a release goes well, you barely notice it. The code you wrote for 3.2 keeps working, and everything is lighter and quicker underneath. We think that is the best kind of upgrade!
We would love to hear how it goes for you 🤗🤗🤗.
Change log
You can find the full change log from version 3.2 to 3.3:
- 3.3.0
- GC-600: Theme syncing and introducing one new theme: grocery-crud (BETA)
- GC-601: Replace Create React App with Vite and upgrade all relevant frontend tools.
- GC-602: Upgrade frontend to React 19 and refresh JavaScript dependencies.
- 3.2.11
- GC-597: Incorrect default value read for columns with a default in PostgreSQL (includes type cast).
- GC-421: Error modal doesn't show the full JSON response when this is not the expected one (it is showing it as empty instead).
- GC-598: Setting a custom ModelFieldType via fieldType() doesn't work anymore.
- 3.2.10
- GC-594: Trim whitespace on paste in quick search column filter.
- GC-595: Right to left (RTL) support for pagination navigation icons.
- 3.2.9
- GC-592: Add Translations for Unique and UniqueUpload Validation Rules.
- GC-593: Remove field-name filter on form submission for callback field inputs.
- 3.2.8
- GC-589: Fix inline edit width when the width of the column doesn't fit the form.
- GC-590: Adding Afrikaans, Bengali, Catalan, Croatian, Czech, Danish, Hindi, Hungarian and Mongolian language to validation form setRule.
- GC-591: Show toast notifications for success message on add/edit/delete operations. New configuration
show_toast_notificationswith default valuefalse.
- 3.2.7
- GC-585: callbackColumn to be available to work with inlineEditFields.
- GC-587: displayAs to allow new line characters for better readability of long field names.
- GC-588: unsetPagination to remove pagination display and data limit, allowing all records to be shown.
- 3.2.6
- GC-583: Adding ability for ordering with
setCustomQuery - GC-584: Add Latvian language.
- Updating translations for all 35 languages.
- GC-583: Adding ability for ordering with
- 3.2.5
- GC-581: New function
setCustomQuerywhich allows you to set a custom SQL query for the datagrid. - GC-582: Add new function
unsetPaginationto remove pagination from the datagrid.
- GC-581: New function
- 3.2.4
- GC-579: Field type boolean doesn't work as expected with a Postgres database.
- GC-580: setRelation1to1 doesn't work with Postgres.
- 3.2.3
- GC-577: Multigrid with CSRF protection is throwing
403 Forbiddenerror. - GC-578: inlineEditFields fails with upload field and callbackBeforeUpload.
- GC-577: Multigrid with CSRF protection is throwing
- 3.2.2
- GC-576: New functionality for Inline Edit Fields with new method inlineEditFields.
- 3.2.1
- GC-573: Fixing styling issues when
open_in_modalisfalse. - GC-574: Error handling - Show a non-empty error response when the error is in JSON format.
- GC-575: Postgres Database to use ILIKE instead of LIKE on search operations.
- GC-573: Fixing styling issues when
- 3.2.0
- Removing support for PHP 7.4 and requiring PHP 8.1 and above.
- PHP 8.4 compatibility.
- GC-568: New function
unsetBackToList, which removes buttons to back To list. - GC-570: New function
unsetList, which is completely removing the datagrid listing. Useful for standalone form pages. - GC-569: New method
setDefaultState, which is defining the default initial state instead of datagrid (current default). - GC-571: Custom error message to be able to be displayed also as HTML instead of a simple text.
- GC-572: Fixing issue with extended filtering modal and fieldTypeSearchColumn which wouldn't pick up the correct dataType.
Oct 27, 2026 by John Skoubourdis