Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
48 changes: 47 additions & 1 deletion .github/workflows/validate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -298,6 +298,50 @@ jobs:
if-no-files-found: ignore
retention-days: 14

compatibility:
name: Isolation and approved images (${{ matrix.browser }})
needs: [checks, build]
if: needs.checks.outputs.build == 'true'
runs-on: ubuntu-24.04
timeout-minutes: 15
strategy:
fail-fast: false
matrix:
browser: [chromium, webkit]
steps:
- uses: actions/checkout@fbc6f3992d24b796d5a048ff273f7fcc4a7b6c09 # v5
- uses: actions/setup-node@a0853c24544627f65ddf259abe73b1d18a591444 # v5
with:
node-version-file: '.node-version'
cache: npm
- run: npm ci --ignore-scripts
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4
with:
name: playground-static
path: dist
- run: npx playwright install --with-deps ${{ matrix.browser }}
- name: Verify isolation and original image bytes through real PHP
env:
PLAYGROUND_ISOLATION_BROWSER: ${{ matrix.browser }}
PUBLIC_ASSET_BROWSER: ${{ matrix.browser }}
PUBLIC_ASSET_RUNTIME_DIST: dist
PUBLIC_ASSET_BROWSER_EVIDENCE: test-results/public-assets-${{ matrix.browser }}.json
run: |
mkdir -p test-results
node --test test/isolation.browser.mjs
node --test test/public-assets.browser.mjs
- name: Verify Adminer persistence and tool lifecycle
if: matrix.browser == 'chromium'
run: node --test test/adminer.browser.mjs
- name: Retain compatibility diagnostics
if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: playground-compatibility-results-${{ matrix.browser }}
path: test-results/
if-no-files-found: ignore
retention-days: 14

version-catalog:
name: Version catalog installation (${{ matrix.browser }})
needs: [checks, build]
Expand Down Expand Up @@ -336,7 +380,7 @@ jobs:

validate:
name: Validate playground
needs: [checks, build, browser, interaction, version-catalog]
needs: [checks, build, browser, interaction, compatibility, version-catalog]
if: always()
runs-on: ubuntu-24.04
timeout-minutes: 2
Expand All @@ -348,12 +392,14 @@ jobs:
BUILD: ${{ needs.build.result }}
BROWSERS: ${{ needs.browser.result }}
INTERACTIONS: ${{ needs.interaction.result }}
COMPATIBILITY: ${{ needs.compatibility.result }}
VERSION_CATALOG: ${{ needs.version-catalog.result }}
run: |
test "$CHECKS" = success
if [ "$BUILD_REQUIRED" = true ]; then
test "$BUILD" = success
test "$BROWSERS" = success
test "$INTERACTIONS" = success
test "$COMPATIBILITY" = success
test "$VERSION_CATALOG" = success
fi
99 changes: 59 additions & 40 deletions NOTICE
Original file line number Diff line number Diff line change
@@ -1,32 +1,6 @@
JoomEngine Playground
Third-party notices
Copyright 2026 JoomEngine contributors

The full-color JoomEngine pearl rocket is user-supplied project brand artwork.
The exact original is preserved in src/brand/JoomEngine_Pearl_Logo.original.svg;
its checksum and framing are recorded in src/brand/brand-manifest.json.
The SVG favicon and control/decorative uses are generated without changing paths,
gradients or colors by scripts/build-brand.mjs.

The monochrome action icons are Remix Icon, copyright Remix Design.
All 79 supplied source SVGs match the official v2.5.0 release byte-for-byte:
https://github.com/Remix-Design/RemixIcon/tree/755818100db4687fd907ecaef9f57cc9ea77d0d8
That release is licensed under Apache License 2.0, preserved verbatim at
src/brand/icons/LICENSE.remixicon.txt. Exact originals, the action mapping and
file checksums are preserved in src/brand/icons/. The themed derivatives only
add root currentColor paint and accessibility metadata; geometry is unchanged.

PHP execution is provided by Sean Morris and the contributors to
https://github.com/seanmorris/php-wasm . This project consumes their published
runtime and extension packages. Their copyright, licenses and notices are
preserved with the distributed assets.

The PHP and MariaDB WebAssembly builds rely on Emscripten, maintained by the
contributors to https://github.com/emscripten-core/emscripten .

MariaDB integration is provided by https://github.com/joomengine/mariadb-wasm-bridge
and its separately maintained database dependency https://github.com/shyim/lite4mariadb .
MariaDB and lite4mariadb retain their upstream licenses and source provenance.

Joomla is provided by https://github.com/joomla/joomla-cms and retains its GNU
General Public License and all notices included in its release packages. The
reviewed browser database-configuration adapter verifies the original model and
Expand All @@ -41,6 +15,46 @@ Its GPL-2.0-or-later license and copyright notices remain in the derived browser
packages. The reviewed reader-interface adjustment preserves its source header.
The upstream fixture license is included at test/fixtures/LICENSE.jcb.txt.

PHP and phpdbg are provided by the contributors to https://github.com/php/php-src
under the PHP License 3.01 and Zend Engine License 2.00. Their upstream licenses,
copyright notices, selected source revisions and compiled-build provenance remain
with the distributed runtime assets.

