Skip to content

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.

bash
composer require faran/pulsar --dev
vendor/bin/pulsar install --dry-run
vendor/bin/pulsar install
vendor/bin/pulsar install

For 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.

txt
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.php

Apply 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.

txt
Pulsar installed successfully
Updated: app/Providers/PulsarServiceProvider.php
Updated: bootstrap/providers.php
Updated: bootstrap/app.php
Backup: bootstrap/app.php.pulsar.bak

The 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.

txt
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.

php
->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.