async-aws/illuminate-queue
Use AWS SQS as your Laravel queue backend without pulling in the official AWS SDK. Built on AsyncAws, this package provides a lightweight SQS queue driver so you can dispatch and process jobs with async, non-blocking HTTP requests and a smaller dependency footprint.
This release (1.2.0) ships with notes that only point at CHANGELOG.md, so treat the changelog as the source of truth before you upgrade — but nothing in the version number suggests a breaking change, and day-to-day usage is unchanged.
composer require <vendor>/<package>, then open the package's composer.json and confirm the illuminate/* constraint actually covers your Laravel version. A package that "works" but is pinned to an older framework major is the most common source of silent breakage.extra.laravel.providers and extra.laravel.aliases. If present, you register nothing manually; if absent, add the provider to bootstrap/providers.php (Laravel 11+) or config/app.php.php artisan vendor:publish --provider="Vendor\Package\PackageServiceProvider" — run it with --tag=config first so you can see the defaults before migrations or views land in your app.CHANGELOG.md will tell you whether 1.2.0 is additive (new options, new methods) or a fix that changes behaviour. Diff the config file if it was republished.php artisan tinker is the fastest way to resolve the package out of the container (app(SomeClient::class)) and call one method.Where to look first, in order: src/*ServiceProvider.php (what's bound, what's published, what's registered), the config file (what's actually configurable), README.md examples, then the package's own tests/ — package tests are usually the most accurate documentation of intended usage.
Resolve from the container, never new. The package almost certainly binds an interface or a configured client in its provider. Inject it into controllers, jobs, and listeners rather than instantiating directly — that's what makes it swappable in tests and configurable per environment.
public function __construct(private PackageClient $client) {}
Keep configuration in config/, secrets in .env. Published package configs are plain PHP files; resist the urge to hardcode credentials there. Add your own keys to .env and reference them via env() inside the config file only — never call env() from application code, it returns null once configs are cached.
Wrap the package behind a thin seam. For anything non-trivial, put your own small service or action class in front of it. When 1.3.0 changes a method signature, you edit one file instead of grepping forty call sites.
Push slow work onto the queue. If the package makes HTTP calls, writes files, or talks to a third-party API, call it from a job with an explicit $tries, $backoff, and failed() handler. This is the single biggest day-to-1 reliability win when integrating a third-party package.
Use the facade for one-liners, injection for everything else. Facades are fine in controllers and Blade; constructor injection is what you want in services and jobs so tests can substitute the underlying binding.
Test with the package's fakes and Http::fake(). Most Laravel packages ship an assertSent-style fake or at minimum route through the HTTP client. In feature tests, config()->set('package.key', 'value') in setUp() beats republishing config per test.
protected function setUp(): void
{
parent::setUp();
config()->set('package.driver', 'null'); // deterministic in CI
}
Gate the integration per environment. Point the package at a sandbox/stub driver locally and in CI, and at the real thing only in staging/production. Keeps tests fast, keeps credentials out of laptops, and makes "it works locally" mean something.
Upgrade workflow for minor releases. Bump the constraint, run composer update <vendor>/<package>, then php artisan config:clear && php artisan cache:clear, then the full test suite. For a minor bump like 1.2.0 that's usually the whole ceremony.
vendor:publish writes the file but a cached config from a previous deploy will shadow it. php artisan config:clear is the first thing to try when a new config key "does nothing."php artisan migrate picks up new ones automatically. Know which model you're in before 1.3.0 adds a column.dont-discover in composer.json) disable discovery. Symptom is a clean Class not found for the provider after a composer update — check composer.json for a dont-discover entry before debugging deeper.scoped() in your own provider.composer diff won't help — check the GitHub compare view between tags) if you depend on undocumented behaviour. Anything not in the changelog is not covered by semver.dd() in register(), not boot(). Bindings must exist before dependent providers boot; a binding that "isn't there" usually means the package provider is ordered after the one that needs it.Log::debug() around the package, look for a logging/debug key in its config — most integrations have one and it's cheaper than a redeploy.vendor/ is never the answer, and a minor release will erase it.How can I help you explore Laravel packages today?