cartalyst/settings
Cartalyst Settings is a Laravel package for database-backed application settings, offering a simple key-value API to store, retrieve, and manage configuration values at runtime.
composer require <vendor>/<package>:^5.1. This release adds PHP 8 support, so confirm your app's composer.json requires php: ^8.0 (or a range including it) before upgrading — Composer will otherwise resolve you back to a 5.0.x tag and you'll spend time debugging a version you aren't actually running.composer show <vendor>/<package> and check the resolved version and its PHP constraint. If you were pinned to ^5.0, widen to ^5.1 explicitly rather than relying on a transitive bump.src/*ServiceProvider.php for register() vs boot() behaviour: what gets bound as a singleton, what's published (config, migrations, views, assets), and whether anything is deferred. That answers most "why isn't my config change taking effect" questions up front.php artisan vendor:publish --provider="Vendor\Package\PackageServiceProvider" --tag=config (and --tag=migrations separately). Blanket vendor:publish without a tag can overwrite files you've already customised on the next upgrade.php artisan tinker before wiring it into a controller, call its simplest method against a throwaway record, and confirm the result. This isolates "package works" from "my integration works" — the two failures look identical from a stack trace.app(Contract::class) over new PackageClass(...). The package's provider almost certainly binds a configured instance; new bypasses config, test doubles, and any decorators that get registered later.Facade::shouldReceive() ceremony.App\Services\... class that owns the package calls means the eventual v6 breaking change is one file to update, not a grep across forty. This is cheap insurance for anything used in more than one or two places.handle().swap() in setUp() rather than hitting the network. If the package ships its own testing helpers or fake, use those first — they'll track upstream behaviour changes. For DB-touching packages, use RefreshDatabase and confirm published migrations run cleanly on SQLite in-memory if that's your CI default.config/. Read tunables from config('<package>.php') in your own code rather than duplicating magic values, and set environment-specific overrides in .env where the package's config file supports env().php in composer.json and let CI verify both your minimum and maximum supported minors. Run the upgrade on a branch with composer update <vendor>/<package> -W to see whether dependencies need nudging.str_contains-style native functions, and stricter type errors can change results for code that previously coerced silently — including code inside this package that was never designed for 8.x. Run your full suite, not just the package's tests.php artisan config:clear (or config:cache in the deploy script) — otherwise your change appears to do nothing. Same story for route:cache if the package registers routes.config('<package>') — a null from an unset env() is the most common cause.^5.0 || ^5.1 (or ^5.1) and avoid dev-main, or downstream users hit constraint conflicts with your other dependencies.Macroable trait on the main class before editing vendor code. Most day-to-day customisation belongs in a decorated binding in your own provider.git diff after re-publishing to a scratch directory) so future upgrades show exactly which defaults changed — particularly useful now that the 5.0 → 5.1 jump changes the supported runtime.How can I help you explore Laravel packages today?