sjdaws/vocal
Vocal is a lightweight Laravel package for managing SEO meta tags from a single facade. Set titles, descriptions, and Open Graph or Twitter card tags per route or controller, with sensible defaults and Blade helpers for clean, search-friendly markup.
Vocal 2.0.0 is a ground-up rewrite, so treat it as a new package rather than a version bump. The 1.0.x line is what you want on Laravel 4.x or 5.0; 2.x targets Laravel 5 and drops PHP 5.3.
composer require sjdaws/vocal:^2.0 in a branch, not on master.config/app.php — this predates package auto-discovery, so nothing is wired up for you.php artisan vendor:publish then compare the new config file against whatever you had, rather than assuming the keys are identical.The best first use case is not "upgrade the app" — it is picking one isolated call site, porting it by hand against the readme's signatures, and getting a test green. That gives you a template for the remaining call sites and tells you how much of the rewrite actually leaks out of the public API.
Map old signatures to new ones before touching code. Build a two-column table in the PR description: old call (with positional args annotated) → new call. Do this by reading the readme, not by running the code. Because method names are unchanged, mistakes here do not throw — they silently pass the wrong value into the wrong slot.
Prefer named arguments (or an explicit array) at the call site. The parameters changed once; assume they can change again. Named arguments turn a future silent breakage into a hard error.
Wrap the package behind a thin application-level adapter. A single class or two that owns every Vocal call means the next rewrite is a one-file change instead of a grep across the codebase. This is cheap insurance specifically because 2.0 proved the package is willing to change parameter shapes.
Keep configuration in config/ and out of code. Use env-driven values for anything environment-specific so staging and production do not need separate call-site logic.
Test at your adapter boundary, not against package internals. The rewrite means internal classes and namespaces almost certainly moved even where the public facade stayed stable. Assertions written against internals will break on every minor release; assertions on your adapter's behavior will survive.
Pin the constraint. Use ^2.0 deliberately — and if you have any long-lived 1.x services, pin those to ^1.0 explicitly. Do not let a floating constraint drag an old service into a rewrite.
vendor:publish will clobber a customised config file. Copy the published file aside and diff it against yours so new or renamed keys are visible.How can I help you explore Laravel packages today?