NativePHP v3.1 just dropped. And it's not a minor bump.
This is the single biggest performance update we've ever shipped.
We're talking 10x faster response times. Background job processing. Android 8+ support. Full ICU on iOS. PHP 8.3–8.5 automatic version matching. Binary caching. And a whole lot more.
In this post:
- Persistent Runtime
- Background Queue Workers
- Android 8+ Support
- ICU/Intl on iOS
- PHP Version Matching
- Developer Experience
- Upgrading
#Persistent Runtime
Every request in NativePHP used to go through a full Laravel boot cycle. Register providers, build the container, handle the request, tear it all down. Every. Single. Time. Response times hovered around 200–300ms.
That's gone.
v3.1 boots Laravel once and reuses the kernel across all subsequent requests. Response times drop to 5–30ms. That's not a typo — it's a 10x improvement.
Your app feels instant. Taps respond immediately. Pages load in a blink. It finally feels native.
// config/nativephp.php'runtime' => [ 'mode' => 'persistent', // or 'classic' 'reset_instances' => true, 'gc_between_dispatches' => false,],
Set it to persistent (default) to reuse the kernel. Or classic to boot/shutdown per request. If persistent boot ever fails, it falls back to classic automatically.
Livewire state, router state, facade instances — all handled for you.
#Background Queue Workers
One of the most requested features since day one.
v3.1 ships with ZTS (Thread-Safe) PHP and a dedicated background queue worker. It runs on its own thread, completely isolated from your main request cycle.
Setup is dead simple:
QUEUE_CONNECTION=database
That's it. Dispatch jobs like you always do:
use App\Jobs\SyncData; SyncData::dispatch($payload);
The worker starts automatically when your app boots. Long-running API calls, file processing, data syncing — none of it blocks your UI anymore.
Jobs are persisted to the database. They survive app restarts. Laravel's standard retry and failure handling just works.
Both iOS and Android. Fully supported.
#Android 8+ Support
Previously, NativePHP required Android 13 (API 33). That cut out a huge chunk of the Android ecosystem.
v3.1 drops the minimum to Android 8 (API 26).
This required static linking on Android for better performance and reliability. The SDK versions are now fully configurable:
// config/nativephp.php'android' => [ 'compile_sdk' => env('NATIVEPHP_ANDROID_COMPILE_SDK', 36), 'min_sdk' => env('NATIVEPHP_ANDROID_MIN_SDK', 33), 'target_sdk' => env('NATIVEPHP_ANDROID_TARGET_SDK', 36),],
More devices. More users. More reach.
#ICU/Intl on iOS
iOS builds now ship with full ICU support. The PHP intl extension works on both platforms.
Previously, intl was only available on Android. That was a dealbreaker for packages like Filament that depend on it for number formatting, date formatting, and pluralization.
With v3.1, Filament works on both iOS and Android out of the box.
Let that sink in. A full Filament admin panel — shipped as a native mobile app on both platforms. No workarounds. No compromises.
ICU support is optional via --with-icu / --without-icu during installation if you want to keep your binary size down. But we've done a ton of work to ensure that the out-of-the-box experience with ICU (just support en locales for now) is slim and tidy: ICU now adds only about 10-15MBs to your overall app size, on both platforms.
#PHP Version Matching
NativePHP now reads your composer.json and automatically matches the PHP version when downloading binaries. No more manual version pinning.
- PHP 8.3 minimum
- PHP 8.5 supported
- Versions manifest replaces hardcoded URLs
- Binaries cached locally in
nativephp/binaries— no re-downloading on every build
#Developer Experience
A bunch of quality-of-life improvements:
- Plugin multi-register —
native:plugin:registerdiscovers and registers multiple plugins in one pass - Unregistered plugin warnings —
native:runnow warns you if plugins aren't registered - Platform shorthand — use
ios/iandandroid/aanywhere you'd type a platform name - Plugin compilation during
native:packagebuilds - URL encoding preserved on Android redirects
- Removed unused dependencies —
react/httpandreact/socketare gone - Laravel 13 support
#Upgrading
v3.1 is a drop-in upgrade. No breaking changes.
"require": { "nativephp/mobile": "~3.1.0"}
composer updatephp artisan native:install --force
The --force flag ensures native project files, PHP binaries, and config are all updated to v3.1.
This isn't just a point release. It's the version that makes NativePHP apps feel like native apps. 10x faster. Background processing. Broader device support. Full ecosystem compatibility.
Update today. ⚡