Zero-config, Docker-based local environment for rapid theme and plugin evaluation.
Spin up a fully installed WordPress site in seconds, bypassing the setup wizard entirely. This environment is pre-tuned for high-speed testing of themes, plugins, and complex setups like WooCommerce or Multisite.
- π Zero-Config: Fully installed WordPress site via
docker compose up. - ποΈ WooCommerce Ready: Automatic store setup and configuration.
- π Multisite Support: One-click conversion to a subfolder network.
- π§ Mailpit Integrated: Instant email capture and testing dashboard.
- π οΈ Monorepo Structure: Manage multiple themes and plugins in one project.
- Configure:
cp .env.example .env - Start:
docker compose up -d - Evaluate: Visit http://localhost:8080
Default Credentials:
User:admin| Password:password
The environment uses a custom init-wp.sh engine to handle everything:
- Database creation and site installation.
- Admin user creation and plugin/theme activation.
- WooCommerce and Multisite configuration.
- Plugin Cleanup: Use
TRIM_PLUGINSin.envto surgically remove default or unwanted plugins during setup. - Must-Use Plugins: Support for
mu-pluginsvia thedocker/mu-pluginsdirectory. - Bulk Installation: Support for installing multiple plugins and themes via
scripts/init-plugins.txtandscripts/init-themes.txt.
If woocommerce is in SITE_PLUGINS, the store is automatically configured:
- Sets currency, units, and address via
.env. - Skips the onboarding wizard for a "Ready-to-Evaluate" experience.
Convert your site to a Multisite Network by setting MULTISITE_ENABLED=1. The cli service handles the migration and .htaccess updates automatically.
All outgoing emails are captured by Mailpit.
- Dashboard: http://localhost:8025
- All local packages are automatically routed to the internal mail service.
Place your theme or plugin folder in the packages/ directory. They are automatically discovered and can be managed via the root toolset.
- Create Directory:
mkdir packages/my-new-plugin - Mount Volume: Update the
x-packagesanchor at the top ofcompose.yml. This automatically syncs the volume across bothwebandcliservices. - Register PHP Dependencies: Ensure the package has a
composer.json. Runcomposer installat the project root to merge its dependencies. - Register Assets: Ensure the package has a
package.json. Runbun installat the root to register its workspace.
Add slugs to SITE_PLUGINS or SITE_THEMES in your .env:
SITE_PLUGINS=akismet,woocommerce,contact-form-7Note: For bulk installation, you can also list slugs (one per line) in
scripts/init-plugins.txtorscripts/init-themes.txt.
This project is organized as a monorepo and uses a modular Docker configuration to simplify the development of multiple WordPress assets simultaneously.
The environment uses a base configuration in docker/compose.base.yml which is extended by the root compose.yml. This separation allows for a clean, reusable base image and service definitions while keeping local development overrides isolated.
assets/: Static assets, favicon, and server configurations.docker/: Local MySQL data and service configurations.packages/: Local themes and plugins.scripts/: Development utilities (Installation, POT generation, Distribution).
- Bun: Manages root tools and JS workspaces.
- Composer: Manages PHP dependencies with automated package merging.
- Biome: For JS, TS, JSON, and CSS (
bun lint). - PHPCS: All WordPress packages located in
packages/directory should follow WordPress Coding Standards (composer lint:packages), while thetests/should usePSR12Coding Standards (composer lint:tests).
scripts/init-wp.sh: Dynamically download, configure, and install a fresh WordPress core.scripts/make-pot.sh: Generates translation files for all packages.scripts/make-dist.sh: Creates production-ready ZIP archives. Requires a.distignorefile in the package directory to filter contents.
- Xdebug: Pre-installed and configured for PHP 8.1+. Connect your IDE to the
9003port on your local machine. - WP-CLI: Access the containerized CLI via the
cliservice.docker compose run --rm cli wp <command>
- Database Access: Connect to the local MySQL server at
localhost:3306using the credentials defined in.env.
This project includes a robust testing infrastructure for both unit and integration tests.
- PHPUnit 10.5: The core testing framework.
- Brain Monkey: For advanced WordPress hook and function mocking.
Ensure you have installed development dependencies via composer install.
composer testThis will execute all test suites defined in phpunit.xml and output a text-based coverage report. Tests are designed to run on the host machine using the root vendor/bin/phpunit binary.
Automated testing is integrated into the development lifecycle via GitHub Actions (.github/workflows/main.yml):
- Matrix Testing: Every Pull Request and Push to
mainis automatically tested across multiple PHP and WordPress versions.
- Start:
docker compose up -d - Stop:
docker compose down - Reset:
docker compose down -v(Wipes all data) - Logs:
docker compose logs -f cli(Monitor installation)
See .env.example for a full list of available settings including site titles, admin credentials, and WooCommerce/Multisite options.
This project uses a hybrid licensing model:
- Environment & Tools: MIT License.
- WordPress Packages: GPLv3 or later.
This ensures the platform is free to use while ensuring all distributable assets remain compliant with the WordPress ecosystem.