- PHP 8.3+ (8.4 recommended).
- Composer 2.
- Laravel 13 — LaraFly is a set of Composer packages that layer onto a Laravel application; it is not a standalone runtime.
The fastest path is the global installer, firefly/installer — a thin firefly new binary (Symfony Console,
no Firefly runtime dependencies) that wraps composer create-project firefly/skeleton:
composer global require firefly/installer
firefly new my-app
cd my-app
php artisan firefly:servefirefly new accepts a target directory (defaults to prompting for one), --force to scaffold into a
non-empty directory, --dev to install the latest dev release of the family instead of a tagged release, and
--git/--no-git to control whether it git inits and makes an initial commit (on by default). See
Installer for the full flag reference and how it's built.
If you'd rather not install a global binary, composer create-project alone gets you the same result —
firefly new is a convenience wrapper around exactly this command:
composer create-project firefly/skeleton my-app
cd my-app
php artisan firefly:servefirefly/skeleton's composer.json wires post-create-project-cmd to run automatically, so by the time the
command above finishes you already have:
.envcopied from.env.example.database/database.sqlitecreated (touch).php artisan key:generate.php artisan firefly:cache— the zero-reflection compile step (see below).
A runnable Laravel 13 application, already on the cached, zero-reflection boot path:
- sqlite for the database and the array/sync drivers for cache/queue — zero external services required to boot.
- A
#[Controller]welcome page (the HTML stereotype) plus a sample#[RestController]+#[Service]pair wired end-to-end, sophp artisan firefly:servegives you a working page and a working JSON endpoint immediately. - A sample
#[ConfigProperties]DTO showing typed config binding. config/firefly.phpas a full, commented reference of everyfirefly.*key the framework reads.bootstrap/cache/firefly/already populated — every scanner→compiler pair (DI, routes, exception handlers, validation constraints, config properties, CQRS handlers, event/message listeners, scheduled tasks, security methods,#[Transactional]proxies) has already run, so the first request boots with no reflection at all. Re-runphp artisan firefly:cachewhenever you add or change an annotated class;php artisan firefly:cleardrops back to the in-process scan, which is slower per boot but functionally identical.
- Getting Started — write your first controller/service and understand the request lifecycle.
- CLI Reference — every
firefly:*command andmake:firefly-*generator.