# Laravel Starter, a modular CMS-shaped boilerplate for Laravel with Livewire

> Laravel Starter is a Laravel 13.x starter project that ships the features nearly every application ends up writing, namely authentication, authorisation, user and role management, an application backend, backups and a log viewer, organised as reusable modules with the frontend and backend kept fully apart. The frontend stack is Vite, Tailwind 4 and PhotoSwipe, and the test suite is Pest.

**nasirkhan/laravel-starter** — A CMS like modular starter application project built with Laravel 13.x. and Livewire

- Repository: https://github.com/nasirkhan/laravel-starter
- Website: https://laravel.nasirkhn.com
- Stars: 1,403 · Forks: 463
- Language: PHP
- License: GPL-3.0
- Published: 2026-10-16 · Updated: 2026-10-16 · Language: en
- Canonical page: https://hysenlabs.com/projects/nasirkhan-laravel-starter

## What the starter gives you on day one

The project describes itself as a simple starter project based on Laravel 13.x, and the value proposition is the list of things nearly every application ends up writing anyway: Authentication, Authorisation, Users and Role management, Application Backend, Backup, and a Log viewer. The framing is deliberately not a framework, it is a template project intended to be built on, with the code structured so it can be extended rather than merely consumed. It ships as a Composer package on Packagist under the name nasirkhan/laravel-starter, and the repository has a live demo that is described as a straight installation of the project without modification, with two sets of credentials given for reaching the backend, one super admin account and one ordinary user account, both with the same password. The demo sits at the same URL as the project homepage, and the project also runs a StyleCI badge, so the code style is checked in CI.

```bash
php artisan starter:update
```

## Modularity is the actual architecture

The word modular is used seriously here. The project says you may use it as a base and build your own modules, and that a module can be used in any Laravel Starter based project, which is the property that makes a starter worth adopting rather than copying. Some modules are installed by default, and there is a modules_statuses.json file at the repository root tracking which ones are active, so the set of installed modules is declarative state rather than a pile of files. The commands for the lifecycle are the interesting part. Creating a module runs a module build command with the module name, and the --force option overwrites an existing module, replacing all the existing files with the default stub files. That last clause is a warning worth heeding, because a force rebuild discards whatever you wrote in a module. A separate update command handles the after-pull case, running composer update, checking for new module migrations, running outstanding migrations and clearing all the caches.

```bash
php artisan module:build MODULE_NAME

php artisan module:build MODULE_NAME --force
```

## Frontend and backend, fully separated

The separation is stated in one line and it is a real architectural commitment: frontend and backend are completely separated with separate routes, controllers, and themes as well. That is unusual for a starter kit, where most of them share a single route file and a single controller namespace, and it means the public-facing site and the administration panel are genuinely two applications sharing a codebase rather than one application with an admin area. The consequence for a team is that anything you write for the backend does not automatically apply to the frontend, and the same features have to be built twice when both need them. The upside is that the public surface stays small and the admin surface can be as opinionated as it likes, which is the arrangement most CMS-like products want. The default modules mentioned in the features list include admin features and public views, and the module form views for Post, Category and Tag appear in the table of where the image lightbox is used.

```
Here Frontend and Backend are completely separated with separate routes,
controllers, and themes as well.
```

## The frontend stack, and why npm is not optional

The JavaScript side is a Vite project using Tailwind 4, and the package file shows the whole dependency list. On the build side there is vite, laravel-vite-plugin, concurrently for running things in parallel, flowbite, tom-select, the Font Awesome free package, and popperjs. On the formatting side there is prettier with three plugins, one for Blade templates, one for Tailwind class ordering, and the shufo blade plugin, with a script that formats blade files with a glob. The runtime dependencies are small, just the Tailwind typography plugin and photoswipe at version 5. The project is explicit that npm is the supported package manager and warns against mixing npm and yarn lockfiles on the same checkout, because native packages such as esbuild and the Tailwind platform binaries can fail to resolve or unlink cleanly after a mixed install, especially on Windows. It gives a PowerShell recipe to clear the install state first if you really want to use yarn.

```json
"scripts": {
    "dev": "vite",
    "build": "vite build",
    "format": "prettier --write **/*.blade.php"
}
```

## PhotoSwipe, and the convention for gallery markup

The image lightbox is a case study in how the project handles a dependency change. The backend uses PhotoSwipe v5 as a zero-dependency image lightbox, replacing the jQuery-based Lightbox2 library used in earlier versions. The integration is initialised globally in resources/js/photoswipe.js and called from app-backend.js on both DOMContentLoaded and livewire:navigated, which is the detail that makes it work across Livewire page navigation rather than only on a full page load. Any element with the class pswp-gallery containing one or more anchor tags is picked up automatically, and clicking a thumbnail opens the full image with keyboard navigation, pinch to zoom and swipe gestures. The markup convention is a wrapper div with the class, an anchor whose href acts as a fallback if JavaScript is disabled, and a data-pswp-src attribute holding the full resolution image, with optional width and height attributes that are resolved automatically when the overlay opens if omitted.

```html
<div class="pswp-gallery">
    <a href="/path/to/full.jpg" data-pswp-src="/path/to/full.jpg">
        <img src="/path/to/thumb.jpg" class="rounded img-thumbnail" alt="" />
    </a>
</div>
```

