Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
03364e9
Create the Web-UI
iMattPro Jul 8, 2026
f9f0d8f
Add remove source action buttons
iMattPro Jul 8, 2026
6a4f5b1
Use html templates and static assets
iMattPro Jul 8, 2026
a811566
Dark mode
iMattPro Jul 8, 2026
7589763
Improve security and Windows compatibilty
iMattPro Jul 8, 2026
da045f1
Add qi ui stop, restart and status
iMattPro Jul 8, 2026
2e65059
Minor code changes
iMattPro Jul 8, 2026
2376bbc
Clean up design elements
iMattPro Jul 9, 2026
33b9396
Heavy refactor
iMattPro Jul 10, 2026
5115a11
Add version check notification
iMattPro Jul 10, 2026
a35e3c2
Truncate ui log
iMattPro Jul 10, 2026
8129a75
Now we can use a cache folder in .qi folder
iMattPro Jul 10, 2026
6e31551
Fix errors during large seeds in the web-ui
iMattPro Jul 10, 2026
4b468f8
Fix error messages again
iMattPro Jul 10, 2026
b8f3ef1
Fix labelling of web-ui sections
iMattPro Jul 10, 2026
8a312e3
Fix various layout issues
iMattPro Jul 11, 2026
c000440
Code cleanup
iMattPro Jul 11, 2026
6aedeb1
Add a footer to web-ui
iMattPro Jul 11, 2026
7ff601a
Styling updates to the web-ui
iMattPro Jul 11, 2026
e8420a5
Allow board creation from custom sources and improve PHP version matc…
iMattPro Jul 11, 2026
fefc9f2
Update docs
iMattPro Jul 11, 2026
63a7139
Small design tweaks
iMattPro Jul 12, 2026
947a6a3
Add and fix Windows functionality
iMattPro Jul 12, 2026
e858a14
Fix up some additional windows issues
iMattPro Jul 12, 2026
08bd25e
Remove the powershel ps1 script
iMattPro Jul 12, 2026
b0e500d
Rewrite troubleshooting docs
iMattPro Jul 12, 2026
2d6bf12
Expand Doctor tests and more windows fixes
iMattPro Jul 12, 2026
9f2982c
Keep composer.phar in releases
iMattPro Jul 12, 2026
4b3577e
More windows fixes and better ajax error responses
iMattPro Jul 12, 2026
1610958
Replace terminology sandbox with dashboard
iMattPro Jul 13, 2026
5cae87a
Security review and code audit fixes
iMattPro Jul 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,31 @@ $ tests/vendor/bin/phpunit -c phpunit.xml.dist

The CLI test dependencies install into `tests/vendor/`, leaving the main application `vendor/` directory unchanged.

On Windows PowerShell, set the Composer config and run the same suite with:

```powershell
Set-Location tests
$env:COMPOSER = 'composer.cli-tests.json'
composer install
Set-Location ..
php tests/vendor/bin/phpunit -c phpunit.xml.dist
```

CLI or Dashboard UI changes must remain compatible with macOS, Linux, and native Windows. Before submitting such changes, run:

```bash
php bin/qi doctor
php bin/qi help
```

On Windows, also smoke-test the supplied launcher from PowerShell or Command Prompt:

```powershell
.\bin\qi.cmd help
```

Windows-specific changes should cover drive-letter paths, paths containing spaces, Command Prompt and PowerShell execution, and the `ui:start`/`ui:status`/`ui:stop` lifecycle. GitHub Actions runs the PHPUnit suite and launcher smoke test on native Windows.

## :computer: Make something great

1. Create a new branch in your repository before doing any work. It should be based off the `develop` branch:
Expand Down
35 changes: 35 additions & 0 deletions .github/workflows/cli-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,38 @@ jobs:

- name: Lint CLI entrypoint
run: php -l bin/qi

windows:
name: Windows PHP 8.3
runs-on: windows-latest

steps:
- name: Checkout
uses: actions/checkout@v6

- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: '8.3'
coverage: none

- name: Validate test Composer config
working-directory: tests
env:
COMPOSER: composer.cli-tests.json
run: composer validate --no-check-publish --strict

- name: Install test dependencies
working-directory: tests
env:
COMPOSER: composer.cli-tests.json
run: composer install --no-interaction --prefer-dist

- name: Run PHPUnit
timeout-minutes: 10
shell: cmd
run: php tests/vendor/bin/phpunit -c phpunit.xml.dist

