Install Pulsar
You will install and wire Pulsar from a supported Laravel application root without hand-editing a successful installer result.
Resolve the package
First complete the prerequisite checks. Then run the unversioned Packagist instruction and the installer sequence from the application root.
Context: supported application root — Resolve Pulsar, preview installation, apply it, and verify the second run.
composer require faran/pulsar --dev
vendor/bin/pulsar install --dry-run
vendor/bin/pulsar install
vendor/bin/pulsar installFor this documentation execution, the require invocation selected v0.4.1 at source and dist reference fc14af65381c9bcd7fc99b05f893cef0344dad54 and wrote ^0.4.1 to require-dev. Inspect the lock entry, not vendor/, when confirming resolution.
Preview without writing
install --dry-run plans and validates all three mutations before any write. It exits 0, reports that no files changed, and prints full-file unified diffs in this order: the application-wide Pulsar provider, the provider list, then the Laravel application builder. No backup is created.
Context: normalized output — A focused excerpt names the three diffs; the offline check retains every diff line.
Dry run only; no files were changed.
--- /dev/null
+++ b/app/Providers/PulsarServiceProvider.php
--- a/bootstrap/providers.php
+++ b/bootstrap/providers.php
--- a/bootstrap/app.php
+++ b/bootstrap/app.phpApply once, then rerun
The first ordinary run creates or changes exactly the three planned paths. It preserves a pre-change copy of bootstrap/app.php; occupied backup names advance to .pulsar.bak.1, .2, and so on.
Context: normalized output — A fresh successful install reports the ordered writes and backup.
Pulsar installed successfully
Updated: app/Providers/PulsarServiceProvider.php
Updated: bootstrap/providers.php
Updated: bootstrap/app.php
Backup: bootstrap/app.php.pulsar.bakThe second run recognizes the generated wiring, exits 0, makes no write, creates no backup, and never duplicates a provider or discovery path.
Context: normalized output — An idempotent rerun has one stable line.
Pulsar is already installed; no changes were needed.Existing providers and --force
Without --force, an existing app/Providers/PulsarServiceProvider.php is preserved even when customized. Use --force only to restore that generated provider: it overwrites local changes there, while preserving unduplicated working bootstrap wiring. It creates no application backup when bootstrap/app.php does not change.
The duplicate check recognizes the fully qualified App\Providers\PulsarServiceProvider::class entry. If the provider list imports the class and uses PulsarServiceProvider::class, first normalize it to the fully qualified entry so one semantic registration remains.
When the installer refuses
If a bootstrap file is missing, the Application::configure() chain is unsupported, a wiring call occurs more than once, or an existing argument cannot be merged safely, installation exits 1 after planning and writes nothing. Do not use --force to bypass that refusal.
The failure prints the precise reason followed by the checked fallback form:
bootstrap/app.php — Manual recovery calls shown only after a no-write refusal.
->withEvents(discover: [ app_path('Pulsar/Domain/*/Listeners') ])
->withCommands([ ...(glob(app_path('Pulsar/Services/*/Modules/*/Commands'), GLOB_ONLYDIR) ?: []) ])Then list App\Providers\PulsarServiceProvider::class once in bootstrap/providers.php and run php artisan about. A successful boot checks the manual wiring can load; rerunning the installer cannot validate an unsupported custom chain.