Documentation
Take the Symfony app you already have to the desktop, iOS and Android
Two bundles on NativePHP's runtimes. Your controllers, templates, console commands and tests do not change — they gain a native window, a menu bar, and 54 device methods.
Desktop, around what you have
An Electron window serving your existing app. All 116 runtime endpoints and 44 events, wrapped as ordinary Symfony services.
Start here →Mobile without a rewrite
A Symfony app takes the WebView path by construction, so Twig stays Twig — or render real SwiftUI and Compose trees from PHP.
Read the guide →Testable with no device
FakeRuntime records at the transport seam, so your payload building is exercised rather than replaced by a stub.
Written for silent failures
This runtime's usual failure mode is silence rather than an error, which is why troubleshooting is organised symptom-first.
Symptom → fix →Desktop, from nothing
composer require sadiqk2/nativephp-symfony-desktop-bundle:^0.1
# bring the Electron runtime into the project and retarget it at Symfony
git clone --depth 1 https://github.com/NativePHP/desktop /tmp/np-desktop
bin/console native:install --source=/tmp/np-desktop/resources/electron
bin/console native:doctor # says whether the runtime can reach your app
bin/console native:run # a window, with your application in itWhat is verified, plainly. Desktop is proven end to end: a packaged application that has been built and run, with screenshots. Mobile is covered by tests — including byte comparisons against upstream's own renderers — but no build produced here has been opened by Xcode or Gradle, and no screen has been rendered on a device. That distinction is kept on every page.