- name: Smoke test CMD launcher
shell: cmd
run: bin\qi.cmd help
29 changes: 16 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,10 @@ QuickInstall is a tool we built to support the community of phpBB extension deve
##### Browsers
QuickInstall is designed to run on all modern browsers. Please don't use old stuff anymore...seriously.

| | | | | | |
|-|-|-|-|-|-|
| Desktop: | ![Chrome](https://cdnjs.cloudflare.com/ajax/libs/browser-logos/69.0.4/chrome/chrome_32x32.png) 60+ | ![Firefox](https://cdnjs.cloudflare.com/ajax/libs/browser-logos/69.0.4/firefox/firefox_32x32.png) 60+ | ![Safari](https://cdnjs.cloudflare.com/ajax/libs/browser-logos/69.0.4/safari/safari_32x32.png) 12+ | ![Edge](https://cdnjs.cloudflare.com/ajax/libs/browser-logos/69.0.4/edge/edge_32x32.png) 80+ | ![Opera](https://cdnjs.cloudflare.com/ajax/libs/browser-logos/69.0.4/opera/opera_32x32.png) 40+ |
| Mobile: | ![iOS](https://cdnjs.cloudflare.com/ajax/libs/browser-logos/69.0.4/safari-ios/safari-ios_32x32.png) 12+ | ![Android](https://cdnjs.cloudflare.com/ajax/libs/browser-logos/69.0.4/android-webview/android-webview_32x32.png) 6+ | | | |
| | | | | | |
|----------|---------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------|
| Desktop: | ![Chrome](https://cdnjs.cloudflare.com/ajax/libs/browser-logos/69.0.4/chrome/chrome_32x32.png) 60+ | ![Firefox](https://cdnjs.cloudflare.com/ajax/libs/browser-logos/69.0.4/firefox/firefox_32x32.png) 60+ | ![Safari](https://cdnjs.cloudflare.com/ajax/libs/browser-logos/69.0.4/safari/safari_32x32.png) 12+ | ![Edge](https://cdnjs.cloudflare.com/ajax/libs/browser-logos/69.0.4/edge/edge_32x32.png) 80+ | ![Opera](https://cdnjs.cloudflare.com/ajax/libs/browser-logos/69.0.4/opera/opera_32x32.png) 40+ |
| Mobile: | ![iOS](https://cdnjs.cloudflare.com/ajax/libs/browser-logos/69.0.4/safari-ios/safari-ios_32x32.png) 12+ | ![Android](https://cdnjs.cloudflare.com/ajax/libs/browser-logos/69.0.4/android-webview/android-webview_32x32.png) 6+ | | | |

##### phpBB Requirements
phpBB boards require a web server running PHP and one of the following database management systems.
Expand All @@ -59,26 +59,29 @@ phpBB boards require a web server running PHP and one of the following database

## QuickInstall CLI

QuickInstall now includes a Docker-based CLI for creating local phpBB test boards. It writes generated state to `.qi/` and leaves the legacy web UI unchanged. The QuickInstall CLI requires PHP 8.0 or newer for the `php bin/qi` command.
QuickInstall now includes a cross-platform, Docker-based CLI and local Dashboard UI for creating phpBB test boards. They work on macOS, Linux, and native Windows and write generated state to `.qi/` without changing the legacy web application.

Requirements:

- Docker Desktop, installed and running
- PHP 8.0 or newer for the CLI command
- Git when using Git sources

Create your first new board:

```bash
php bin/qi init
php bin/qi board:create test --phpbb 3.3 --db mariadb --port 8081 --populate extension-dev
```

The QuickInstall CLI targets phpBB 3.2+ installer-based boards. phpBB 3.0/3.1 remain legacy-web-app territory and are not planned for the QuickInstall CLI.

Downloaded extensions can be unzipped into `customisations/` and mounted into boards:
If you prefer a browser workflow, start the QuickInstall Dashboard UI:

```bash
php bin/qi ext:mount test customisations/vendor/extname
php bin/qi ui:start
```

Downloaded styles can be unzipped into `customisations/` and mounted into boards:

```bash
php bin/qi style:mount test customisations/stylename
```
The examples use `php bin/qi`, which works on every supported operating system when PHP is in `PATH`. Windows users can alternatively use `.\bin\qi.cmd` from either Command Prompt or PowerShell.

See the complete [QuickInstall CLI docs](docs/sandbox-cli.md).

Expand Down
16 changes: 1 addition & 15 deletions bin/qi
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,8 @@ if (PHP_VERSION_ID < 80000)
exit(1);
}

require __DIR__ . '/../src/QuickInstall/Sandbox/bootstrap.php';
require __DIR__ . '/../src/QuickInstall/Sandbox/Application.php';
require __DIR__ . '/../src/QuickInstall/Sandbox/Output.php';
require __DIR__ . '/../src/QuickInstall/Sandbox/StreamOutput.php';
require __DIR__ . '/../src/QuickInstall/Sandbox/BufferedOutput.php';
require __DIR__ . '/../src/QuickInstall/Sandbox/ProcessRunner.php';
require __DIR__ . '/../src/QuickInstall/Sandbox/CommandLine.php';
require __DIR__ . '/../src/QuickInstall/Sandbox/Project.php';
require __DIR__ . '/../src/QuickInstall/Sandbox/VersionMatrix.php';
require __DIR__ . '/../src/QuickInstall/Sandbox/SourceProvider.php';
require __DIR__ . '/../src/QuickInstall/Sandbox/SourceService.php';
require __DIR__ . '/../src/QuickInstall/Sandbox/BoardService.php';
require __DIR__ . '/../src/QuickInstall/Sandbox/DockerComposeWriter.php';
require __DIR__ . '/../src/QuickInstall/Sandbox/BoardRunner.php';
require __DIR__ . '/../src/QuickInstall/Sandbox/SeederWriter.php';
require __DIR__ . '/../src/QuickInstall/Sandbox/ExtensionManager.php';
require __DIR__ . '/../src/QuickInstall/Sandbox/StyleManager.php';

use QuickInstall\Sandbox\Application;

Expand Down
9 changes: 9 additions & 0 deletions bin/qi.cmd
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
@echo off
where php >nul 2>&1
if errorlevel 1 (
echo QuickInstall requires PHP 8.0 or newer. 1>&2
echo Install PHP, add php.exe to PATH, then reopen your terminal. 1>&2
exit /b 1
)
php "%~dp0qi" %*
exit /b %ERRORLEVEL%
1 change: 0 additions & 1 deletion build.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@
<delete file="${dir}/.gitattributes" />
<delete file="${dir}/build.xml" />
<delete file="${dir}/composer.lock" />
<delete file="${dir}/composer.phar" />
<delete file="${dir}/package.json" />
<delete file="${dir}/package-lock.json" />
<delete file="${dir}/phpunit.xml.dist" />
Expand Down
161 changes: 155 additions & 6 deletions docs/sandbox-cli.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,44 @@ If you ever need help with commands, run:
php bin/qi help
```

If you prefer a browser workflow, start the QuickInstall Dashboard UI:

```bash
php bin/qi ui:start
```

Then open the URL printed by the command:

```text
http://127.0.0.1:8079/
```

## Commands by OS

The examples in this guide use the portable command form:

```bash
php bin/qi <command>
```

It works on macOS, Linux, and Windows when PHP is available in `PATH`.

Windows also includes a `qi.cmd` launcher. From PowerShell:

```powershell
.\bin\qi.cmd <command>
```

From Command Prompt:

```batch
bin\qi.cmd <command>
```

Arguments and options are identical with every launcher. Run commands from the QuickInstall project root. Windows drive-letter paths, UNC paths, backslashes, spaces, and case-insensitive filesystem paths are supported.

Docker Desktop on Windows must use its WSL 2 or Hyper-V Linux-container backend rather than Windows containers.

## Common Recipes

Create a small empty board:
Expand Down Expand Up @@ -207,6 +245,12 @@ By default, extension sources must live under `customisations/`. To mount a trus
php bin/qi ext:mount demo /path/to/vendor/extname --allow-external
```

On Windows, quote external paths containing spaces:

```powershell
.\bin\qi.cmd ext:mount demo "C:\Path\To\My Extensions\vendor\extname" --allow-external
```

## Styles

Put downloaded styles under `customisations/`:
Expand Down Expand Up @@ -254,6 +298,12 @@ By default, style sources must live under `customisations/`. To mount a trusted
php bin/qi style:mount demo /path/to/stylename --allow-external
```

On Windows, quote external paths containing spaces:

```powershell
.\bin\qi.cmd style:mount demo "C:\Path\To\My Styles\stylename" --allow-external
```

## Supported phpBB Versions

Show supported selectors:
Expand Down Expand Up @@ -331,16 +381,63 @@ Fetched sources live under:
.qi/sources/phpbb-<source>
```

## Dashboard UI

The QuickInstall Dashboard UI provides a local browser interface for the same workflows exposed by the CLI. It is served by PHP's built-in web server and backed by the same `.qi/` workspace. The Dashboard UI can be started, checked, restarted, and stopped on macOS, Linux, or native Windows.

Start the UI:

```bash
php bin/qi ui:start
```

The default URL is:

```text
http://127.0.0.1:8079/
```

Use a different local port:

```bash
php bin/qi ui:start --port 8088
```

Check or stop the tracked Dashboard UI server:

```bash
php bin/qi ui:status
php bin/qi ui:stop
```

Restart it:

```bash
php bin/qi ui:restart
```

Supported Dashboard UI server hosts are loopback-only:

```bash
php bin/qi ui:start --host 127.0.0.1
php bin/qi ui:start --host localhost
php bin/qi ui:start --host ::1
```

## Where Files Go

Generated state:

| Path | Contents |
|------------------------|----------------------------------------------|
| `.qi/boards/<name>` | Installed phpBB board files |
| `.qi/runtime/<name>` | Docker Compose, Dockerfile, installer config |
| `.qi/db/<name>` | Database files |
| `.qi/sources/<source>` | Downloaded phpBB source |
| Path | Contents |
|--------------------------|----------------------------------------------|
| `.qi/boards/<name>` | Installed phpBB board files |
| `.qi/runtime/<name>` | Docker Compose, Dockerfile, installer config |
| `.qi/db/<name>` | Database files |
| `.qi/sources/<source>` | Downloaded phpBB source |
| `.qi/runtime/ui.json` | Tracked Dashboard UI server state |
| `.qi/runtime/ui.log` | Dashboard UI server output log |
| `.qi/runtime/ui.log.err` | Windows Dashboard UI server error log |
| `.qi/cache/` | Cached update-check metadata |

User-managed drop zone:

Expand All @@ -355,13 +452,42 @@ customisations/
- `board:create` rejects ports already registered to another board or already in use on the host.
- `ext:mount` and `style:mount` only use `customisations/` unless `--allow-external` is used.
- Custom Git source URLs require `--allow-external`; only use trusted forks.
- The Dashboard UI server only accepts loopback hosts (`127.0.0.1`, `localhost`, or `::1`) and rejects non-local requests.
- `ui:start` refuses ports already in use on the selected loopback host.
- Dashboard UI form submissions use CSRF tokens and only accept local origins or referrers.

## Troubleshooting

If QuickInstall starts but a command is not working as expected, run the environment check from the project root:

```bash
php bin/qi doctor
```

On Windows PowerShell, you can use the Windows launcher instead:

```powershell
.\bin\qi.cmd doctor
```

Every check should report `OK`; failures identify the missing or unavailable requirement.

#### QuickInstall does not start on Windows

First, check whether PHP is available:

```powershell
php --version
```

If Windows does not recognize `php`, install PHP 8 or newer and add the directory containing `php.exe` to the Windows `PATH`. Open a new terminal, confirm `php --version` works, then run `.\bin\qi.cmd doctor` again.

#### Docker command fails

Check that Docker Desktop is running and that the docker command works in this terminal.

On Windows, also confirm Docker Desktop is using Linux containers. `php bin/qi doctor` reports `Linux containers: OK` when configured correctly.

#### Composer command fails

QuickInstall uses composer from PATH first, then `composer.phar` from the project root. Restore `composer.phar` or install Composer if both are missing.
Expand All @@ -383,3 +509,26 @@ Use this when a board's files, database, or generated Docker runtime are no long
php bin/qi board:destroy demo
php bin/qi board:create demo --phpbb 3.3 --db mariadb --port 8081 --populate none
```

#### Dashboard UI will not start

Check the tracked status:

```bash
php bin/qi ui:status
```

If the status is stale, clear the old state and start again:

```bash
php bin/qi ui:stop
php bin/qi ui:start
```

If the selected port is already in use, choose a different local port:

```bash
php bin/qi ui:start --port 8088
```

The Dashboard UI server output log is written to `.qi/runtime/ui.log`. On Windows, PHP server errors are written to `.qi/runtime/ui.log.err`.
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
{
"license": "GPL-2.0-only",
"private": true,
"dependencies": {
"autoprefixer": "^10.4.2",
"bootstrap": "5.1.3",
Expand Down
Loading