laravel/laravel
Tooling
The skeleton's tooling surface is small but opinionated. This page lists every tool the repo references, what it does, and how it's wired in.
PHP toolchain
Composer
The PHP package manager. composer.json declares both the runtime require (php ^8.3, laravel/framework ^13.7, laravel/tinker ^3.0) and a dev require list:
| Dev package | Purpose |
|---|---|
fakerphp/faker |
Faker library for database/factories/UserFactory.php |
laravel/pail |
Live log tailer — php artisan pail |
laravel/pao |
Recently added — see CHANGELOG.md v13.4.0 |
laravel/pint |
Code style fixer (Laravel preset) |
mockery/mockery |
Mocking library used by tests |
nunomaduro/collision |
Pretty exception output for the CLI |
phpunit/phpunit |
Test runner |
composer.json also defines the named scripts that contributors run:
"scripts": {
"setup": [...],
"dev": ["Composer\\Config::disableProcessTimeout", "npx concurrently ..."],
"test": ["@php artisan config:clear --ansi @no_additional_args", "@php artisan test"],
"post-autoload-dump": ["...", "@php artisan package:discover --ansi"],
"post-update-cmd": ["@php artisan vendor:publish --tag=laravel-assets --ansi --force"],
"post-root-package-install": ["...copy .env.example..."],
"post-create-project-cmd": ["...key:generate, touch sqlite, migrate..."],
"pre-package-uninstall": ["..."]
}The Composer\\Config::disableProcessTimeout token in dev is a special Composer directive that disables the default 5-minute script timeout (otherwise the concurrently invocation would be killed mid-development).
Artisan
The framework's CLI. artisan is the entry-point script:
php artisan list # all commands
php artisan help <command> # help for one
php artisan --version # framework versionImportant built-in commands the skeleton uses:
| Command | Used by / for |
|---|---|
serve |
composer dev — runs PHP's built-in server |
key:generate |
composer setup, post-create-project-cmd |
migrate, migrate:fresh, migrate:rollback |
DB schema management |
db:seed |
Run database/seeders/DatabaseSeeder |
queue:listen, queue:work, queue:retry, queue:flush |
Queue worker control |
pail |
composer dev — log tailer |
tinker |
REPL |
config:clear, config:cache |
Manage bootstrap/cache/config.php |
route:list, route:cache, route:clear |
Routing introspection / caching |
view:clear, view:cache |
Manage storage/framework/views/ |
optimize, optimize:clear |
Bulk cache / clear |
vendor:publish |
Publish package assets/configs |
package:discover |
Detect auto-discovered providers/aliases |
Pint
Code style fixer, distributed by Laravel. The repo's preset is configured by .styleci.yml:
php:
preset: laravel
disabled:
- no_unused_imports
finder:
not-name:
- index.php
js: true
css: trueRun it:
vendor/bin/pint # fix everything
vendor/bin/pint --test # check only, exit non-zero on violations
vendor/bin/pint --dirty # only files modified vs the working tree
vendor/bin/pint app/ # path-scopedThere's no pre-commit hook bundled — running it before pushing is on you.
Pail
Real-time log tailer. Lives in composer.json requires-dev. Runs in the composer dev script alongside the web server, queue listener, and Vite. Reads from storage/logs/laravel.log (or whatever channel is active per config/logging.php).
php artisan pail
php artisan pail --level=error
php artisan pail --filter=User
php artisan pail --auth=42 # filter to a specific authenticated userTinker
REPL for the booted application:
php artisan tinkerlaravel/tinker is a runtime requirement (not dev-only), so it's available in every environment. Don't ship code that depends on it — it's a tool, not a library.
Collision
nunomaduro/collision formats unhandled CLI exceptions. You don't invoke it directly — it's wired in by Laravel's exception handler whenever the app runs in CLI mode.
Frontend toolchain
Vite 8
Frontend dev server and build tool. Config in vite.config.js:
plugins: [
laravel({
input: ['resources/css/app.css', 'resources/js/app.js'],
refresh: true,
fonts: [bunny('Instrument Sans', { weights: [400, 500, 600] })],
}),
tailwindcss(),
],
server: {
watch: {
ignored: ['**/storage/framework/views/**'],
},
},| Plugin | Purpose |
|---|---|
laravel-vite-plugin |
Maps Blade's @vite directive to dev/built asset URLs |
laravel-vite-plugin/fonts/bunny |
Pulls Instrument Sans from fonts.bunny.net at build time |
@tailwindcss/vite |
Tailwind v4 (no PostCSS, no separate config — pure plugin) |
npm run dev # vite dev server with HMR; writes public/hot
npm run build # production build → public/build/Tailwind v4
Entry imported in resources/css/app.css:
@import 'tailwindcss';No tailwind.config.js — v4 reads everything from CSS via @source and @theme directives. The skeleton sets one custom theme variable (--font-sans) and four @source globs.
npm
.npmrc is short but opinionated:
ignore-scripts=true
audit=trueBoth flags are security postures (added 2026-04-01 and 2026-04-15 respectively). package.json declares "type": "module", two dev scripts (build and dev), and zero runtime dependencies — only devDependencies.
CI / automation
.github/workflows/tests.yml
Runs php artisan test against PHP 8.3, 8.4, and 8.5 on every push and pull request. The matrix is short and the steps are explicit:
strategy:
fail-fast: true
matrix:
php: [8.3, 8.4, 8.5].github/workflows/issues.yml
Triggers on issues: types: [labeled]. Delegates to laravel/.github/.github/workflows/issues.yml@main — the actual policy lives in laravel/.github, not here.
.github/workflows/pull-requests.yml
Triggers on pull_request_target: types: [opened]. Delegates to the same laravel/.github reusable workflow.
.github/workflows/update-changelog.yml
Triggers on release: types: [released]. After a tagged release, the workflow regenerates CHANGELOG.md and commits the update via github-actions[bot].
File-format tools
EditorConfig
.editorconfig enforces 4-space PHP indentation, 2-space YAML indentation, LF line endings, UTF-8 charset, and trailing-whitespace stripping (except for Markdown). Most editors auto-pick it up.
Git attributes
.gitattributes enforces LF line endings (* text=auto eol=lf), declares language-specific diffs (*.php diff=php, *.blade.php diff=html, *.md diff=markdown, *.css diff=css, *.html diff=html), and excludes .github/, CHANGELOG.md, and .styleci.yml from composer archive exports.
What is not here
The skeleton intentionally omits:
- No PHPStan / Psalm / static analysis by default. Add
phpstan/phpstanin dev if you want it. - No Husky / lint-staged / pre-commit hooks. Style and tests are runtime/CI checks.
- No Pest (yet). The bundled test runner is PHPUnit. The PR history shows the team is happy to add Pest if a contributor proposes it correctly, but the default remains PHPUnit.
- No Docker / docker-compose. Laravel Sail (
laravel/sail) is a separate package that gets pulled in optionally — it isn't a default dependency in this skeleton. - No Telescope / Pulse / Horizon. All three are first-party Laravel packages but they're add-ons, not skeleton defaults. The
phpunit.xml<env>block proactively disables them so they don't break tests if you install them later.
Built by Factory AutoWiki from public repository content. It is a generated preview for codebase exploration, not source-maintained documentation.