The installer is bundled in the fireflyframework/larafly library. Its firefly new Symfony Console binary
uses the skeleton shipped in that same distribution, so creating an application needs no skeleton mirror.
composer global require fireflyframework/larafly
firefly new my-appSynopsis: firefly new [name] [--dev] [--force] [--git] [--no-git].
name(optional argument) — the target directory. If omitted, the command prompts for one interactively (default suggestionmy-app)..scaffolds into the current directory; an absolute path is used as-is, otherwise it's resolved relative to the current working directory.--dev— passes--stability=devthrough to the underlyingcomposer create-project, installing the latest development snapshot of the family instead of the latest tagged release.--force/-f— allows scaffolding into a directory that already exists and isn't empty. Without it,firefly newrefuses and exits with an error if the target directory has any entries.--git— initialize a git repository in the new project and make an initial commit (this is already the default behavior).--no-git— skip git initialization entirely.
On success, it prints the next two commands to run:
cd my-app
php artisan firefly:serve
firefly new does not scaffold anything itself — it is a thin orchestrator around two well-known commands,
run via its ProcessRunner seam:
-
Exactly the same command documented in Installation § Without the installer —
composer create-project firefly/skeleton <directory> --no-interaction --repository=<bundled-path-repository> [--stability=dev]
firefly/skeleton's ownpost-create-project-cmdhooks (.envcopy, sqlite file,key:generate,firefly:cache) run exactly the same way whether you invokecomposer create-projectyourself or go throughfirefly new. - If git initialization wasn't skipped:
run inside the newly created directory.
git init -q git add . git commit -q -m "Initial commit"
If the composer create-project step fails, firefly new reports the error and exits non-zero without
attempting git initialization.
The root manifest exposes packages/installer/bin/firefly as a Composer binary. Its autoloader supports
both Composer's installed proxy and direct execution in a source checkout. The installer reads the kernel
version for its bundled skeleton path repository; Deptrac permits that one framework dependency.
--with=testing also declares the external test harness in the generated application's development
requirements, because replacing firefly/testing does not install its old transitive requirements.
interface ProcessRunner
{
/**
* @param list<string> $command argv, first element is the program
* @return int the process exit code (0 = success)
*/
public function run(array $command, ?string $cwd = null): int;
}NewCommand depends only on this narrow interface, never on Symfony\Component\Process\Process directly —
SymfonyProcessRunner is the real shipped implementation (streams the child process's output through the
command's own OutputInterface), and the test suite swaps in a fake implementation to exercise NewCommand's
argument-building and control flow without ever shelling out to a real composer/git binary.
- CLI Reference — the
firefly:*Artisan commandsfirefly newscaffolds into your new app. - Installation — the full install-and-first-run walkthrough.