nativephp/php-bin
Precompiled, portable PHP binaries that let NativePHP apps run PHP without a system install. Ships static builds for multiple platforms, simplifying packaging and distribution of desktop PHP applications.
Architecture fit. Unchanged. nativephp/php-bin remains a build-time artifact distribution — precompiled PHP runtimes consumed by NativePHP's packaging pipeline — and is relevant only to a Laravel/PHP application shipped as a desktop binary. What 1.2.0 clarifies is the shape of the matrix: the project now publishes per-version builds for PHP 8.3, 8.4, and 8.5 across linux arm64/x64, mac arm64/x64, and win x64 — roughly fifteen artifact targets per release, all rebuilt together. That confirms the package's real function: turning "install PHP first" into a versioned, matrix-pinned dependency. It does nothing for a server-rendered SaaS, queue workers, or CLI tooling, and should stay out of scope there.
Integration feasibility. Consumption remains cheap — a Composer pin, no application code. Two things in 1.2.0 change the integration checklist rather than the effort:
sodium was added to the php-extensions list. Additive and low-risk, but it alters the runtime contract; anyone who validated against 1.1.1 has a slightly different interpreter now.Effort is still dominated by what the package does not do: signing, notarization, SmartScreen reputation, and CI runners per target.
Technical risk. The risk profile improves at the margins but the headline concerns stand.
NativePHP/php-bin, and a static-php-cli (SPC) bump to 2.8.2, which tells us the binaries are produced from a known open-source build toolchain rather than an opaque pipeline. That is meaningful progress on the "repository: unknown" concern. It is not the same as checksummed, signed, or reproducible-verified artifacts, and nothing in 1.2.0 claims those.github-actions[bot] commits rebuilding each PHP minor on each platform, plus repeated CA bundle refreshes. That is exactly the automation we asked for in question 2: an existing rebuild pipeline that pushes new binaries and keeps the TLS trust store current. The residual risk is our side — how fast we re-pin, re-sign, and redistribute to installed desktops.Key questions.
sodium enabled in all platform builds or a subset, and does it change installer size or any runtime behavior our app depends on?Stack fit. Unchanged: adopt only for a desktop distribution of an existing Laravel codebase — offline field tool, kiosk app, local-first admin client. If the deliverable is web or mobile, rule it out explicitly.
Migration path. Same shape as before, with two added gates. Pin the runtime at the PHP minor the app already targets — 8.3 or 8.4 for production, treating 8.5 as a spike target until core compatibility is confirmed. Then: diff the artifact manifest between 1.1.1 and 1.2.0 before changing the pin; wire the NativePHP build into CI for all three OS targets; produce unsigned artifacts first and verify they launch; confirm php -m inside the built app lists sodium alongside the extensions we require (pdo_sqlite, mbstring, openssl, curl, zip, intl, gd); then layer signing/notarization; then replace the old channel.
Compatibility. Treat this as a five-part tuple and pin all five together: PHP minor ↔ Laravel version ↔ NativePHP core ↔ extension set ↔ SPC build version. 1.2.0 changes three of the five, which is precisely why the pin should move deliberately rather than float. Verify SQLite as the storage path and re-verify any package that shells out to a PHP extension. Architecture support is unchanged for supported targets (Apple Silicon vs Intel remains the most common surprise), but re-check that the removed mac artifacts were genuinely unused by us.
Sequencing. (1) Manifest diff 1.1.1 → 1.2.0 and confirm no referenced artifact disappeared. (2) Spike on one OS at the current production minor to prove the bundle still launches with the new extension set. (3) Separate spike for PHP 8.5, timeboxed and gated on NativePHP core support. (4) Full CI matrix, artifacts published and checksummed on our side. (5) Signing/notarization proven end-to-end on a clean machine per OS. (6) Size, cold-start, and memory benchmarks against 1.1.1. (7) Internal pilot, then promote and write the PHP patch upgrade runbook before first public ship.
Maintenance. The upstream cadence is automated and therefore faster than before — bot-driven per-version rebuilds plus periodic CA refreshes. Our cost stays low but becomes more regularly scheduled: track advisories, bump the pin, rebuild, re-sign, re-release. Keep Dependabot/Renovate on the pin with a required green build matrix, and add a standing quarterly CA-refresh bump even when no CVE lands, because TLS trust now has its own expiry clock. One recurring owner remains sufficient.
Support. Same ticket class, unchanged by this release: "app won't open on macOS," "Defender flagged the installer," "works on my machine but not theirs." Keep runbooks for Gatekeeper quarantine, antivirus false positives, missing Windows runtimes, and glibc mismatch. Add one new line for the 8.5 era: if we ship 8.5 ahead of ecosystem validation, expect bug reports that are framework/package incompatibilities misattributed to the desktop shell.
Scaling. No server-scaling dimension. Scaling here is artifact count and installer size: three PHP minors × five platform targets means more CI minutes and a larger release surface than 1.1.1, partially offset if the removed mac binaries were large. Adding sodium marginally increases runtime size. Download-and-install is still the first user experience, so CDN and update-channel decisions remain early commitments.
Failure modes. Corruption or a missing binary still fails the build loudly (good). Removed mac artifacts fail the packaging step loudly if we reference them (acceptable, but only if caught in the manifest diff). Unsigned binaries still fail silently at launch on macOS (bad). Version skew between runtime and NativePHP core still manifests as application-looking crashes. The most serious mode is unchanged — an unpatched PHP CVE or a stale CA bundle shipped to installed desktops with no forced-update path — and 1.2.0 makes the upstream half of that faster while leaving the downstream half (our auto-update channel) entirely ours to build. Design it in from day one.
Ramp-up. For an application developer: hours. For release engineering: days to weeks, dominated by signing, notarization, and the CI matrix. For the organization, the ramp-up is still accepting a prebuilt binary dependency into the customer-facing supply chain — but the calculus shifts slightly in the package's favor: visible PR history, a named upstream build toolchain at SPC 2.8.2, and an automated rebuild pipeline are real evidence of maintainability. That is enough to keep the spike and drop the "exit plan" from blocking to scheduled. It is not enough to skip artifact verification. Adopt behind a spike, pin to 8.3/8.4, verify checksums on our side, and document the runtime-swap exit before this reaches a paying customer.
How can I help you explore Laravel packages today?