amethyst/core
Amethyst Core provides the foundational Laravel/PHP building blocks for the Amethyst stack, including service providers, shared contracts, configuration, and common utilities. Lightweight and extensible, it keeps shared concerns consistent across Amethyst packages and applications.
Architecture fit. amethyst/core is the kernel layer of the Amethyst micro-framework, not a Laravel package. It supplies the application/HTTP/console kernels, a service-provider registry, and a config repository — concepts deliberately modeled on Laravel's bootstrap lifecycle. That means it overlaps almost entirely with what Laravel already provides (Illuminate\Foundation, ServiceProvider, Repository). In a Laravel codebase it is redundant; in a non-Laravel PHP service it is a thin, opinionated bootstrap that would compete with Symfony's HttpKernel or a plain PSR-15 middleware stack. Fit is therefore poor in both directions: too much for a component library, too little (and too unmaintained) to be a framework bet.
Integration feasibility. Mechanically straightforward — it is a Composer package with no exotic extensions or build steps — but there is no integration surface worth pursuing. Amethyst's value only materializes if you adopt the whole framework (amethyst/framework, routing, HTTP, console), and that decision carries the full weight of an unmaintained dependency chain. Pulling in core alone yields a container plus kernels with no routing, no HTTP message implementation, and no ecosystem, so you would rebuild the rest yourself.
Technical risk. This is the dominant concern and it is severe:
zend-diactoros, zendframework/zend-*) that were renamed to Laminas and dropped support for older PHP. Old constraints will pin you to end-of-life PHP runtimes and unpatched CVE surfaces you cannot remediate upstream.Key questions.
composer.json rather than the README?Stack fit. Treat this as a no-go for adoption and a conditional-go for pattern borrowing. In a Laravel application, the correct move is to use Laravel's own kernels, container, and ServiceProvider — no integration needed. In a standalone PHP service, the correct move is Symfony HttpKernel + PSR-15 middleware + a maintained PSR-11 container, which delivers the same architecture with an active security posture. The only legitimate fit is a codebase that is already Amethyst-based.
Migration path. If already on Amethyst: do not extend the surface area. Freeze new framework-level investment, inventory every class that touches amethyst/core (kernels, providers, config access), and target an incremental extraction — replace the config repository with a PSR-compatible equivalent first (lowest coupling), then the container, then the HTTP kernel last. Each step should be independently shippable behind the existing bootstrap so the application stays deployable throughout.
Compatibility. Verify explicitly before any commitment: PHP constraint in composer.json, PSR-7/PSR-11/PSR-15 versions, and whether the pinned Zend/Laminas packages have known advisories. Run composer audit and a PHP-version matrix build as the gate. Expect the answer to require either a PHP downgrade (unacceptable) or an owned fork (a real, unbudgeted cost).
Sequencing. (1) Confirm the driver and whether an Amethyst footprint already exists. (2) If greenfield, close the evaluation and redirect to Laravel or Symfony components. (3) If inherited, run the compatibility audit and produce an effort estimate for an owned fork versus an extraction. (4) Prefer extraction; fund the fork only if the audit shows a short, bounded path. (5) Set an explicit decision date — dormancy does not improve with time.
Maintenance. All of it lands on us. There is no upstream to file issues against, no release train to track, and no vendor to escalate to. Every PHP minor-version bump, every security advisory in the dependency tree, and every behavioral bug becomes an internal ticket with no external reference implementation to compare against. Budget for a named owner; an unowned dormant framework in production is an accumulating liability.
Support. Effectively none. No maintainer response, no community channel with critical mass, no commercial backing. On-call engineers debugging a kernel-level failure will have only the source and their own reading of it. That is a materially worse incident posture than any maintained framework, and it should be priced into the on-call rotation explicitly.
Scaling. Architecturally unremarkable — request-per-process under PHP-FPM, so horizontal scaling behaves like any PHP app. The constraint is not throughput, it is talent and knowledge scaling: you cannot hire for Amethyst, onboard contractors onto it, or hand it to a managed platform with confidence. Team growth is capped by the number of people willing to read the framework source.
Failure modes. (a) PHP runtime upgrade breaks the package and blocks the platform roadmap; (b) a transitive dependency advisory with no patched path forces an emergency fork; (c) the single knowledgeable engineer leaves, taking undocumented framework behavior with them; (d) silent divergence as internal patches accumulate and the fork drifts from any upstream reference. Each is low-probability-per-quarter but high-impact and correlated — one PHP upgrade can trigger (a) and (b) simultaneously.
Ramp-up. Deceptively fast to read (small codebase, familiar Laravel-shaped idioms, ~a day for an experienced PHP engineer to understand the kernel) but slow to trust — there is no documentation ecosystem, no test corpus at scale, and no community precedent to validate decisions against. Realistic time-to-productive is short; time-to-confident is months of accumulated internal folklore.
Recommendation. Decline adoption in a Laravel/PHP context. The package adds no capability Laravel or Symfony does not already provide, and it converts a commodity decision into a bespoke maintenance obligation with zero ecosystem support. If an Amethyst footprint already exists, scope an extraction now rather than funding an indefinite fork.
How can I help you explore Laravel packages today?