Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Nova Log Viewer Laravel Package

iblacker/nova-log-viewer

A Laravel Nova tool for browsing and reading your application's log files directly from the Nova dashboard. Quickly inspect, search, and manage log entries without leaving the admin panel, making debugging and monitoring faster and more convenient for your team.

View on GitHub
Deep Wiki
Context7

Getting Started

Because v2.0 ships as "Initial Release" with no prior assessment and no package data on file, treat this as a first-contact evaluation rather than an upgrade. The first pass is about confirming the package is what it claims to be and that it installs cleanly on your stack.

  1. Install and pin. composer require <vendor>/<package>:2.0.* — pin to the minor rather than using a caret until you have a reason not to (see Gotchas on the versioning anomaly).
  2. Read these files first, in this order: composer.json (Laravel + PHP constraints, illuminate/* ranges, whether it's a metapackage), src/*ServiceProvider.php (what gets bound, registered, and published), config/*.php (the real public API surface of most Laravel packages), README.md, then CHANGELOG.md and tests/.
  3. Verify discovery before writing code. Check extra.laravel.providers and extra.laravel.aliases in the package's composer.json. If they're absent, you must register the provider manually in bootstrap/providers.php (Laravel 11+) or config/app.php.
  4. Publish everything, then diff it. Run php artisan vendor:publish --provider="Vendor\Package\PackageServiceProvider" and inspect what landed: config, migrations, views, lang files, stubs. Anything published is now yours to maintain — decide deliberately what to keep published.
  5. First use case: pick the single narrowest end-to-end path the README demonstrates (one model, one job, one HTTP call, one Blade component) and prove it works in a scratch route or a throwaway feature test. Do not integrate it into production code until that path is green.

If there is no README quickstart, that itself is a finding — note it and budget time for reading source.

Implementation Patterns

Resolve through the container, never new. If the package exposes a client/service/manager, inject it or resolve it via a facade. This is what makes it swappable in tests and what allows the package's own bindings to take effect.

Keep config in config/ and secrets in .env. Publish the config file, but never put credentials in it directly — reference env() only inside the config file itself (which means the config file must be published at deploy time, before config:cache).

Wrap it in a thin adapter of your own. A single app/Services/... class or interface that delegates to the package gives you one seam to change if the package stalls, is renamed, or you hit a v3. This costs ~30 lines and routinely pays for itself on a package with no release history.

Test the integration, not the package. Write one feature test that exercises your real usage (including migrations against your test database and the config you actually ship). Skip writing tests for package internals — those belong upstream.

For migrations: publish, read, then run. Review column types, indexes, and nullability before migrate. Publish into a timestamped migration so ordering is deterministic, and run them in CI as part of a full migrate:fresh to catch conflicts with your existing schema.

For queued/event-driven features: confirm the package's jobs are serialisable (no closures, no un-serialisable dependencies), and check whether it dispatches events you can hook into — those events are usually the cleanest extension point without touching vendor code.

Extension points, in order of preference: (1) package events/listeners, (2) interfaces bound in the service provider that you can re-bind, (3) macros on facades or builders, (4) config flags, (5) publishing and overriding views/stubs, (6) subclassing a bound class. Avoid (6) unless the class is documented as extensible.

Upgrade hygiene from day one. Record the exact installed version in your lockfile, and add a note in your repo's dependency log about why the package is there and what it would take to remove it. With no prior releases, you have no signal on the maintainer's backwards-compatibility discipline.

Gotchas and Tips

The version number is the first gotcha. A first-ever release numbered 2.0 is unusual. It usually means one of: the package was renamed/forked from something at 1.x, the history was reset or squashed, or the maintainer is signalling intent to freeze the API early. Each has consequences — a fork implies prior 1.x context may exist under a different name worth searching for; a history reset means no upgrade guide will ever exist for you to read. Pin exactly (2.0.*) until you've seen a 2.0.1 land and understood what changed in it.

config:cache will bite you. Any env() call outside a config file returns null once cached. If the package does this internally, it will appear to work in php artisan serve and fail in any deployed environment. Grep the package source for env( outside config/ before you ship.

Package discovery caching. After composer require, if the provider doesn't seem to register, run php artisan package:discover (and composer dump-autoload). In containerised CI, composer install must run before artisan is invoked at all.

vendor:publish overwrites silently with --force. Re-publishing after a patch release can wipe your local edits to config or views. Prefer --tag= scoping, keep a diff in review, and consider tracking published files so you notice changes.

Version constraint conflicts are the most common install failure. If composer require resolves to an old Laravel-compatible tag or refuses outright, run composer why-not <vendor>/<package> 2.0.0 to see the actual blocker rather than guessing. Check whether the package tracks illuminate/* (flexible) or laravel/framework (rigid).

Debugging: php artisan about shows discovered providers and cached config/route state; composer show --tree <vendor>/<package> shows its dependency footprint and whether it drags in anything heavy (HTTP clients, symfony/* components, a second copy of something you already have). For runtime issues, log the resolved class with get_class(app(SomeInterface::class)) to confirm which binding actually won.

Watch the dependency footprint. A package that pulls in a full HTTP client or a competing utility library can cause subtle version drift across your app. composer show --tree before, composer outdated after.

No tests in the package = lower trust threshold. If tests/ is thin or absent, assume integration behaviour is unverified upstream. Your own smoke test is the only safety net you'll have.

Document what you learn. Since there is no prior assessment to inherit and no upgrade guide, the notes you take now (published files, env vars required, extension points used) are the only thing standing between you and a painful re-read of vendor/ at the next release.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
frankyso/ipaymu
3mdikram/worldmoneywords
snowsoft/config
itmosoft/laravel-subscriptions
larva/laravel-ai-qwen
diephp/sequences
users-au/socialite-provider
twidpay/twid-logger
mrnewport/laravel-plaid
mrnewport/laravel-repo
mrnewport/laravel-docsign
mrnewport/laravel-stow
mrnewport/laravel-flow
mrnewport/laravel-priceable
mrnewport/laravel-nestedterms
fredmeng/laravel-apidoc-generator
itstructure/laravel-multilingual-tools
pdustdar/elasticsearch
markupai/php-sdk
rlacerda83/lumem-microservice-shipment