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.
Treat NativeKit as a starting point, not a library you bolt on. The description sells it as a zero-dependency helper bundle, but the release history (Filament 3.3.56, NativePHP, panel providers, user/admin packages) makes clear it is a Laravel 13 + Filament starter kit targeting packaged desktop apps. Your first hour should be spent confirming which of those two things you actually installed — check composer.json for filament/filament, nativephp/electron (or nativephp/laravel), and the user/admin packages referenced in PR #100. If none are there, you have the helper package and the rest of this document's desktop guidance does not apply.
Minimal path for the starter-kit case:
composer require jeffersongoncalves/nativekit into a Laravel 13 app of the matching version.php artisan vendor:publish --provider="Jeffersongoncalves\Nativekit\NativekitServiceProvider"
php artisan migrate --seed
discoverResources() / discoverPages() paths point at something that actually exists.Where to look first, in order: the service provider (what it publishes and registers), the panel provider (resources, pages, widgets), and config/nativekit.php if it exists. Read those three before touching any generated code.
Keep customisations in App\, not in vendor/. The defining change in this line of releases is that models, resources and login were pushed out into sibling user/admin packages. That makes the extension point your own App\Models\User, your own policies, and config values — never an edited vendor class. Anything you override in place is lost on the next composer update.
Panel-per-role. The idiomatic layout is a full admin panel plus a lighter surface (second panel, or plain Blade) for end users, sharing one auth guard. Register resources on the panel provider rather than globally so each panel can be tested in isolation.
Feature work is mostly Filament resources. Day to day you are generating resources and wiring form schemas, tables and policies:
php artisan make:filament-resource Invoice --generate
Then move the generated class into your app namespace so it is not shadowed by a kit-provided resource of the same name. Keep policy logic in policies, not in canViewAny() closures scattered across resources.
Desktop-first assumptions. On the NativePHP path, anything that assumes a live web request will bite you in the packaged build. Prefer the local disk over S3, synchronous or short-lived jobs over long-running queues, and relative asset paths over absolute URLs. Gate genuinely web-only features behind a config flag so the desktop build can disable them without a code fork.
Localisation and seeding. Use the seeder that ships with the kit to provision the admin, then add your own seeders for demo data. Keep seeders idempotent (firstOrCreate on email, not create) so re-running migrate --seed during development does not duplicate users.
Testing pattern. Livewire::test(ResourcePage::class) plus actingAs() with a factory-built user in each role. Assert authorization explicitly — in starter kits the regressions are almost always policy/role drift, not broken form components.
guzzlehttp/guzzle moved from 7.15.5 to 8.1.0 under 3.3.56. Any sibling package pinning ^7.0 produces an unsatisfiable dependency graph. Run composer why guzzlehttp/guzzle before upgrading, and smoke-test any custom HTTP clients or webhook calls — Guzzle 8 changed option handling.null deep in a resource, not as an error at boot.php artisan filament:cache-components and php artisan optimize:clear fix a surprising share.pnpm-workspace.yaml and patches shell-quote and source-map-js. If you add JS dependencies, check you are not un-patching those or reintroducing the advisory.visible()/canViewAny(), events, and only then class overrides. Anything past config is a merge burden on every patch release.How can I help you explore Laravel packages today?