kevinbatdorf/nativephp-launcher
A Laravel/PHP package for adding launcher functionality to NativePHP desktop apps. It offers a lightweight integration for starting or opening NativePHP applications from a Laravel project, simplifying launcher setup and app-launch workflows.
HOME on the app's display + SECONDARY_HOME on the others split is the concrete mechanism behind "one app, two screens" products (dual-screen handhelds, foldables, clamshells, dual-panel kiosks). This is a roadmap-unlocking feature, not a polish item — it is the difference between supporting a dual-screen device and shipping a differentiated dual-screen product.Launcher::apps(), Launcher::open($package, $display, $activity), Launcher::isDefaultHome(), Launcher::currentHome(), Launcher::openHomeSettings()) is deliberately a routing and eligibility layer, not a launcher UI. That means "we ship a launcher" is still a design and build commitment on our side — home layout, app grid, theming, per-display configuration, onboarding to actually get the user to set us as default (openHomeSettings() exists precisely because that grant is a user action, not something we can force).HomeRequested($displayId) + Screens::show($displayId) gives a clean, composable contract: whichever display wants a home screen asks, and we decide what to put there. This supports roadmap items like per-display dashboards, "second screen shows companion panel," and hot-plug/display-change handling without bespoke plumbing.IsHomeScreen trait (BACK at root stays put) is a small but product-relevant promise — it prevents the classic kiosk failure where a stray BACK gesture drops the user to a blank or stock Android surface.Adopt when most of the following hold:
Look elsewhere or defer when:
For executives: This is a small package with a strategically large effect — it lets our app become the device. For dedicated-device products (kiosks, POS, in-vehicle, handheld gaming, dual-screen hardware), that means we can ship a fully branded, locked-down experience without hiring an Android launcher team or building a native module. It's the cheapest credible path to "our software is the product the user sees on boot," including on dual-screen devices where we control what each screen shows. The caveats are honest and bounded: Android only (iOS is a hard no for this capability anywhere), it's a v0.1.0 with a two-device test matrix, and it gives us the plumbing, not the home-screen UI — we still own that design work.
For engineering: Thin, event-driven API: Launcher::apps() / open($package, $display, $activity) for launching, isDefaultHome() / currentHome() / openHomeSettings() for state and provisioning, and HomeRequested($displayId) as the display-asks-for-home hook that pairs directly with the screens plugin (Screens::show($displayId)). The IsHomeScreen trait handles BACK-at-root so kiosk UX doesn't leak. Scope your risk accordingly: v0.1.0, Android 11–13 verified only, home-task behavior is inherently OEM-sensitive, and the default-home grant is a user action we must design an onboarding flow around. Recommend a device-matrix spike and a thin abstraction layer over the Launcher facade so we can swap or extend it later.
How can I help you explore Laravel packages today?