nyoncode/wire-core
Core foundations for the nyoncode/wire package family, offering shared utilities, helpers, and base abstractions that simplify building Laravel and Livewire applications while keeping wire-powered projects consistent.
Architecture fit. wire-core targets a well-defined seam in Laravel/Livewire applications: the repetitive scaffolding around base components, invokable actions, modal state, notification dispatch, and design tokens (icons, semantic colors). That shape is correct for a shared foundation and matches how mature Livewire codebases are structured. The problem is that the package occupies the foundation tier — the layer every other component inherits from — and foundation-tier dependencies carry the highest bar for stability. At zero stars, zero dependents, no published documentation, and no evident CI or release history, this package is not yet a foundation. It is a reference implementation: a working articulation of patterns we would otherwise have to design ourselves. The architecture fits; the artifact does not yet merit the position.
Integration feasibility. Technically straightforward — Composer install, service provider auto-discovery via extra.laravel.providers, optional config/view publishing, and trait composition on a base component. Mechanically this is an afternoon. Practically, feasibility is gated by two unknowns we must resolve before committing: (1) whether tagged semver releases exist or the install ref is dev-main, and (2) whether the require block pins laravel/framework and php constraints to ranges we actually run. If either answer is unsatisfactory, feasibility collapses to "vendor the source we need under MIT." No documentation means the source is the spec; onboarding cost is reading time, not integration time.
Technical risk. Ranked, highest first:
dev-main-only package cannot be constrained with ^. Any upstream commit can land in the next composer update with no changelog, no CI, and no semver signal.Key questions.
require block constrain laravel/framework and php to ranges we support?Stack fit. Presupposes Laravel 10/11, PHP 8.1+, Blade componentization with Livewire, and Tailwind for the color tokens. If our portfolio is already on that stack, the fit is clean. If we run mixed framework versions or have a non-Tailwind design system, the token layer is inert and only the action/modal traits carry value — which is a much smaller prize.
Migration path. Two viable paths, and they should be chosen deliberately:
App\Livewire\WireComponent wrapper rather than the vendor base directly, and funnel icon resolution through an App\Support\Icon facade. Every component extends our wrapper. Blast radius if we rip it out: one file plus use statements.Compatibility. Three checks gate adoption, in order: tagged release availability, declared framework/PHP constraints, and a reflection diff of the package's trait method surface against our existing base classes. The diff is fifteen minutes of work and prevents an afternoon of bisecting a boot-time fatal. Where the package's naming collides with an in-house convention, our wrapper wins and the override is documented — a half-followed convention costs more than no convention.
Sequencing. Do not begin with a critical-path screen. Sequence as: (1) source read and trait-method inventory, (2) constraint and release verification, (3) if pursuing adoption, one non-critical internal screen exercising modal + notification + color token, (4) feature tests under tests/Feature/Wire/ asserting each adopted trait's behavior, (5) Renovate/Dependabot entry so upstream commits are visible rather than discovered at deploy. If step 3 fights us on a trivial screen, it will fight us everywhere — stop and take path 1.
Hard gate. No retrofit. On any app with existing in-house actions, notification contracts, or icon strategies, the result is duplicate trait methods, competing notification contracts, and two icon-resolution paths. The convenience delta never covers the migration.
Maintenance. We are maintainer of last resort. With zero dependents and a bus factor of one, the realistic steady state is either frozen-pin or fork. Pre-agree the trigger — "no tagged release in 180 days" is reasonable — and keep the wrapper thin enough that the fork is a rename, not a migration. Deliberately keep service providers and config publishing non-load-bearing; if they become load-bearing, fork cost moves from an afternoon to a week.
Support. None evidenced. No documentation, no community, no security-response process, no LTS commitment. Our own feature tests are the only regression net; two or three per adopted subsystem is adequate and cheap. Any behavior we rely on that is not covered by a test we control is a behavior that can change without notice.
Scaling. Package-level scaling risk is low — it's traits and helpers, not runtime infrastructure. Portfolio-level scaling risk is the real one: adopting into one app is contained, adopting into N apps makes an unmaintained foundation a systemic dependency. If multiple apps are reimplementing the same action/modal/notification patterns, the right move is a shared in-house primitives layer, with this package as its design reference. That decision is separable from the vendor decision and should be made first.
Failure modes.
| Mode | Symptom | Detection | Mitigation |
|---|---|---|---|
| Trait collision | Fatal at boot; error names a class, not the traits | Reflection diff pre-adoption | Method-list inventory before mixing |
| Upstream drift | Silent behavior change on composer update |
None, absent our tests | Commit-hash pin + composer.lock |
| Framework mismatch | Runtime error after a Laravel minor bump | Staging only | Verify require constraints; pin |
| Container coupling | Failure in an unrelated request path | Hard to attribute | Read provider; constructor injection over lookups |
| Abandonment | No upstream fixes, ever | Release history | Pre-agreed fork trigger |
Ramp-up. Budget the first hour for orientation, not building: install and pin, verify provider registration, publish anything publishable so it can be read and diffed, then read src/ top-down starting at the service provider. Write down every trait's public and protected method names as we go — that list is the collision check. The absence of docs converts onboarding from "learn the API" into "read the source as the spec," which is a real cost but a bounded one for a package this size.
Bottom line for the roadmap. The cost of waiting is low; the cost of adopting early and forking later is roughly a quarter of unplanned maintenance. Treat wire-core as a leading indicator for an ecosystem bet we can observe, and as an MIT-licensed pattern reference we can act on now — not as a dependency we install. The design-system scoping question it raises (who owns icon and color tokens) is worth deciding deliberately, because it will need an answer whether or not this package survives.
How can I help you explore Laravel packages today?