Changelog
On this page
#v2.1.0
#Cleaner Console Output
The native:run command now provides cleaner, more readable output, making it easier to follow what's happening during development.
#Improved Windows Support
Better compatibility and smoother development experience for Windows users.
#Blade Directives
New Blade directives for conditional rendering based on platform:
Only rendered in mobile apps@mobile / @endmobile Only rendered in web browsers@web / @endweb Only rendered on iOS@ios / @endios Only rendered on Android@android / @endandroid
#Improved File Watcher
The file watcher has been completely overhauled, switching from fswatch to Watchman for better performance and reliability. The watcher is now combined with Vite HMR for a unified development experience.
#Common URL Schemes
NativePHP now automatically handles common URL schemes, opening them in the appropriate native app:
tel:- Phone callsmailto:- Emailsms:- Text messagesgeo:- Maps/locationfacetime:- FaceTime video callsfacetime-audio:- FaceTime audio calls
#Android Deep Links
Support for custom deep links and app links on Android, allowing other apps and websites to link directly into your app.
#Other Changes
System::appSettings()to open your app's settings screen in the OS Settings appEdge::clear()to remove all EDGE components- Added
Native.shareUrl()to the JavaScript library native:install: Added--freshand-Fas aliases of--forcenative:install: Increased timeout for slower networks
#Bug Fixes
- Fixed Scanner permissions
- Fixed Android edge-to-edge display
- Fixed
Browser::authon iOS - Fixed text alignment in native top-bar component on iOS
- Fixed plist issues on iOS
- Fixed
NATIVEPHP_START_URLconfiguration - Fixed camera cancelled events on Android
- Fixed bottom-nav values not updating dynamically
#v2.0.0
#JavaScript/TypeScript Library
A brand-new JavaScript bridge library with full TypeScript declarations for Vue, React, Inertia, and vanilla JS apps. This enables calling native device features directly from your frontend code. Read more about it here.
#EDGE - Element Definition and Generation Engine
A new native UI system for rendering navigation components natively on device using Blade. Read more about it here.
#Laravel Boost Support
Full integration with Laravel Boost for AI-assisted development. Read more about it here.
#Hot Module Replacement (HMR) Overhauled
Full Vite HMR for rapid development. Read more about it here.
Features:
- Custom Vite plugin
- Automatic HMR server configuration for iOS/Android
- PHP protocol adapter for axios on iOS (no more
patch-inertiacommand!) - Works over the network even without a physical device plugged in!
#Fluent Pending API (PHP)
All Asynchronous Methods now implement a fluent API for better IDE support and ease of use.
Dialog::alert('Confirm', 'Delete this?', ['Cancel', 'Delete']) ->remember() ->show();
import { dialog, on, off, Events } from '#nativephp';const label = ref(''); const openAlert = async () => { await dialog.alert() .title('Alert') .message('This is an alert dialog.') .buttons(['OK', 'Cool', 'Cancel']);}; const buttonPressed = (payload: any) => { label.value = payload.label;}; onMounted(() => { on(Events.Alert.ButtonPressed, buttonPressed);});
##[OnNative] Livewire Attribute
Forget the silly string concatenation of yesterday; get into today's fashionable attribute usage with this drop-in replacement:
use Livewire\Attributes\OnNative; use Native\Mobile\Attributes\OnNative; #[On('native:'.ButtonPressed::class)] #[OnNative(ButtonPressed::class)] public function handle()
#Video Recording
Learn more about the new Video Recorder support here.
#QR/Barcode Scanner
Learn more about the new QR/Barcode Scanner support here.
#Microphone
Learn more about the new Microphone support here.
#Network Detection
Learn more about the new Network Detection support here.
#Background Audio Recording
Just update your config and record audio even while the device is locked!
// config/nativephp.php'permissions' => [ 'microphone' => true, 'microphone_background' => true,],
#Push Notifications API
New fluent API for push notification enrollment:
use Native\Mobile\Facades\PushNotifications;use Native\Mobile\Events\PushNotification\TokenGenerated; PushNotifications::enroll(); #[OnNative(TokenGenerated::class)]public function handlePushNotificationsToken($token){ $this->token = $token;}
import { pushNotifications, on, off, Events } from '#nativephp'; const token = ref(''); const promptForPushNotifications = async () => { await pushNotifications.enroll();}; const handlePushNotificationsToken = (payload: any) => { token.value = payload.token;}; onMounted(() => { on(Events.PushNotification.TokenGenerated, handlePushNotificationsToken);}); onUnmounted(() => { off(Events.PushNotification.TokenGenerated, handlePushNotificationsToken);});
Deprecated Methods:
enrollForPushNotifications()→ useenroll()getPushNotificationsToken()→ usegetToken()
#Platform Improvements
iOS
- Platform detection -
nativephp-iosclass on body - Keyboard detection -
keyboard-visibleclass when keyboard shown - iOS 26 Liquid Glass support
- Improved device selector on
native:runshowing last-used device - Load Times dramatically improved. Now 60-80% faster!
Android
- Complete Android 16+ 16KB page size compatibility
- Jetpack Compose UI - Migrated from XML layouts
- Platform detection -
nativephp-androidclass on body - Keyboard detection -
keyboard-visibleclass when keyboard shown - Parallel zip extraction for faster installations
- Load Times dramatically improved. ~40% faster!
- Page Load Times dramatically decreased by ~40%!
#Configuration
New Options
'start_url' => env('NATIVEPHP_START_URL', '/'), 'permissions' => [ 'microphone' => false, 'microphone_background' => false, 'scanner' => false, 'network_state' => true, // defaults to true], 'ipad' => false, 'orientation' => [ 'iphone' => [...], 'android' => [...],],
Custom Permission Reasons (iOS)
'camera' => 'We need camera access to scan membership cards.','location' => 'Location is used to find nearby stores.',
#New Events
Camera\VideoRecorded,Camera\VideoCancelled,Camera\PhotoCancelledMicrophone\MicrophoneRecorded,Microphone\MicrophoneCancelledScanner\CodeScanned
#Custom Events
Many native calls now accept custom event classes!
Dialog::alert('Confirm', 'Delete this?', ['Cancel', 'Delete']) ->event(MyCustomEvent::class)
#Better File System Support
NativePHP now symlinks your filesystems! Persisted storage stays in storage but is symlinked to the public directory for
display in the web view! Plus a pre-configured mobile_public filesystem disk.
FILESYSTEM_DISK=mobile_public
$imageUrl = Storage::url($path);
<img :src="$imageurl" />
#Bug Fixes
- Fixed infinite recursion during bundling in some Laravel setups
- Fixed iOS toolbar padding for different device sizes
- Fixed Android debug mode forcing
APP_DEBUG=true - Fixed orientation config key case sensitivity (
iPhonevsiphone)
#Breaking Changes
- None