feral/core
feral/core provides the shared foundation for the Feral Laravel/PHP ecosystem, including core utilities and integration points for building applications and companion packages. It is a lightweight base for projects using the Feral stack.
Architecture fit
The 1.0.0 release changes the packaging of feral/core, not its nature. It remains the open core of a no-code/low-code framework ("NoLoCo") rather than a Laravel package in the conventional sense. The architecture verdict is therefore unchanged, though one specific objection is now retired:
symfony/* from the dependency graph is a genuine, material improvement. A competing symfony/http-foundation or symfony/console pin is the classic way an unrelated package breaks a Laravel app's composer update. That specific contamination vector is now largely gone, and the release notes state the intent explicitly ("a true library available for any framework").Integration feasibility
Still low as a dependency; marginally better than before.
symfony/* and Docker lowers install friction and removes the most likely composer why-not failure. Confirm this with an actual composer why-not / composer install run rather than taking the release note at face value.Technical risk
| Risk | Severity | Notes |
|---|---|---|
| Abandonment | High | One release after ~3 years is a signal of life, not of sustainable maintenance; bus factor unchanged |
| Removed capabilities | High | Symfony/Routing/Console/HTTP primitives removed in a single cut with no stated replacement; feature regression is likely and undocumented |
| Security posture | High | Still no CVE feed or advisory path; verify whether newly vendored primitives replaced audited Symfony code |
| PHP/Laravel drift | Medium (was High) | Symfony removal materially reduces version-constraint conflict; verify PHP 8.3/8.4 and modern illuminate/* actually resolve |
| Integration surface (new) | High | "True library for any framework" means no glue is provided; every adapter is bespoke and yours to own |
| Documentation | High | Sparse, and now describes an API that changed at 1.0.0 — docs may lag the code |
| License/roadmap | Medium | Open-core split still unclarified at the 1.0.0 milestone |
| Code quality | Unknown | The release is a large subtractive refactor; audit the diff, not just the tag |
Key questions
composer.json at the 1.0.0 tag: what are the remaining require and require-dev entries, and what are the PHP and illuminate/* constraints? This is now a five-minute check and should be re-run.Stack fit
Still poor for in-process adoption inside a Laravel monolith, but the calculus has moved slightly in favour of the sidecar/library-in-isolation pattern. With Symfony constraints gone, feral/core is more plausibly embeddable in a controlled context — a standalone internal service, a CLI tool, a background generator — where you own the bootstrap. It is not more plausible as a composer require in the primary Laravel application, because the missing piece was never the dependency graph; it is the absence of any Laravel adapter and the paradigm mismatch underneath. Do not add it to the main application's composer.json.
Migration path
There is still no incumbent, so this remains a time-boxed spike, now with a mandatory re-audit step at the 1.0.0 tag rather than the 2022 snapshot the prior assessment was based on:
composer.json, read the diff between the last pre-1.0 release and 1.0.0, run the test suite, and catalogue exactly what the Symfony removal took with it. Re-run composer why-not laravel/framework against your target version.Compatibility
Constraint compatibility is now the easy part and should be trivially confirmable; the hard part is that "framework-agnostic" means no tested happy path exists on any framework, including Laravel. Budget for writing and owning a bridging layer — request/response adaptation, container wiring, config plumbing — and treat that bridge as first-class application code with tests. Verify a clean-machine composer install at the 1.0.0 tag; the removal of Docker means the reproducible environment is now yours to define.
Sequencing
Re-audit → POC → decision, strictly before any architectural commitment. The 1.0.0 signal is strong enough to justify running the spike and not strong enough to skip it. If the POC succeeds and the capability is strategically valuable, the correct move remains fork-and-own under Apache-2.0, budgeted as acquiring source code with a named maintainer. One positive change to the fork calculus: with Symfony vendored out, a fork has fewer third-party update obligations than it would have had a week ago. If the POC fails or the open-core boundary still excludes what you need, discard and evaluate Filament, Nova, or Statamic.
Maintenance
Still total and immediate on adoption, and the 1.0.0 refactor slightly increases the near-term load: you are picking up a codebase at the moment it was substantially rewritten, so the maintainer's own stabilization period overlaps with your evaluation. If the removal of Symfony involved in-house replacements for routing, HTTP, or DI, your team now maintains those too — code that previously at least had a large upstream community behind it. Estimate 0.25–0.5 FTE for a fork kept alive but not extended, unchanged, with the caveat that the first six months will sit at the top of that range while the 1.0.0 changes settle.
Support
Unchanged: no vendor SLA, no maintainer responsiveness track record, no forum. The one release in three years is not a support cadence. Internal escalation remains the only path, so the adopting team must contain someone who has read the source.
Scaling
Still unknown and unmeasured, and the 1.0.0 release does not help — removing Symfony may have removed caching or HTTP primitives you would otherwise have inherited. Metadata-driven runtimes typically resolve schema and compile views per request, so the POC must include a load test: p50/p95 latency at expected concurrency, plus behaviour under concurrent schema reads and cache-cold startup. Treat "framework-agnostic library" as implying you own the caching strategy.
Failure modes
Ramp-up
Still high and non-transferable. The 1.0.0 release arguably worsens it short-term: documentation written against the pre-1.0 layout (Symfony-flavoured, Docker-based) is now stale, so the team is learning a bespoke DSL and inferring the new bootstrap model from source. The skills acquired do not compound into Laravel or Symfony expertise. Contrast with Filament or Nova, where skills transfer across the ecosystem and hiring pool.
Recommendation
Do not adopt for production yet — but this release is the first genuine positive signal since 2022 and it earns a re-evaluation rather than a dismissal. The score should rise on dependency-compatibility grounds; it should not rise on maintenance, support, documentation, or strategic-clarity grounds, all of which are untouched. Removing symfony/* and Docker is exactly the right move for a library that wants to be embeddable, and it is the kind of change that suggests the maintainer is still engaged and thinking about consumers. One release does not establish a cadence, and a 1.0.0 tag with no dependents, no framework adapter, and no stated replacement for the deleted primitives is a claim awaiting validation.
The defensible action is a two-week evaluation — re-audit the 1.0.0 diff plus an isolated POC — with an explicit pre-committed decision gate. The Apache-2.0 license remains the package's single strongest asset and, if the framework's approach is strategically interesting, the correct posture is still forkable reference source rather than dependency.
How can I help you explore Laravel packages today?