Changelog :
V 5.1.0
What's new
- You can now choose how the generated code validates the incoming requests data. While installing (
php artisan cubeta:install api,weborreact-ts) or from the GUI settings page you pick one of:FormRequest: the classic Laravel form requests (the default, and what previous versions always generated)DTO: validated DTOs built on top of wendelladriel/laravel-validated-dtoBoth: generate both classes Your choice is stored incubeta-starter.config.jsonundervalidation_type, so every later generation follows it.
- Introducing the DTO generator, which creates a
App\DTOs\<version>\<Model>\StoreUpdate<Model>DTOclass extendingValidatedDTOwith:- the same validation rules the form request gets
- typed properties inferred from the column types (
int,float,bool,string,UploadedFile), nullable columns being nullable and defaulting tonull - casts for the castable columns (
IntegerCast,FloatCast,BooleanCast,StringCast)
- Introducing the
create:dtocommand and a matching--dtooption forcreate:model, alongside the existingcreate:request/--request. wendelladriel/laravel-validated-dtois now installed for you by the api , web and react-ts installers whenever the chosen validation type includes DTOs.- New
dto_namespaceanddto_pathkeys inconfig/cubeta-starter.phpto control where the generated DTOs live. - The generated controllers now inject the validation class you chose : a DTO is injected and read with
$dto->toArray(), while a form request is still injected and read with$request->validated(). When you pickBoth, both classes are generated and the controllers depend on the form request.
What has been improved
- The generated unique column rule now uses
request()->isMethod('PUT')andrequest()->route(...)instead of$this->isMethod(...)and$this->route(...), so the same rule works inside form requests and DTOs alike.
V 5.0.2
What's new
- Introducing a new
FilepondInputfile field for the React/Inertia dashboard, built on top ofFilePond, which replaces the previous plain fileInputused for file columns. It comes with:- Drag-and-drop uploads with image previews and file posters
- Single or multiple file selection via the
isMultipleprop - Accepted file-type restrictions via the
acceptedFileTypesprop (defaults to common image types) - Automatic hydration of existing
Mediavalues on edit forms, so already-uploaded files show up in the field - Standard field styling, label and validation error handling consistent with the other form fields
- File columns now generate the
FilepondInputcomponent instead of a basic file input, and edit forms pre-fill the field with the current media. - The required FilePond plugins (image preview, file poster, file-type validation and EXIF orientation) are registered automatically in the dashboard layout, and all
filepond/react-filepondpackages are installed automatically by the React/TS packages installer.
V 5.0.1
What's new
- Introducing a brand-new rich-text editor for the React/Inertia dashboard built on top of
Tiptap, replacing the previous editor setup. The editor ships with a full toolbar out of the box:- Text formatting: bold, italic, text color and font family
- Block elements: headings (H1–H6), blockquotes, bullet and ordered lists, horizontal rules
- Rich content: links, images (by URL), tables, YouTube embeds and multi-column layouts
- A live footer showing character and word counts
- Debounced auto-save so content is committed to the form without an explicit save on every keystroke
- An
extraButtonsprop so you can inject your own toolbar buttons with access to the editor instance
- Introducing the
TextEditorform field that wraps the Tiptap editor with the standard field styling, label, required indicator and validation error handling used across the other form fields. - Introducing the
TranslatableTextEditorcomponent for rich-text content that needs to be translated across multiple languages, following the same pattern as the other translatable form fields and integrating with theFormLocaleProviderlanguage switcher. - All required
@tiptap/*packages are now installed automatically by the React/TS packages installer, so the editor works with no extra setup.
V 5.0.0
This is a major release that upgrades the whole stack to Laravel 13 and rebuilds the generated React
dashboard on top of shadcn/ui. Because of the framework bump and the frontend rewrite it is a breaking
change, so we made it a major version.
What's new
- Adding support for
Laravel 13and dropping support for previous versions (now requiresPHP 8.3+). - The generated React/Inertia dashboard is now built on top of
shadcn/ui, so you get a full set of accessible, themeable UI primitives (dialog,drawer,sidebar,select,calendar,popover,dropdown-menu,tabs,card,chartand more) published straight into your project. - A
components.jsonfile is now generated so you can pull additionalshadcncomponents into your project using theshadcnCLI. - Introducing light/dark mode out of the box through a new
theme-provider(powered bynext-themes) with a ready-made theme toggle in the dashboard header. - Toast notifications now use
sonnervia a dedicatedtoaster-provider, replacing the oldreact-toastify/sweetalert2setup. - Introducing the
SerializedMediaserializer and a newMediaValidationRuleto standardize how uploaded files are validated and represented across requests, resources and the frontend. - New form field components generated for the dashboard, including a
date-picker(backed byreact-day-picker),checkbox,radio,textareaand reworked translatable inputs. - A new
FormLocaleProviderreplaces the old translatable inputs context to manage the active locale of translatable fields inside your forms.
What has been improved
- Upgraded the frontend toolchain:
Inertia React 3,Vite 8,TypeScript 7andTailwind CSS 4.3, withlucide-reacticons replacing the hand-written icon components. - Generated Models now use the
#[Fillable]attribute instead of the$fillablearray, matching Laravel 13 conventions and keeping model classes cleaner. - Auth flashes and redirects now use Inertia flash data instead of session flashes for a smoother SPA experience, and the auth screens ship with a dedicated
AuthLayout. - The
config/cubeta-starter.phppaths now usejoin_paths()so generation works consistently across operating systems. - Command execution inside the generator now runs through
proc_openinstead ofshell_exec, capturing both stdout and stderr and streaming output in real time for more reliable installs. - Improved log handling and caching in the generation engine for more reliable and readable output.
- Added richer static-analysis annotations (
#[ExpectedValues],#[FileReference]) across the source for a better developer experience when contributing to or extending the package. - Standardized all generated frontend file and import paths to lowercase for consistency.
Fixing some bugs
- Fixed
ApiSelecttyping and its handling of multiple-selection updates. - Fixed media handling and file serialization edge cases in the generated resources and casts.
- Various fixes across the generated Inertia pages, auth screens and dashboard components.
Notes / breaking changes
- The
cubeta-starter-templatespublish tag and its template-customization workflow have been removed. - The
policy_path/policy_namespaceconfig entries were removed fromconfig/cubeta-starter.php. - Because of the
shadcn/uirewrite, previously published dashboard components live under new lowercase paths , so re-publish the frontend assets when upgrading an existing project.
V 4.0.0
This version basically is a rewrite for the package and it was a massive rewrite so for that we make it a major
version update
- Fixed bugs in blade and react components
- Add more type safety to the generated code
- Improved class doc blocks
- Add prettier to format JSX and Blade files
- Introduce the new
Httpclass in Inertia React stack to normalize the request handling - Refactor MainTestCase class and TestHelpers trait to be able to chain the calls in your testing
V 3.0.0
- Adding support for the
Laravel 12and drop support for previous versions. - Adding support for
inertia.js 2.0and drop support for previous versions. - Adding support for
tailwindcss 4.0and drop support for previous versions. - Adding support for
react 19and drop support for previous versions. - Introduce
ApiResponseclass to replace theRestTraitto handle api responses - Introduce the new
MediaCastmode cast class to replace the usage of theFileHandlertrait - Bug fixes
V 2.2.0
- Adding support for the
Laravel 11and drop support for previous versions. - Bug fixes
V 2.1.0
- Introducing The
BaseBulkActionclass to make it easy to define your model available bulk actions . - Removing The BaseService and BaseRepository classes interfaces .
V 2.0.0
- Adding support generate dashboard CRUD'S using React , Typescript , Inertia.js , Tailwindcss
- Adding the ability to generate the code structure based on a version number via the package config file check here
- Updating the structure of the repository and service patterns to be instantiated using the singleton pattern and remove their dependency injection process
- Now just the blade based generation requires a service provider to register the blade components published via the package
- All required middlewares , exceptions handlers and service providers for a specific stack is being registered via its install command
V 1.1.7
fixing some bugs
- fixing the generated routes names for the generated controllers .
- now when publishing for api or for web 2 route files will be generated (
public,protected) to give more customizable routing instead of the generated route files based on the actor name .
V 1.1.6
- new attribute
exacthas been added to thegallery-itemblade component so if you'd like to provide the exact source of the image - add 2 new components
<x-translatable-text-editor />and<x-translatable-long-text-field />to handle the localized long text field (the ones those need text editors) - there is now three function for sweet alert messages
triggerSwallSuccess(message),triggerSwalError(message),triggerSwallMessage(message)so you can use them in your project after includingpublic/js/CustomFunctions.js, (in the generated dashboard this file is already included). - now there is a
cubeta-starter.config.jsonin the root directory of your project this will guid the package for some tables data, and it is a first step on the next feature which is (presets handling) . - we've added
create:examplecommand for those who are trying to se what the package capable of , this command will give you three option :- the first one is to create the Category model which has many products
- the second one is to create the Product model which related to brands by many to many relation
- finally the brands model
- we've tried to not generate a code that use a relation to a table not defined yet and then when it is defined we add the proper code (you can check that by running the command :
php artisan create:exampleand generate the product before the category) .
fixing some bugs
- remove
requiredattribute from the input fields in the generated edit forms - adding
.gallerycss class to thegallery-itemblade component so the functions in thepublic/js/PluginInitializer.jsfile can handle it.
V 1.1.5
- Now every input component has a
nameattribute this attribute is nullable, when it isnullthis attribute will take the value of thelabelattribute transformed to lower and snake case
V 1.1.4
- Making the columns of type translatable being cast into
Translatable::classcustom cast instead of generating an accessor for each translated column . you can find the custom castTranslatable::classafter publishingcubeta-starter-localetag in theapp/Castsdirectory