MariaDB is provided by the contributors to https://github.com/MariaDB/server
under GNU GPL version 2. Its upstream licenses and source provenance remain with
the distributed database assets.

PHP execution is provided by Sean Morris and the contributors to
https://github.com/seanmorris/php-wasm . This project consumes their published
runtime and extension packages. Their copyright, licenses and notices are
preserved with the distributed assets.

JoomEngine MariaDB WASM Bridge is provided by the contributors to
https://github.com/joomengine/mariadb-wasm-bridge under Apache License 2.0.
Its database worker, persistence layer, host protocol and native PDO driver retain
their licenses and source provenance.

lite4mariadb is provided by the contributors to https://github.com/shyim/lite4mariadb
under GNU GPL version 2. The embedded MariaDB engine and its source provenance
retain their upstream licenses and notices.

JoomEngine Code uses Microsoft's Visual Studio Code 1.142.0 and Monaco Editor
0.57.0 through CodinGame's Monaco VS Code API, services and default extensions
38.1.3. Their MIT licences and the matching Microsoft third-party notices are
preserved in dependencies/joomengine-code and distributed with the editor.
The upstream revisions, source locations and notice digests are recorded there
in provenance.json. The project is independent of Microsoft and CodinGame.

Adminer is provided by Jakub Vrána and contributors through
https://github.com/vrana/adminer. This distribution uses its Apache License 2.0
option; upstream also offers GNU GPL version 2. Its license and the pinned source
and browser-adapter provenance are retained in dependencies/adminer and
distributed with the database interface.

The PHP and MariaDB WebAssembly builds rely on Emscripten, maintained by the
contributors to https://github.com/emscripten-core/emscripten . The compilation
toolchain retains its upstream MIT/NCSA terms.

JCB spreadsheet support builds on PHPOffice/PhpSpreadsheet and ZipStream-PHP,
with Composer PCRE, Mark Baker's Complex and Matrix libraries, MyCLabs PHP Enum,
and PHP-FIG HTTP Message and Simple Cache interfaces. Their MIT licenses are
Expand All @@ -55,9 +69,6 @@ dependencies/jcb-spreadsheet/packages.json and each derived package's provenance
Composer is provided by https://github.com/composer/composer under the MIT
license; its version and verified binary checksum are recorded in that provenance.

The playground source license does not replace the licenses of these bundled
dependencies. The static distribution includes their notices and source links.

The loadable fileinfo extensions are compiled from the pinned official PHP
sources and include libmagic. Their PHP and libmagic licenses and compiled-source
copyright notices are distributed beside each module, with source checksums and
Expand Down Expand Up @@ -110,13 +121,6 @@ placeholders and builds any declared child archives. The pinned source revision,
archive checksum and resulting file provenance are recorded in
dependencies/joomla-languages/packages.json and the generated package inventories.

JoomEngine Code uses Microsoft's Visual Studio Code 1.142.0 and Monaco Editor
0.57.0 through CodinGame's Monaco VS Code API, services and default extensions
38.1.3. Their MIT licences and the matching Microsoft third-party notices are
preserved in dependencies/joomengine-code and distributed with the editor.
The upstream revisions, source locations and notice digests are recorded there
in provenance.json. The project is independent of Microsoft and CodinGame.

The editor includes Microsoft and community language grammars, default colour
themes, Jesse Weed's Seti file icons, Codicons, vscode-textmate and the
vscode-oniguruma WebAssembly regular-expression engine. Their original notices
Expand Down Expand Up @@ -148,10 +152,25 @@ engineering to debug such modifications.
PHP debugging builds on PHP's phpdbg SAPI and Sean Morris's PHP-WASM browser
debugger, using php-dbg-wasm 0.2.0. PHP/phpdbg retain their PHP licence and the
PHP-WASM adapters retain their Apache-2.0 or GPL-2.0-only notices; the runtime
asset manifests record the selected PHP sources and compiled builds. Emscripten
provides the browser compilation toolchain under its upstream MIT/NCSA terms.
The existing PHP, extension and database recognition above continues to apply.
asset manifests record the selected PHP sources and compiled builds.

The playground source license does not replace the licenses of these bundled
dependencies. The static distribution includes their notices and source links.

The full-color JoomEngine pearl rocket is project brand artwork.
The exact original is preserved in src/brand/JoomEngine_Pearl_Logo.original.svg;
its checksum and framing are recorded in src/brand/brand-manifest.json.
The SVG favicon and control/decorative uses are generated without changing paths,
gradients or colors by scripts/build-brand.mjs.

The JOOMENGINE CODE vector wordmarks in src/brand are geometric artwork by the
JoomEngine contributors, extending the existing JoomEngine identity. They use
editable SVG paths without a bundled third-party font.

