Changelog
Release notes for both packages, pulled from each repo when this site is built.
Laravel UI Kit
From CHANGELOG.md in the repo. Versions follow semantic versioning.
All notable changes to shipbytes/laravel-ui-kit are documented here.
Format follows Keep a Changelog;
the project adheres to Semantic Versioning.
Published versions are immutable (Packagist enforces this): every publishable state gets a fresh tag. Pre-1.0, breaking changes bump the minor version.
Unreleased
Added
- Documentation screenshots.
npm run screenshots(scripts/screenshots.mjs) builds a fresh Laravel 12 app with every module, seeds it deterministically and photographs each screen in light and dark mode intodocs/images/, which shipbytes.dev copies at build time.
Fixed
ContactSubmissionnow usesHasFactory, soContactSubmission::factory()works as the README promised.- README: the impersonation module needs
Route::impersonate()registered in the app; the partials link to those routes.
0.2.1 - 2026-08-20
Added
ui-kit:make-admin {email?}— promotes a user to admin from the CLI: assigns the Spatieadminrole when theadmin-middlewaremodule is installed and sets theis_adminflag when the column exists. No email argument → the first user. Replaces the tinker one-liners in the docs.ui-kit:install-moduleaccepts multiple slugs — space- or comma-separated (ui-kit:install-module changelog contacts profile), withui-kit:install-modulesas an alias. The batch is validated before anything installs; one unknown slug aborts the whole run.
Changed
- The
UiKitUsertrait is applied toapp/Models/User.phpautomatically byui-kit:installand standaloneui-kit:install-moduleruns — no more manualuse UiKitUser;edit. The patch is idempotent and lint-checked (php -l); on any failure the file is reverted and the manual instruction is printed instead. The fresh-app CI job now asserts the auto-application instead ofsed-ing the trait in.
0.2.0 - 2026-08-20
Scope reset + audit-fix release. A full-codebase audit found v0.1.0 had never survived a real end-to-end install; this release narrows the kit to a fresh-Laravel-12 turnkey experience and fixes everything the audit surfaced.
Breaking — scope reset
- Laravel 12+ only. Constraints are now
php: ^8.2,illuminate/*: ^12 || ^13,laravel/fortify: ^1.25,laravel/prompts: ^0.3,livewire/livewire: ^3.6,livewire/volt: ^1.7,propaganistas/laravel-disposable-email: ^2.4. Laravel 10/11 support removed. - Analytics module removed (UTM tracking, GA4, PostHog) along with the provider-picker machinery, npm-install deferral, and the runtime services-config / UTM-middleware wiring.
- Tailwind CSS v4 native.
tailwind-preset.jsis gone; the kit ships a CSS-first@themetoken file (ui-kit-theme.css) plus a@custom-variantbindingdark:to the kit's class strategy. The@tailwindcss/formsdependency is gone (native controls styled viaaccent-color). - dark-mode module folded into core —
<x-theme-toggle />ships in core and the admin shell header includes it. - Socialite feature flag + social-buttons partial removed (they pointed at routes that never existed).
Fixed (full-codebase audit)
- Fresh installs no longer 500 on every core page:
route('home')calls were replaced byUiKit::homeUrl(), which falls back to/when the configured home route doesn't exist (guest layout, admin sidebar, all auth redirects, email verification, profile). - The generated
UiKitUsertrait is now written in the same process that installs the modules (installed-module state syncs to the runtime config). markInstalled()no longer round-tripsconfig/ui-kit.phpthroughvar_export—env()defaults and comments survive; only the slug list between/* ui-kit:modules-* */markers is patched.- The service provider only auto-loads route files carrying the
// ui-kit:managedheader — pre-existing Breeze or hand-rolledroutes/auth.phpfiles are never double-registered (this used to breakroute:cachethe moment the package was required). patchAdminNavpreserved only the newest module's entries — installing a second nav-declaring module wiped the first one's sidebar entry. Fixed and regression-tested.- Deferred install commands (storage:link, seeders, vendor publishes) lived
in trait statics, which PHP copies per using class — module-registered
deferrals never reached the parent installer's drain, so
storage:linkandAdminRoleSeedersilently never ran onui-kit:install. Queue moved to a sharedInstallQueueclass. - Re-running
ui-kit:installno longer trips the Breeze-collision preflight on the kit's own files: a kit-managed install is detected and the run switches to update mode (non-interactive re-runs now succeed). config/fortify.phppatching extended:views=false(as before), plushome => /(Fortify's/homedefault doesn't exist on fresh apps) and the passkeys feature commented out (the kit ships no passkey UI).- The kit's
verification.verifyroute yields to Fortify's when theemailVerificationfeature is enabled (duplicate names brokeroute:cache). - The core
is_adminmigration publish reuses an existing filename instead of stamping a new duplicate on every re-install; Fortify's (unguarded) 2FA migration publish is glob-guarded the same way. - Avatar uploads derive the file extension from the actual MIME type instead
of the client filename (a JPEG/PHP polyglot could previously land as
avatars/1.phpon the public disk). - Support ticket status/priority updates are validated against allowlists.
--modules=allworks; unknown module slugs abort with exit 1 instead of silently continuing.composeris resolved viaExecutableFinder(Windowscomposer.bat).- The activity-log nav icon (
clock) actually exists; Poppins/Montserrat fonts referenced by the theme are actually loaded. - Install tail commands (vendor:publish, migrate, db:seed, storage:link)
run in a fresh
php artisansubprocess when the run composer-required new packages — the running process's autoloader can't see them, which silently skipped Spatie's publishes and crashedAdminRoleSeeder. Caught by the new fresh-app CI job on its first run.
Added
- Working two-factor authentication end to end: Fortify's 2FA columns
are published and migrated by the installer; the generated
UiKitUsertrait bundlesTwoFactorAuthenticatablewhen the profile module is installed; the profile 2FA card gates onFeatures::canManageTwoFactorAuthentication()and supports Fortify's confirm flow (enable → QR → confirm code → recovery codes) via Fortify's own actions;LoginFormstages a challenge and the new/two-factor-challengeVolt page (TOTP + recovery code, rate limited) completes authentication. ui-kit:doctor— health check with fix hints: published files, managed route headers, Fortify flags, Vite imports, trait applied, storage link, 2FA columns, duplicate route names, mail config.layouts/user-shell.blade.php— light authenticated layout (brand bar, admin link for admins, theme toggle, logout);/profilerenders there instead of inside the admin shell.- Logout everywhere it was missing: admin sidebar footer gains a
current-user row with profile link + logout (posting to Fortify's
always-registered
logoutroute). - Vite auto-wiring: the installer adds the kit's CSS/JS imports to
resources/css/app.css/resources/js/app.jsidempotently. - Rate limiting: registration (10/hour/IP), the 2FA challenge, and
defensive
login/two-factornamed limiters for Fortify's own POST endpoints (which referenced limiters no fresh app defines). - Dark mode across the guest/auth pages (previously admin-only), with the no-flash snippet included by every kit layout.
- Model factories for SupportTicket, TicketReply, ChangelogEntry, ContactSubmission.
- Brand-mark fallback — layouts render an initial badge until a logo file exists.
- Tooling: Pint + Larastan (level 5) clean and enforced in CI; a
fresh-Laravel-12 end-to-end CI job (path-repo install,
--modules=all, npm build,route:cache, doctor, HTTP smoke); an in-repo end-to-end installer test plus HTTP render tests for the published pages.
Core (unchanged highlights)
ui-kit:install/ui-kit:install-module {slug}/ui-kit:list-moduleswith plain-STDIN pickers (reliable on Windows/WSL terminals).- 7 optional modules: admin-middleware, support-tickets, changelog, contacts, profile, impersonation, activity-log.
- Marker-based idempotent patching of
config/admin.php,routes/admin.php,routes/ui-kit-user.php. SidebarBadgeResolvercontract for host-app badge counts.
0.1.0 - 2026-04-24
Initial public release: core scaffold (Volt auth pages, admin shell, dashboard stub, users list) plus 9 optional modules — including analytics (UTM/GA4/PostHog) and dark-mode — on Laravel 10–13 with a Tailwind 3 preset, marker-based installers, and a PHP 8.1–8.4 × Laravel 10/11/12 CI matrix.
Superseded by 0.2.0, which removed the analytics module, dropped Laravel 10/11, moved to Tailwind v4, and fixed the install-breaking bugs found in audit — see its notes before upgrading.
Design System
Tagged releases, newest first. Release notes live on GitHub.
| Version | Date |
|---|---|
| v1.1.0 | 2026-08-27 |
| v1.0.0 | 2026-08-26 |