honeybadger-io/nova-honeybadger
Monitor your Laravel app's errors without leaving Nova. This Honeybadger integration surfaces recent faults and exception details right in your dashboard, so your team can spot, investigate, and resolve issues faster.
Version 0.0.1 is an initial release — there is no changelog history, no documented API surface, and no established compatibility contract. Treat the first hour as due diligence rather than integration.
composer.json before installing. The only reliable compatibility signal at 0.0.1 is the constraint block. Check require.php, require.illuminate/* (or laravel/framework), and the extra.laravel.providers / extra.laravel.aliases keys. If the illuminate/* constraints are loose (^10.0|^11.0) assume they were guessed, not tested.composer require vendor/package:0.0.1 --prefer-dist. Note the Composer caret trap: ^0.0.1 resolves to >=0.0.1 <0.0.2, and ^0.1.0 to <0.2.0 — pre-1.0 caret constraints are far tighter than most developers expect, and 0.0.x patch bumps are where breaking changes actually land.php artisan package:discover --ansi explicitly so you can see whether auto-discovery fires or silently doesn't.composer show -a vendor/package for the file list, then look for config/, database/migrations/, routes/, src/Providers/, and any README. At 0.0.1 these are the entire documentation.php artisan tinker before wiring it into a request path. You are validating that the service container bindings resolve and that nothing throws on boot.The realistic first-run loop is: publish config, boot the app, call one method, inspect the exception trace. Budget for that rather than for a working integration.
Adapter-wrap everything. At 0.0.x the package has made no backward-compatibility commitment. Do not reference its classes or facades directly from controllers, models, or jobs. Define your own narrow interface in app/Contracts/, implement it in a small app/Services/*Adapter that delegates to the package, and bind the implementation in a dedicated application service provider. When 0.0.2 renames a method, you change one file.
Resolve from the container, never new. If the package registers a singleton or a driver/manager, app(Contract::class) keeps you compatible with any future binding changes and makes the swap to a test double trivial. Direct instantiation couples you to a constructor signature that is very likely to change.
Publish config, then stop editing the vendor copy. Use php artisan vendor:publish --provider="Vendor\Package\PackageServiceProvider" rather than guessing a --tag. Publish first, then make every tweak in config/package.php and back it with an env var. Keep a short comment in that file noting the package version it was published from — published configs are not automatically updated on upgrade, and a stale config is the most common post-upgrade failure.
Isolate behind a feature flag. A config-driven flag (config('features.package_x')) around the call sites costs nothing on day one and gives you a one-line rollback that doesn't require a deploy revert when a patch release misbehaves.
Test at the boundary. Use orchestra/testbench if you need to assert on the package's own behaviour, but in application tests prefer faking your adapter. If the package ships anything stateful (an HTTP client, a cache, a queue interaction), check for a ::fake() helper or Http::fake() coverage before writing integration tests against the real implementation.
Upgrade with evidence. Pin the version, and when 0.0.2 arrives, diff vendor/vendor/package between the two tags (composer show -a lists the version, or diff the GitHub tags directly) before bumping. With no changelog, the source diff is the changelog.
composer.lock is the only thing protecting you; commit it and don't run composer update broadly while the package is pre-1.0.extra.laravel.providers is missing from composer.json, you must register the provider in bootstrap/providers.php (Laravel 11+) or config/app.php (10 and below). A "class not found" at boot is usually this, not a broken package.config/app.php's aliases array is gone. Docs and snippets written against L9/L10 will mention registering alias entries that no longer exist.php artisan config:cache will freeze the package config. If a value appears ignored in production but works locally, you are looking at a stale config cache — php artisan config:clear first, before debugging the package.down() methods are stubs, migrate:rollback can leave orphaned tables. Snapshot the database before the first migrate on a non-local environment.php artisan about --only=environment for the resolved provider list, php artisan package:discover -v for discovery failures, and APP_DEBUG=true plus Log::debug() inside the adapter for binding issues. composer dump-autoload -o resolves a surprising number of "class not found" reports that are really stale autoload maps.Macroable, whether there's a manager/driver pattern with a public extend() method, and whether container bindings are singleton or bind. At 0.0.1 the entire source is readable in a few minutes — do that now, because it will not stay small.How can I help you explore Laravel packages today?