innmind/foundation
Foundation provides the core bootstrapping layer for InnMind PHP applications: configuration loading, dependency injection, service wiring, and application lifecycle primitives that let you compose packages into a consistent, testable runtime without framework overhead.
composer require innmind/foundation — but check your PHP version first. As of 2.2.0 the package no longer supports PHP 8.4; you need 8.1–8.3. If composer require fails with a constraint conflict, run composer why-not innmind/foundation 2.2.0 before assuming it's a Laravel conflict.config/foundation.php to publish, and no facade. This is a framework-agnostic package that ships its own bootstrapping/composition concepts. Do not expect php artisan vendor:publish to do anything useful.src/ — the entry points are the bootstrap/composition classes, not controllers or models. Skim the public interfaces before reading implementations.composer show innmind/foundation and confirm the resolved version. If you're on PHP 8.4 you'll be pinned to 2.1.0 or lower, and you should decide that deliberately rather than discovering it in CI.register()/boot(), then inject the result. Avoid building them lazily inside request handlers where failures surface mid-response.new and no RefreshDatabase, no CreatesApplication, no container. Write those tests first; they're what justifies the dependency."innmind/foundation": "^2.2" and, in CI/Docker/Herd, pin PHP to 8.3.*. Add composer update --dry-run to your pre-merge checks — this is the sort of transitive dependency that gets bumped by an unrelated composer update and takes the build down.composer.json comment or an ADR explaining why, and watch upstream for a re-add. Don't fork for a version constraint.Dockerfile base image, Herd/Valet/Sail PHP version, and any monorepo packages with a different php constraint.storage/logs/laravel.log may be empty. Reproduce in a plain php script.php and read the raw stack trace.$this->app->bind(SomeInnmindInterface::class, ...) will appear to work and then be ignored, because the package resolves through its own mechanism. Read how the package wires itself before assuming Laravel's container participates.composer why innmind/foundation — if it only arrives transitively and you're not calling it, remove the caller rather than adopting the constraint.dd($value::class)), not just the value. These packages lean on small value objects and interfaces, and var_dump output is uninformative compared to knowing which implementation you actually got.^2.1 constraint silently became un-installable for PHP 8.4 consumers on this release; consider >=2.1 <2.2 || ^2.2 style ranges only if upstream confirms 8.4 returns.How can I help you explore Laravel packages today?