Current release target: v0.2.0-beta
UniWamp is currently preparing for a beta release. The beta is intended for early validation on Windows development machines, not for production use or unattended deployment.
UniWamp is a portable Windows WAMP dashboard built in Delphi 12.4. It controls a local Apache, MariaDB, and PHP stack from a single VCL app and keeps its runtime state inside the UniWamp folder.
Target version: v0.2.0-beta
Beta scope:
- Portable Windows WAMP dashboard for Apache, MariaDB, PHP, local vHosts, generated config, and developer tools.
- Script catalog and installer flow for common PHP applications.
- Early release packaging and clean-machine validation.
Known beta limitations:
- Runtime binaries must be provided in the expected folders unless using a package profile that includes them.
- Clean-machine, portability, and long-running stability validation are tracked in
BETA_RELEASE_CHECKLIST.mdand the beta docs. - The script manager is under active validation and may need catalog-specific fixes for individual upstream installers.
- The app is intended for local development only.
- Starts, stops, and restarts Apache
- Starts, stops, and restarts MariaDB
- Detects bundled PHP versions and lets you select the active one
- Manages enabled PHP extensions for the active PHP runtime
- Generates Apache, PHP, and MariaDB config files from UniWamp templates
- Manages local virtual hosts
- Manages native FTP, FTPS, and SFTP sync connection profiles and sync profiles
- Bundles WinSCP portable in
runtime\tools\winscpfor manual FTP/SFTP transfers and scripted sync sessions - The virtual-host grid provides browser, folder, code editor, terminal, delete, and SSL actions per row
- Launches the local site, Adminer, logs, terminals, and local developer tools
- Optionally generates a self-signed SSL certificate
- Checks for basic port conflicts before startup
src/- Delphi source coderuntime/- bundled runtime folders for Apache, MariaDB, PHP, and optional Node.jsconfig/- app state and generated configuration outputtemplates/- UniWamp-owned config templateswww/- default web root and vhost contenthome/- local app tools such as Adminerssl/- local certificate outputlogs/- activity and service logstmp/- temporary filestests/- smoke test scriptsrc/assets/- embedded PNG icon and header sources used to build the UI resource bundle
- MkDocs site:
mkdocs.yml - Start here in the repo docs:
docs/index.md - Installation guide:
docs/installation.md - Usage guide:
docs/usage.md - Reference docs:
docs/ARCHITECTURE.md,docs/CONFIG_SCHEMA.md,docs/SYNC_PROFILES.md,docs/SECURITY_AND_OPERATIONS.md,docs/TEST_PLAN.md - Beta support matrix:
docs/testing/BETA_SUPPORT_MATRIX.md - Beta release checklist:
BETA_RELEASE_CHECKLIST.md - Published static site output is built into
site/when you runmkdocs build
- Windows 10 or Windows 11 x64 for the beta target
- Delphi 12.4 to build the VCL app
- PowerShell 7 (
pwsh) or Windows PowerShell 5.1 for the repo verification script - Apache, MariaDB, and PHP binaries placed into the expected runtime folders
- UI icon PNGs are embedded into the EXE at build time from
src/assets
The app ships with sensible defaults stored in config/uniwamp.json. Current defaults in the repository are:
- HTTP port: 8080
- HTTPS port: 8443
- MariaDB port: 3309
- Default document root:
www - Selected PHP version: php85
- Selected Node version: node-v22.23.1-win-x64
- Terminal executable (terminalExePath): bin\cmder\Cmder.exe
Place your own binaries into these locations:
runtime/apache/bin/httpd.exeruntime/mariadb/bin/mariadbd.exeruntime/mariadb/bin/mysqladmin.exeruntime/php/<version>/php.exeruntime/php/<version>/php8apache2_4.dllor a compatible Apache PHP module
Optional:
runtime/apache/bin/openssl.exeruntime/nodejs/<version>/...bin/cmder/Cmder.exe
Adminer should be placed at:
home/adminer/index.php
UniWamp launches a terminal using terminalExePath from config/uniwamp.json.
Default value:
bin\\cmder\\Cmder.exe
If you want a different Cmder location, update terminalExePath to the full path or a path relative to the UniWamp root.
The main Tools menu and tool panel also expose:
Open Siteto launch the local root siteOpen Adminerto launch Adminer whenhome/adminer/index.phpexistsTerminalto launch the configured terminal executableRepo Terminalto open a terminal at the UniWamp root for Git and maintenance workComposerlaunches the bundledruntime\tools\composer\composer.pharthrough the selected PHP runtime orphp.exeon PATH;WP-CLIlaunches the bundledruntime\tools\wp-cli\wp-cli.pharthe same way;npm,pnpm, andyarnprefer the selected Node.js runtime's bundled commands or corepack shims before falling back to PATH;Git,Node,Mailpit,Redis,Memcached, andEditorlaunchers use the corresponding executables when available on PATH; the editor button prefers bundled Lite XL fromruntime\tools\lite-xl\lite-xl.exeWinSCPis bundled inruntime\tools\winscpfor manual FTP/SFTP file transfers and scripted sync sessions; UniWamp launches it withruntime\tools\winscp\WinSCP.iniso it stays portableUpdateto stage a manifest-driven package intotmp\updates- The second tool row keeps the repository-oriented launchers and update action grouped together for faster maintenance work
Copy Reportto copy a diagnostic snapshot with paths, versions, ports, service state, and recent errorsCopy Activityto copy the current activity log to the clipboardEscto close the main window through the normal shutdown flow
The dashboard also exposes a read-only JSON status snapshot at
home/dashboard/status.php for local tooling and diagnostics.
Primary app state is stored in:
config/uniwamp.json
Common settings include:
- HTTP port
- HTTPS port
- MariaDB port
- host name
- document root
- active PHP version
- active Node.js version
- SSL toggle
- virtual hosts
- connection profiles and sync profiles
- terminal executable path
Profile model:
- Connection profiles describe how to reach a remote system. They hold the host, port, protocol, username, and secret-backed credentials.
- Sync profiles describe what to transfer. They hold the local path, remote path, direction, filters, hooks, and delete behavior.
- A sync profile can point at a named connection profile or keep inline connection fields for compatibility with older layouts.
- Connection secrets live in the Windows secret store, not in
config/uniwamp.json. - See
docs/SYNC_PROFILES.mdfor the full profile layout anddocs/CONFIG_SCHEMA.mdfor the JSON fields.
Sync note:
- SFTP supports password authentication,
ssh-agent, and unencrypted private keys. - Password-auth SFTP uses bundled
PuTTY PSFTPwhenruntime\tools\putty\psftp.exeis available. - If
psftp.exeis missing, UniWamp attempts to download the current 64-bit PuTTYpsftp.exefrom the official PuTTY site intoruntime\tools\putty. - Encrypted private-key passphrases are not supported in unattended sync runs.
Generated config files are written to:
config/generated/httpd.confconfig/generated/httpd-ssl.confconfig/generated/httpd-vhosts.confconfig/generated/php.iniconfig/generated/mariadb.iniconfig/generated/env.bat
The generated Cmder environment file exports:
UNIWAMP_ROOTUNIWAMP_DOCROOTUNIWAMP_MARIADB_BINPHP_HOMEPHP_BINNODE_HOMEwhen a Node version is selectedNODE_BINwhen a Node version is selected
It switches Cmder to a green-on-black color scheme and shows the selected PHP version, Node version, working path, and MariaDB bin path when Cmder opens.
Build the app from a Delphi command prompt:
cd src
call "<Delphi>\bin\rsvars.bat"
msbuild UniWamp.dproj /t:Build /p:Config=Release /p:Platform=Win32tests\run-all.ps1 uses pwsh when available, or powershell.exe for the
installer and manifest checks if you call the helper scripts directly.
UniWamp includes a JSON-driven project script catalog under scripts/catalog.json. Open Help -> Scripts to browse and run the bundled CMS and PHP framework bootstrap scripts. The reusable engine supports directory creation, downloads, ZIP extraction, recursive copies, file writes, and portable command execution. See scripts/README.md when adding catalog entries.
For maintainer guidance, see docs/SCRIPTS_MAINTENANCE.md.
Run the full local verification flow from the repository root:
pwsh -NoProfile -ExecutionPolicy Bypass -File .\tests\run-all.ps1This builds the app, builds the config harness, runs the smoke test, and runs the config assertions. It also builds and runs the process harness for process-manager and lifecycle checks. The process harness now also covers terminal/editor fallback ordering, runtime archive integrity checks, staged update validation, rollback, promotion, promotion rollback recovery, and workspace cleanup helpers.
The repo includes profile-specific Inno Setup scripts:
installer/UniWamp.Php82.issinstaller/UniWamp.Php83.issinstaller/UniWamp.Php84.issinstaller/UniWamp.Php85.issinstaller/UniWamp.Full.iss
To build the installer on a machine with Delphi and Inno Setup installed:
- Build the app so
src\tmpbuild\bin\UniWamp.exeexists. - Run
installer\build-installer.bat.
The build script generates five installer files:
UniWamp-Php82-Setup-v0.2.0-beta.exeUniWamp-Php83-Setup-v0.2.0-beta.exeUniWamp-Php84-Setup-v0.2.0-beta.exeUniWamp-Php85-Setup-v0.2.0-beta.exeUniWamp-Full-Setup-v0.2.0-beta.exe
Profile scope:
- Php82: Apache, MariaDB, PHP 82, plus bundled Composer, WP-CLI, and the Node.js runtime
- Php83: Apache, MariaDB, PHP 83, plus bundled Composer, WP-CLI, and the Node.js runtime
- Php84: Apache, MariaDB, PHP 84, plus bundled Composer, WP-CLI, and the Node.js runtime
- Php85: Apache, MariaDB, PHP 85, plus bundled Composer, WP-CLI, and the Node.js runtime
- Full: Apache, MariaDB, PHP 82/83/84/85, bundled Composer, WP-CLI, the Node.js runtime, and the bundled developer tools
- All installer profiles also include bundled PuTTY PSFTP for password-auth SFTP syncs.
Each profile-specific script includes the same shared payload rules from installer/UniWamp.Common.issinc.
The installer packages the portable app tree into a user-writable install folder and creates the runtime directories UniWamp needs on first launch. MariaDB system tables are generated on the first MariaDB start instead of being shipped in the installer payload.
To build the installers:
cd installer
build-installer.batThat script rebuilds src\tmpbuild\bin\UniWamp.exe, refreshes
installer\distribution-manifest.json, and then compiles the profile-specific
Inno Setup installers.
UniWamp now includes a local staged update flow for future package management work:
- Validate an update manifest that names the package, version, and expected SHA-256.
- Verify the package hash before extraction.
- Extract into a portable workspace under
tmp\updates. - Write staging metadata alongside the extracted package.
- Promote the staged workspace into the target folder with a backup of the previous target tree.
- Clean up the workspace when the update is complete or cancelled.
Remote downloads are intentionally not part of the current flow.
Example manifest:
{
"packageFileName": "runtime.zip",
"expectedSha256": "0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF",
"packageVersion": "1.0.0"
}Use the Update button in the tool panel to select the manifest, stage the package into tmp\updates, and record the workspace metadata before any promotion step.
- UniWamp does not install Windows services.
- The app keeps its config and generated files inside the repository folder.
- Apache, MariaDB, and PHP are expected to be portable binaries, not system-wide installs.
- No files are copied from
uniserver-master.