Repository navigation
Releases: DaFa66/phpup
Release list
phpup 2.5.0 (Windows)
phpup 2.5.0 (Windows)
phpup.ps1 2.5.0. A feature release that adds a machine-readable CLI, so a GUI, tray app or
CI job can drive phpup without the interactive dashboard.
Contract: docs/CLI.md.
Install
irm https://raw.githubusercontent.com/DaFa66/phpup/HEAD/phpup-boot.ps1 | iexNothing changes if you already run phpup: no arguments behaves exactly as before and the
dashboard is untouched.
Added
status,start,stop,restart,version,helpverbs, with--json/-Json
emitting a stable schema on stdout--fastfor polling, and--watch N: one long-lived process emitting an NDJSON status
line every N seconds. A fresh PowerShell process costs about 0.85s, so spawning per tick
would hold roughly 40% of a core at a 2s interval; one process with lazy probes costs about
237ms a tick--quiet, plus documented exit codes: 0 ok, 1 failed, 2 usage, 3 not installed,
4 elevation required, 5 port conflict. A caller can relaunch elevated or name the foreign
process instead of parsing Englishservices.items[]in the payload: per-service{name, registered, enabled}- Version shown in the dashboard banner wordmark, beside the logo
Fixed
- Windows 11 reported as "Windows 10": the registry still stores
ProductName = "Windows 10 Pro"on Windows 11, so the build number now decides (22000 and
above is 11) platform.distrowas null in--fastand kept its "Windows " prefix in full modestatusandstartcould take 4 to 8 seconds before doing anything:
Get-NetTCPConnectionmeasured 3.8s cold on every fresh process, replaced with
System.Net.NetworkInformation(~60ms), with the netstat parse kept as a fallbackGet-Process -Namereplaced with .NET lookups: Windows PowerShell 5.1 writes an
OutOfMemoryExceptionstack trace to the error stream when the name matches nothing, which
polluted redirected stderr- Unreadable PIDs when unelevated: service mode now asks the SCM (
sc queryex), the fast
path uses the process table, which needs no elevation $DOWNLOAD_CACHEignored a custom install path and pointed atC:\phpupregardless
Desktop panel (separate release)
The Rust + egui control panel that reads this payload is published on its own chain, as
panel 0.1.0 beta, with a
zip and install.ps1. It is not bundled here: the script is the single artefact for the stack,
the panel is optional.
Upgrading
uu updates packages and brings the stack up. If the stack does not come up it now says so,
instead of claiming UPDATE COMPLETE!.
phpup 1.3.0 (macOS/Linux)
phpup 1.3.0 (macOS/Linux)
phpup.sh 1.3.0. Feature release adding the machine-readable CLI to the macOS and Linux
script, matching phpup.ps1 2.5.0 so one caller works on every platform.
Contract: docs/CLI.md.
Install
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/DaFa66/phpup/v1.3.0-nix/phpup.sh)"Backend selection is unchanged: Homebrew by default on macOS, apt on Debian/Ubuntu, and
PHPPUP_BACKEND=port still selects MacPorts. No arguments behaves exactly as before.
Added
status,start,stop,restart,version,helpverbs, with--jsonemitting the
same schema the Windows script emits--fastfor polling, and--watch N: one long-lived process emitting an NDJSON status line
every N seconds--quiet, plus documented exit codes: 0 ok, 1 failed, 2 usage, 3 not installed,
4 elevation required, 5 port conflictservices.items[]in the payload: per-service{name, registered, enabled}, so registered
services are visible on systemd and Homebrew alike- Single source of truth for derived paths, and the header comment is the only place the
version is written: both--versionpaths read it
Fixed
uclaimed "[ OK ] UPDATE COMPLETE!" even when the stack did not come up: the line was
printed unconditionally after all three backend branches. Eachstart_servicescall now
setsupdate_ok=0on failure, and the closing message distinguishes "packages updated and
stack up" from "packages updated, stack did not come up"- The apt path could block on a dpkg conffile prompt:
apt upgradewas the only apt call
in the script withoutDEBIAN_FRONTEND=noninteractive, so aphp.iniorhttpd.conf
question could stall an unattended run and swallow whatever was queued on stdin - Linux paid about 420ms for
brew --versionon every run: the Homebrew probe ran
unconditionally, including on apt systems. Now gated onUSE_APT == 0; interactive
statuson Ubuntu went from 0.74s to 0.34s - PHP version detection spawned three binaries per status call: config values are used
first, with probing as a per-component fallback
Verified by
PHP 8.5.12 upgrade path on Debian 13 and Ubuntu 24.04, port pins checked against
ports.macports.org for the macOS side.
phpup panel 0.1.0 beta (Windows x64)
phpup desktop panel 0.1.0 beta (Windows x64)
Beta of the desktop control surface for phpup: Rust + egui, one static binary, no webview and
no Node toolchain. Everything it shows and does comes from the phpup CLI, so the scripts
remain the single source of truth.
Install
- Download
phpup-panel-0.1.0-beta-win-x64.zipbelow and extract it. - Run
.\install.ps1(add-NoStartto install without launching it). - It copies
phpup-panel.exeinto<install_path>\bin, defaultC:\phpup\bin, and prints
the SHA256 of what it installed. No elevation, no registry writes.
Requires phpup 2.5.0 or later for the CLI verbs. On an older phpup.ps1 the panel says
"not usable" and waits rather than guessing.
Highlights
- Live component cards driven by
phpup.ps1 status --watch --fast - Start / Restart / Stop, with phpup's stderr in a terminal-style pane
- Tray icon and close-to-tray
- Quick links (localhost, phpinfo, phpMyAdmin, logs, www folder) beneath the cards
- Settings -> Window -> Start hidden in the tray: no window and no taskbar button at
launch, tray icon only, which is what an autostart wants. Off by default. - Settings -> Startup -> Start with Windows: per-user
Runentry written withreg.exe,
no elevation. The checkbox mirrors the registry, so it cannot claim what Windows will not do. - Settings -> Services: per-service startup type
Auto/Disabledviasc.exe config.
Settings manages boot behaviour only; Start / Restart / Stop are the process controls. - Optional always-elevated mode: per action, or the whole panel with
phpup - as administratorin the title bar
Known limits in this beta
- Windows x64 only. macOS and Linux are planned.
phpup.shalready emits the same
schema-1 status payload, so the data path is portable; the remaining work is the action
layer (service control, elevation, autostart) and the builds. - No embedded version metadata in the binary yet. Identify a build by the zip name or the
checksum below. - Unsigned binary, so SmartScreen warns on first run.
- Per-action elevation: a UAC prompt for each service change unless the panel is run
elevated. - Tray visibility depends on the Windows tray overflow area. If the icon is tucked behind
the chevron, the panel looks like it never started; pin it to the tray.
Verify the download
SHA256 (phpup-panel-0.1.0-beta-win-x64.zip) = f1db831ff488a61a7fc483113627348c3b91c739ac09829cd60aab44cff23faa
install.ps1 prints the checksum of the installed exe as well.
Cross-platform release (Windows)
See CHANGELOG.md for details.
Rebrand from getPHP to phpup (Windows)
See CHANGELOG.md for details.
Cross-platform release (macOS/Linux)
See CHANGELOG.md for details.
First stable (macOS/Linux)
v1.0.0-nix v1.0.0-nix: First stable (macOS/Linux)
Cross-series PHP upgrade (macOS/Linux)
See CHANGELOG.md for details.
v1.0.0 (Windows) - Initial Release
Windows: Initial PowerShell release. Interactive dashboard: install, update, start/stop, restart, delete. Apache, PHP, MariaDB, phpMyAdmin. VC++ auto-detection. Config persistence. PATH management. Database backup on delete.
First release.