jeffersongoncalves/nativekit
NativeKit is a Laravel package that brings native PHP implementations of common utilities to your apps, reducing external dependencies with a simple, framework-friendly API.
Architecture fit. Two conflicting descriptions of this package exist and reconciling them is the first TPM task. The marketplace metadata and release notes describe a Laravel 13.x + Filament 3.x + NativePHP desktop starter kit; the package's own description text describes a zero-dependency Laravel utility library ("no external dependencies — pure PHP"). The release changelog (Filament version mirroring, user/admin package extraction, PHPStan on PHP 8.4) is consistent only with the starter-kit reading. Until that is resolved, do not plan against either: the dependency surface, upgrade model, and support burden are completely different for a library you composer require versus a skeleton you clone once and then own.
Assuming the starter-kit reading is correct, the architecture is conventional and low-exotic: a Laravel app skeleton, a Filament admin panel, and a NativePHP shell for Windows/macOS/Linux packaging. That is a coherent stack with large upstream communities. NativeKit's contribution is glue, not invention — which is the right place for a starter kit to sit, but also means its value is entirely in how well it curates upstream, and its half-life is bounded by upstream drift.
Integration feasibility. Feasible for greenfield; conditional for existing applications, and the conditional is where the effort goes.
3.3.56 tracks Filament 3.3.56) makes co-existence fragile. Confirm whether the Filament constraint is exact or caret before committing.Technical risk. Aggregate: moderate-to-high, concentrated in supply chain and release process rather than in code quality. Ranked:
^3.3 constraints absorb both silently. Whatever your dependency policy says about patch upgrades being inert, it does not hold for this package.Key questions. Each maps to an owner and a decision gate.
Recommendation. Approve for a time-boxed spike (5–8 engineering days) on one internal, non-customer-facing desktop tool. Do not approve for a customer-facing or revenue-bearing product until the distribution gaps (signing, notarization, auto-update) have named owners and a documented plan. Treat adoption as fork-and-own from day one — vendor the code into our repo, own the upgrade cadence, and never let a composer update be the mechanism by which our auth surface changes.
Stack fit. Laravel 13.x, Filament 3.3.x, PHP 8.2+ (8.4 in the static-analysis matrix — confirm runtime support, not just lint support), NativePHP for the desktop shell, and SQLite or an embedded database for the packaged build. Filament inside a desktop window is a pragmatic choice for internal tools and an odd one for consumer products; confirm the UX expectation before committing, because an admin-panel aesthetic in a shipped desktop app is a common and expensive late discovery.
The user/admin package extraction introduces a new transitive dependency surface on sibling packages from the same maintainer. Verify these are published, versioned, and independently installable — a path or inline dependency here would be a hard blocker.
Migration path. Follow this order; each step is a gate, not a checkpoint.
composer.json, and confirm whether this is a library or a skeleton. Everything downstream depends on the answer.main with the upstream as a remote we merge from deliberately. This is the single highest-leverage decision in this assessment: it converts bus-factor risk from existential to scheduled work.composer why guzzlehttp/guzzle, composer why filament/filament, composer why laravel/framework. Guzzle is a near-universal transitive dependency; one sibling package on ^7 blocks the whole upgrade path.Compatibility. Before committing, confirm the intersection of PHP version, Filament constraint, Laravel major, and NativePHP version is non-empty and supported upstream. Consumers on Filament 3.2.x or a future 3.4 should assume friction. Because the kit's version mirrors Filament's, the constraint style matters more than usual — an exact pin means we cannot take a Filament security patch without taking a kit release at the same time.
Sequencing. Isolate the initial adoption in a single commit in a branch behind the full test suite, so that a rollback does not revert unrelated dependency movement. Thereafter, adopt upstream merges on a quarterly cadence, one release range at a time, with the verification pass (auth + one resource + a packaged build) as the standing acceptance criterion for every merge. Do not track upstream patch-by-patch; the noise-to-signal ratio in the changelog is roughly 20:2.
Maintenance. Expect sustained churn and plan for it as a line item, not a surprise. The project runs an aggressive automation posture — grouped Dependabot across Composer, npm, and GitHub Actions, auto-merge on Actions minor/patch, and six separate CI-standardization PRs in a single release. That is efficient for the maintainer and noisy for anyone tracking it. Budget 1–2 engineer-days per quarter for upstream merges and verification, plus the same again any quarter where an upstream major (Guzzle, Filament, Laravel) lands. If we fork-and-own, that estimate holds and the risk is scheduled work; if we depend directly, the same effort becomes unplanned incident response at the worst possible moment.
Also budget for our own desktop maintenance, which the kit does not cover: OS updates breaking packaging, signing certificate rotation (annual), notarization failures on new macOS releases, and antivirus false positives on Windows installers. These recur regardless of the kit's health.
Support. Effectively single-maintainer. The addition of Buy Me a Coffee and GitHub Sponsors this cycle is a reasonable sustainability signal and explicitly not a support commitment. There is no evidence of an upgrade guide, deprecation policy, LTS branch, security disclosure process, or response-time expectation. Plan accordingly: no path to a vendor SLA, no escalation route, no fix-by-date. The mitigation is the fork — we own our ability to patch. That mitigation must be real (someone has write access and has done it once) rather than theoretical.
Scaling. Two distinct dimensions, with different answers.
Failure modes. Named, with detection and response.
| Mode | Likelihood | Impact | Detection | Response |
|---|---|---|---|---|
| Upstream goes dormant | Medium — 2 stars, one maintainer | Low if forked, high if depended on | 90-day commit gap | We already own the code; nothing to do |
| Silent breaking patch (the PR #100 pattern repeats) | High — release process shows no sign of changing | High — auth and resource namespaces | Post-merge auth + CRUD smoke test | Pin, revert merge, re-apply deliberately |
| Guzzle / transitive major blocks Composer | Medium | Medium — upgrade freeze | composer why in CI |
Stay on last-good, isolate the conflicting sibling |
| macOS notarization or Windows signing breaks a release | High over time — annual certs, OS updates | High — cannot ship | Build pipeline gate | Named certificate owner; rotated ahead of expiry |
| Auto-update ships a bad build to installed base | Low–Medium | Very High — unrecoverable remotely | Staged rollout + version pinning | Manual download fallback; do not ship auto-update before the app is boring |
| Filament constraint conflict with our other apps | Medium | Medium | Composer resolution | Do not share the Filament constraint across products |
The auto-update row is the one most teams skip and most regret. A desktop app with no remote kill switch and no staged rollout is a single point of no recovery.
Ramp-up. Realistic for one engineer already fluent in Laravel and Filament: 2–3 days to a running local desktop build, 1–2 weeks to a signed artifact on all three OS targets (dominated by certificate acquisition, not code — Apple Developer enrollment alone can take days and is an administrative lead time, not an engineering one), and 3–4 weeks to a first shippable internal tool. Add 50–100% to the build-and-sign phases for an engineer new to desktop packaging specifically, since that knowledge does not transfer from web deployment.
Exit strategy. Cheap and should be pre-agreed. The code is a skeleton; the upstream git remote can be dropped and the project continues as an ordinary Laravel + NativePHP app. The dependencies that would follow us out (Filament, Laravel, NativePHP, and the maintainer's user/admin packages) are all independently maintainable — except the last, which is the genuine coupling. Confirm before adoption that the user/admin packages are replaceable with a day's work, or accept that the fork-and-own scope includes them too.
Decision gate. Fund the spike. Do not commit to a production timeline until the spike produces: a signed build on all three OS targets, a documented fork-and-merge process, and a written answer to the package-versus-skeleton question.
How can I help you explore Laravel packages today?