The monochrome action icons are Remix Icon, copyright Remix Design:
https://github.com/Remix-Design/RemixIcon/tree/755818100db4687fd907ecaef9f57cc9ea77d0d8
The selected originals match the official v2.5.0 release byte-for-byte. That
release is licensed under Apache License 2.0, preserved verbatim at
src/brand/icons/LICENSE.remixicon.txt. Exact originals, the action mapping and
file checksums are preserved in src/brand/icons/. The themed derivatives only
add root currentColor paint and accessibility metadata; geometry is unchanged.
45 changes: 32 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,46 +23,65 @@ presets, custom/local endpoints and scoped context are implemented; the
from outstanding real-service browser checks. Local editing and debugging do not
require AI credentials.

The **DB** action opens [Adminer](docs/database-user-guide.md) against the same
running database. Code and DB alternate in the embedded workspace, with separate
left/right/bottom, floating, full-width and detached layouts. Adminer loads on
demand and adds about 435 KiB of staged PHP/UI assets (about 246 KiB gzipped),
without another PHP or database engine.

[Browser compatibility](docs/browser-compatibility.md) verifies isolation before
starting the runtime and provides a controlled `require-corp` fallback. Its
restricted [public-image relay](relay/README.md) must be hosted and configured
before enabling fallback; the checked-in defaults preserve normal mode with no
relay dependency. Real mobile validation follows deployment.

For an agent-oriented introduction to configuring a site, working with JCB,
testing extensions and exporting results, see the [Playground agent guide](docs/agent-guide.md).

## Upstream foundations and credits

This project builds directly on the work of these maintainers and contributors:

- **[Joomla](https://github.com/joomla/joomla-cms)** provides the CMS and its
installation, extension management, and console interfaces.
- **[Joomla Component Builder](https://github.com/joomengine/Joomla-Component-Builder)**
is JoomEngine’s core development tool and default deployment.
- **[PHP/phpdbg](https://github.com/php/php-src)** supplies PHP and its debugger;
JoomEngine Code uses Sean Morris's pinned `php-dbg-wasm` package with a small,
reproducibly compiled HTTP/debugging bridge.
- **[MariaDB](https://github.com/MariaDB/server)** provides the database engine.
- **[seanmorris/php-wasm](https://github.com/seanmorris/php-wasm)** — Sean Morris
and the project’s contributors provide the PHP runtime, CGI implementation,
filesystem, asynchronous JavaScript integration, and loadable extension
support. The playground consumes their published runtime and extension
packages directly.
- **[emscripten-core/emscripten](https://github.com/emscripten-core/emscripten)** —
The Emscripten maintainers and contributors provide the compiler toolchain and
runtime facilities that make PHP, native extensions, and MariaDB available in
WebAssembly.
- **[JoomEngine MariaDB WASM Bridge](https://github.com/joomengine/mariadb-wasm-bridge)**
provides the database worker, persistence, host protocol, native PDO driver,
and adapter for the upstream PHP runtime.
- **[shyim/lite4mariadb](https://github.com/shyim/lite4mariadb)** and
**[MariaDB](https://github.com/MariaDB/server)** provide the actual database
engine used by the bridge.
- **[Joomla](https://github.com/joomla/joomla-cms)** provides the CMS and its
installation, extension management, and console interfaces.
- **[shyim/lite4mariadb](https://github.com/shyim/lite4mariadb)** makes the MariaDB
engine available to the bridge as WebAssembly.
- **Microsoft [VS Code](https://github.com/microsoft/vscode) and
[Monaco](https://github.com/microsoft/monaco-editor)** provide the editor and
workbench foundations. **[CodinGame](https://github.com/CodinGame/monaco-vscode-api)**
provides their browser integration. JoomEngine Code retains the exact shipped
licenses, source notices and dependency inventory.
- **[PHP/phpdbg](https://github.com/php/php-src)** supplies the PHP debugger;
JoomEngine Code uses Sean Morris's pinned `php-dbg-wasm` package with a small,
reproducibly compiled HTTP/debugging bridge.
- **[Adminer](https://github.com/vrana/adminer)** provides the database interface
for browsing tables, inspecting schemas and running SQL through the active
site's existing PHP and MariaDB runtimes.
- **[emscripten-core/emscripten](https://github.com/emscripten-core/emscripten)** —
The Emscripten maintainers and contributors provide the compiler toolchain and
runtime facilities that make PHP, native extensions, and MariaDB available in
WebAssembly.

Thank you to these communities for the engineering and maintenance this project
relies on. Their licenses and notices remain with the distributed assets; see
[NOTICE](NOTICE).

Reference: [Official Joomla playground](https://github.com/joomla-projects/joomla-playground/).
Joomla also maintains an [official Joomla Playground](https://joomla-projects.github.io/joomla-playground/)
([source](https://github.com/joomla-projects/joomla-playground/)).
JoomEngine Playground was developed independently and is not based on that
project's codebase. It uses a different PHP runtime and database architecture,
with its upstream foundations credited separately above.

## What is assembled

Expand Down
4 changes: 4 additions & 0 deletions config/browser-compatibility.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
{
"schemaVersion": 1,
"fallbackEnabled": false
}
9 changes: 9 additions & 0 deletions config/public-assets-config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
{
"schemaVersion": 1,
"enabled": false,
"relayBaseURL": null,
"registryVersions": [
"jcb-2026-10-31-v1"
],
"timeoutMs": 15000
}
Loading
Loading