liran-co/laravel-intercom
Laravel Intercom offers a fluent, Laravel-friendly wrapper for the Intercom API, making it easy to manage contacts, companies, tags, events, and conversations from your app. Includes configuration, facades, and helpers for quick integration.
Start by confirming the version constraint in composer.json. v1.6.2 is the first release to declare Laravel 11 compatibility, so the practical first step is a dependency bump:
composer require your-vendor/your-package:^1.6.2
Before anything else, run composer why-not your-vendor/your-package 1.6.2 on an existing Laravel 11 app. The most common blocker is a transitive dependency (often a test/analysis tool) that still pins laravel/framework to ^10.0. Fixing that constraint is usually the whole upgrade.
Where to look first:
composer.json of the package — check the illuminate/* constraints explicitly. "Laravel 11 support" normally means the constraint widened to ^10.0|^11.0 rather than a rewrite; you want to verify that, because a widened constraint with no code changes can hide runtime deprecations.CHANGELOG / upgrade notes — v1.6.2 is a patch release, so there should be no API changes. Confirm that no BC BREAK or Deprecated entries appear under 1.6.x.config/ publishing — Laravel 11's slim skeleton no longer ships a config directory by default. If the package publishes a config file, run php artisan vendor:publish --tag=<package>-config and confirm the tag still exists.First use case: install into a fresh laravel/laravel 11 app and exercise the package's primary entry point (the facade, helper, or artisan command it exposes) in a feature test before touching your real application. A five-line smoke test tells you more about L11 compatibility than the changelog does.
Version-pinned CI matrix. Run the package against both L10 and L11 in CI. Even though the package declares support, L11 ships PHP 8.2 as a floor and changes several framework internals, so a matrix of {L10 + PHP 8.1, L11 + PHP 8.2, L11 + PHP 8.3} catches the realistic failure modes.
Bootstrap-based registration. L11 moved service provider registration and middleware configuration into bootstrap/app.php. If you were previously registering the package provider manually in config/app.php, remove that entry and rely on package auto-discovery, or register it explicitly via ->withProviders([...]) in bootstrap/app.php. Mixing both approaches produces a double registration and, in packages that bind singletons, subtle "two different instances" bugs.
Feature-flag the upgrade. If you maintain a multi-tenant codebase where some apps are still on L10, keep the package constraint at ^1.6.2 and branch internally on Illuminate\Foundation\Application::VERSION only for the narrow cases where the framework API genuinely differs. Prefer letting Composer resolve the right version over runtime version checks.
Test against the real app skeleton, not just the package's own suite. The package's tests passing on L11 proves the package works in isolation. Mirror your application's bootstrap/app.php and middleware stack in the test harness to prove it works in context — the failures cluster around middleware ordering and exception handling, not around the package's unit tests.
Config caching in deployment. Run php artisan config:cache immediately after adding the package in a deploy pipeline. L11's default config set is smaller, and packages that read config() at construction time (rather than lazily) will surface missing-config errors only under caching. Catch that in staging.
A patch-level "Laravel 11 support" release is a constraint change, not a rewrite. That is good news, but it also means the framework-level breakages L11 introduced were not necessarily audited by the maintainers. The two that bite Laravel packages most often are: removal of doctrine/dbal (any ->change() on a column without a native type will throw at runtime, not at install) and the default removal of config/*.php files (packages that read config keys with no default now get null).
Do not assume the constraint is correct — read it. A package can declare ^11.0 while still calling a deprecated method that only warns on L10 but throws on L11 under strict deprecation handling. After install, run your test suite with APP_DEBUG=true and PHP's deprecation reporting at E_ALL, then grep the log. Silence in a patch release is not proof of cleanliness.
Debugging install failures. When composer require refuses to resolve, composer why-not is the fastest signal. When it resolves but things break at runtime, php artisan about under L11 gives you the resolved framework version, cache state, and provider count — compare the provider count against L10 to catch silently unregistered providers.
Publishing and config quirks. If the package's config file is missing in L11 (because the skeleton no longer has a config/ directory), the package should be falling back to mergeConfigFrom defaults. Verify this by setting an obviously bogus value and checking that the package's own default still applies when the key is absent. Packages that use config('package.key') with no fallback are the single most common L11 regression.
Extension points. Since this is a patch release, use the package's existing extension points rather than patching it: bind an interface override in a service provider, use the published config, or leverage an event/hook. If you find yourself needing to fork the package to make it work on L11, that is a signal to file an issue against v1.6.2 rather than carrying a vendored fork — the next patch will likely conflict.
Pin to ^1.6.2 with care. If 1.6.0 or 1.6.1 contained the L11 work and 1.6.2 is a follow-up fix, ^1.6.2 is correct. If the L11 support landed in a later patch than the notes suggest, verify with composer show your-vendor/your-package --all before rolling out to production, and lock the resolved version in composer.lock as usual.
How can I help you explore Laravel packages today?