Laravel Chisel — a post-install script library for starter kits
An introduction to laravel/chisel, a package that provides post-install script primitives for removing unwanted features from starter kits. Released as v0.1 in May 2026.
This article is based on source-code research. The package is at v0.1 and is still in early development (as of May 2026).
Laravel Chisel is a package that provides primitives for building post-install scripts to remove unwanted features from Laravel starter kits.Starter kits ship with many features preinstalled, but for some projects certain features are unnecessary. Chisel solves this by providing an interactive way to “keep only what you need” after installation.
A starter kit that uses Chisel places a chisel.php file at the project root. This file defines “which features are optional.”
<?phprequire getenv('LARAVEL_INSTALLER_AUTOLOADER');use Laravel\Chisel\Chisel;use Laravel\Chisel\Question;return Chisel::script(dirname(__DIR__)) ->questions([ Question::multiselect( name: 'auth_features', label: 'Which authentication features would you like to enable?', options: [ 'email-verification' => 'Email verification', ], hint: 'Use space to select, enter to confirm.', ), ]) ->selected('auth_features', 'email-verification', then: function (Chisel $c) { // When selected: strip the section markers and keep the code $c->files( 'resources/js/pages/settings/profile.tsx', 'app/Providers/FortifyServiceProvider.php', )->removeSectionMarkers('email-verification'); }, else: function (Chisel $c) { // When not selected: remove related files and features $c->php('app/Models/User.php') ->removeImport('Illuminate\Contracts\Auth\MustVerifyEmail') ->removeInterface('MustVerifyEmail'); $c->file('config/fortify.php')->removeLinesContaining('Features::emailVerification()'); $c->files( 'app/Providers/FortifyServiceProvider.php', 'resources/js/pages/settings/profile.tsx', )->removeSection('email-verification'); $c->files( 'resources/js/components/email-verification-notice.tsx', 'resources/js/pages/auth/verify-email.tsx', 'tests/Feature/Auth/EmailVerificationTest.php', 'tests/Feature/Auth/VerificationNotificationTest.php', )->delete(); }, );
collectAnswers() returns an answer collector. All methods are fluent and can be called in any order. In non-interactive environments, default values are used automatically.An external Artisan command displays prompts using Laravel Prompts and passes the answers to Chisel.
php($path) provides editing using PHP AST. Changes are saved automatically when the object is destroyed.For the basics of PHP AST (Abstract Syntax Tree) and using nikic/php-parser, see this article.
Development period: Released after three months of closed development
Chisel is not a package end users install directly into their Laravel apps—it’s a library that starter kits use internally. In the future, we can expect Laravel’s official starter kits to offer Chisel-powered post-install scripts.
laravel/chisel repository
Source code and the latest API reference.
Laravel starter kit official docs
See the official documentation for how to use the starter kits themselves.