## The seed data switch, and the environment file

The environment example file shows a project that is opinionated about defaults in a useful way. The database connection defaults to sqlite, the session driver to file with a lifetime of 120 and encryption off, the cache store to file, the queue connection to sync, the mail mailer to log, and broadcasting to log, so a fresh checkout runs with no external services at all. Two keys stand out. SEED_DUMMY_DATA controls whether to seed optional dummy data for the Post, Category and Tag modules, with the comment that essential data, meaning Users, Roles, Permissions and Menu, is always seeded, and the advice to set it to false in production or when you do not need sample content. And INITIAL_USERNAME is set to 100000, which looks like a starting point for generated identifiers. The file also wires up Facebook, GitHub and Google OAuth with per-provider active flags and redirect URLs pointing at a local laravel-starter.local domain.

```
# SEED_DUMMY_DATA controls whether to seed optional dummy data (Post, Category, Tag modules)
# Essential data (Users, Roles, Permissions, Menu) is always seeded
SEED_DUMMY_DATA=true
```

## Commands, tooling and the local environment

Beyond the module commands, the project provides a set of artisan commands that a developer would otherwise write for themselves. starter:update handles the after-pull path, clearing application caches including config, route, view and permission cache, with a composer clear-all alias for people who prefer Composer scripts, and a php artisan clear-all equivalent. Code style is handled by Laravel Pint, run through a composer pint script, so the style stays consistent with the framework, while prettier handles the blade templates through the npm run format script. The local environment is Sail-based, with a docker-compose file that builds the app image from the vendor laravel sail runtimes 8.3 context and runs MySQL 8.0, Redis on alpine, Meilisearch and Selenium as separate services, with a health check on the database using mysqladmin ping. The repository also carries setup.sh and setup.ps1 for bootstrapping, a .env.development, .env.staging and .env-sail alongside the example, and an UPGRADE.md and CHANGELOG.md for tracking framework moves.

```bash
php artisan clear-all

composer pint

npm run format
```

## Where it fits, and what to check first

The honest reading is that this is a CMS-shaped starter, and the module system is what you are really buying. If your application has admin screens, content types, roles and a public site, the work you skip is large, and the fact that modules are reusable across any Laravel Starter based project means you can extract your own features into modules and reuse them in the next project. If your application is an API, a single-page app with a JSON backend, or a small marketing site, this is the wrong shape and the module and theme machinery will be dead weight you delete. Two things to check first. The version tracking is tight, since the project follows the framework closely and the releases are versioned v13.12.0, v13.11.0 and v13.10.0 against Laravel 13.x, so you should pick the release matching your framework rather than the head of the branch. And the licence is GPL-3.0, which is a meaningful constraint for an organisation that ships a proprietary product built on a public starter, so read the LICENSE.md file before you adopt it as a base rather than a reference. The last push was on 2026-10-11 and the repository is not archived.

## Conclusion

Adopt Laravel Starter if you want a Laravel 13 application that already has authentication, roles and permissions, an admin backend and a module system, and you are prepared to delete the parts you do not want, and skip it if your application is a plain API or a small site, because a CMS-shaped starter with modules and a separate backend is more structure than such a project needs. Verify three things before you build on it: that the version you pull matches your Laravel version, since the project tracks the framework and the tags are versioned as v13.x.y; that the module commands behave as you expect, since starter:update runs composer update and applies migrations for you; and that the frontend and backend separation is what you want, because it means two route sets, two controllers and two themes to maintain rather than one.

## FAQ

### What does the Laravel Starter project include?

It is a Laravel 13.x starter with Authentication, Authorisation, Users and Role management, an Application Backend, Backup and a Log viewer. It is modular, so you can use it as a base and build your own modules, and a module can be used in any Laravel Starter based project.

### How do I create and update modules in Laravel Starter?

Create one with `php artisan module:build MODULE_NAME`, adding --force to overwrite an existing module with the default stub files. After pulling changes, run `php artisan starter:update`, which runs composer update, checks for new module migrations, runs outstanding migrations and clears the caches.

### Which frontend tools does Laravel Starter use?

Vite with Tailwind 4, Laravel Vite plugin, Flowbite, Tom Select, Font Awesome free and Prettier with Blade, Tailwind and shufo Blade plugins. PhotoSwipe v5 is a runtime dependency, replacing the earlier jQuery-based Lightbox2. The project says npm is the supported package manager and warns against mixing npm and yarn lockfiles.

### How are the frontend and backend separated in Laravel Starter?

The README states that frontend and backend are completely separated with separate routes, controllers, and themes as well, so the public site and the administration panel are two distinct sides of the same codebase rather than one application with an admin area.

## Sources

- [License: GPL-3.0](https://github.com/nasirkhan/laravel-starter/blob/main/LICENSE)
- [nasirkhan/laravel-starter on GitHub](https://github.com/nasirkhan/laravel-starter)
- [Project website](https://laravel.nasirkhn.com)
- [README](https://github.com/nasirkhan/laravel-starter/blob/main/README.md)
- [Releases](https://github.com/nasirkhan/laravel-starter/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/nasirkhan-laravel-starter
