waaseyaa / frankenphp
Optional FrankenPHP dev-runtime for Waaseyaa — auto-installs the FrankenPHP binary and serves the app via `waaseyaa dev` (the Laravel Octane model). Not part of core/cms/full; default-installed in the skeleton.
Requires
- php: >=8.5
- ext-json: *
- symfony/console: ^8.0
- waaseyaa/foundation: ^0.1.0-alpha.300
Requires (Dev)
- phpunit/phpunit: ^13.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
- dev-main / 0.1.x-dev
- v0.1.0-alpha.300
- v0.1.0-alpha.299
- v0.1.0-alpha.298
- v0.1.0-alpha.297
- v0.1.0-alpha.296
- v0.1.0-alpha.295
- v0.1.0-alpha.294
- v0.1.0-alpha.293
- v0.1.0-alpha.292
- v0.1.0-alpha.291
- v0.1.0-alpha.290
- v0.1.0-alpha.289
- v0.1.0-alpha.288
- v0.1.0-alpha.287
- v0.1.0-alpha.286
- v0.1.0-alpha.285
- v0.1.0-alpha.284
- v0.1.0-alpha.283
- v0.1.0-alpha.282
- v0.1.0-alpha.281
- v0.1.0-alpha.280
- v0.1.0-alpha.279
- v0.1.0-alpha.278
- v0.1.0-alpha.277
- v0.1.0-alpha.276
- v0.1.0-alpha.275
- v0.1.0-alpha.274
- v0.1.0-alpha.273
- v0.1.0-alpha.272
- v0.1.0-alpha.271
- v0.1.0-alpha.270
- v0.1.0-alpha.269
- v0.1.0-alpha.268
- v0.1.0-alpha.267
- v0.1.0-alpha.266
- v0.1.0-alpha.265
- v0.1.0-alpha.264
- v0.1.0-alpha.263
- v0.1.0-alpha.262
- v0.1.0-alpha.261
- v0.1.0-alpha.260
- v0.1.0-alpha.259
- v0.1.0-alpha.258
- v0.1.0-alpha.257
- v0.1.0-alpha.256
- v0.1.0-alpha.255
- v0.1.0-alpha.254
- v0.1.0-alpha.253
- v0.1.0-alpha.252
- v0.1.0-alpha.251
- v0.1.0-alpha.250
- v0.1.0-alpha.249
- v0.1.0-alpha.248
- v0.1.0-alpha.247
- v0.1.0-alpha.246
- v0.1.0-alpha.245
- v0.1.0-alpha.244
- v0.1.0-alpha.243
- v0.1.0-alpha.242
- v0.1.0-alpha.241
- v0.1.0-alpha.240
- v0.1.0-alpha.239
- v0.1.0-alpha.238
- v0.1.0-alpha.237
This package is auto-updated.
Last update: 2026-09-02 16:15:19 UTC
README
Optional FrankenPHP dev-runtime for Waaseyaa — the Laravel Octane model. It
adds two console commands and nothing else; the framework core stays
runtime-agnostic (no FrankenPHP coupling), and the runtime-agnostic
waaseyaa serve (plain php -S) remains the zero-dependency fallback in core.
This package is not part of waaseyaa/core/cms/full. It ships in the
whole-monorepo waaseyaa/framework meta, so the skeleton serves with
composer run dev out of the box; apps on the curated metapackages opt in with
composer require waaseyaa/frankenphp.
Commands
frankenphp:install
Downloads the correct FrankenPHP binary for the current OS/arch from the official
php/frankenphp releases into the project's
managed path (vendor/bin/), idempotently. After this the binary's location is
never the operator's problem.
- Per-OS/arch asset selection (Linux
x86_64/aarch64, macOSarm64/x86_64, Windowsx86_64), pinned to a known-good version (defaultv1.12.4; override with--frankenphp-versionorFRANKENPHP_VERSION). - Verifies the download's sha256 against the GitHub release digest, fail-closed: a
checksum mismatch always refuses to install, and so does an unavailable
digest (GitHub API unreachable/rate-limited, malformed response, or an asset
with no published digest) — pass
--allow-unverifiedto accept that risk explicitly and install anyway (the result is reported as unverified). - Windows: the release is a full PHP-for-Windows SDK zip — the whole archive
is extracted into
vendor/bin/frankenphp-dist/sofrankenphp.exefinds its sibling DLLs. POSIX: a bare binary with the executable bit set. - Extraction uses ext-zip when present, else
tar(Windows 10+ / macOS / Linux). Pure PHP, no shell.
dev
Serves the app with FrankenPHP in the foreground:
frankenphp php-server --root public --listen 127.0.0.1:8080
Resolution order: FRANKENPHP_BIN → the managed install → known per-OS locations
→ frankenphp on PATH → otherwise it prints the one fix (frankenphp:install)
and, when interactive, offers to run it. It execs the binary by absolute path
with no shell (proc_open array form, inherited stdio so output is live and
Ctrl-C stops it), and never modifies PATH — so FrankenPHP's bundled
OpenSSL-disabled php.exe can never shadow system PHP and break Composer.
Override the listen address with WAASEYAA_DEV_LISTEN (e.g. 0.0.0.0:9000).
The skeleton wires composer run dev → @php vendor/bin/waaseyaa dev, so the
command runs under Composer's own (system) PHP, identically in Git Bash,
PowerShell, cmd, and POSIX shells.
Why a package
This permanently closes the "where is FrankenPHP / PATH shadowing / the shell
can't find PHP" class of dev-server failures by removing both roots — shell
fragility (the command is a discoverable PHP CLI command, not a shell script) and
binary-location guessing (frankenphp:install fetches it to a known path).