Frameworks
Govard detects supported frameworks and applies runtime defaults plus version-aware overrides.
Support Matrix
| Framework | Auto-Detection | Version-Aware Profile | Default Web Root |
|---|---|---|---|
| Magento 2 | ✅ | ✅ | /pub |
| Magento 1 / OpenMage | ✅ | framework defaults | project root |
| Laravel | ✅ | ✅ | /public |
| Next.js | ✅ | framework defaults | project root |
| Emdash | ✅ | framework defaults | project root |
| Drupal | ✅ | ✅ | /web |
| Symfony | ✅ | ✅ | /public |
| Shopware | ✅ | framework defaults | /public |
| CakePHP | ✅ | framework defaults | /webroot |
| WordPress | ✅ | ✅ | / |
| Custom | manual | manual | project root |
Runtime Defaults
| Framework | PHP | Node | DB | Cache | Search | Queue |
|---|---|---|---|---|---|---|
| Magento 2 | 8.4 | 24 | mariadb 11.4 | valkey 8.0.0 | opensearch 2.19.0 | none |
| Magento 1 / OpenMage | 8.1 | — | mariadb 10.11 | none | none | none |
| Laravel | 8.4 | — | mariadb 11.4 | none | none | none |
| Next.js | — | 24 | none | none | none | none |
| Emdash | — | 22 | none | none | none | none |
| Drupal | 8.4 | — | mariadb 11.4 | none | none | none |
| Symfony | 8.4 | — | mariadb 11.4 | none | none | none |
| Shopware | 8.4 | — | mariadb 11.4 | none | none | none |
| CakePHP | 8.4 | — | mariadb 11.4 | none | none | none |
| WordPress | 8.3 | — | mariadb 11.4 | none | none | none |
| Custom | 8.4 | — | mariadb 11.4 | none | none | none |
— means Govard does not force a default for that stack component.
Version-Aware Overrides
| Framework | Version | PHP Override | Other |
|---|---|---|---|
| Laravel | 10 | 8.2 | |
| Laravel | 11 | 8.3 | |
| Laravel | 12 | 8.4 | |
| Symfony | 6 | 8.2 | |
| Symfony | 7 | 8.3 | |
| Drupal | 10 | 8.3 | |
| Drupal | 11 | 8.4 | |
| WordPress | 6 | 8.3 | |
| Magento 2 | 2.4.9+ | 8.4 | MariaDB 11.4, Redis 7.2, OpenSearch 3.0.0, RabbitMQ 4.1.0 |
| Magento 2 | 2.4.8 | 8.4 | MariaDB 11.4, Redis 7.2, OpenSearch 2.19.0 or 3.0.0 |
| Magento 2 | 2.4.7 | 8.3 | MariaDB 10.6 or 10.11, Redis 7.2, OpenSearch 2.12.0-2.19.0 |
| Magento 2 | 2.4.6 | 8.2 | MariaDB 10.6 or 10.11, Redis 7.0-7.2, OpenSearch 2.5.0-2.19.0 |
# Inspect the resolved profile
govard config profile --json
govard config profile --framework laravel --framework-version 11 --json🧱 Magento 2
Magento 2 is the deepest supported workflow in Govard.
Key Features
govard config autoinjects DB, cache, search, Varnish, and base URLs intoapp/etc/env.phpgovard tool magento [command]runs Magento CLI (bin/magento) inside the PHP containergovard tool magerun [command](Shortcut:mr) runsn98-magerun2inside the PHP containergovard tool magento cron:installinstalls crontabs inside the container- Optional Selenium/MFTF support (
mftf: truein features) - Optional LiveReload for Grunt/Vite workflows (
livereload: truein features) - Dedicated
php-debugrouting when Xdebug is enabled
Typical Flow
govard env up
govard config auto
govard tool magento cache:clean
govard test phpunit🏎️ LiveReload & Frontend Development
Govard supports the standard Magento 2 Grunt-based LiveReload workflow.
- Enable the feature in
.govard.yml:yamlstack: features: livereload: true - Apply changes: Run
govard env up. This exposes port35729to your host machine. - Start the watcher:bash
govard shell # Inside the shell: grunt watch - Verify Configuration: This is set up automatically if you run
govard config auto. It injects the following snippet into yourapp/etc/env.php:html<script src="http://localhost:35729/livereload.js?snipver=1"></script> - Browser Setup: Simply install the LiveReload Browser Extension or rely on the automated script injection above.
TIP
Manual injection via default.xml is no longer needed. Everything is handled by Govard's auto-configuration engine via env.php.
NOTE
Since port 35729 is mapped directly to your host, you can only run livereload: true for one project at a time. If you have multiple projects, ensure only the active one has this feature enabled.
Native Upgrade Pipeline
# Test upgrade in an isolated profile
cp .govard.yml .govard.upgrade-test.yml
GOVARD_ENV=upgrade-test govard upgrade --version 2.4.8-p4 --dry-run
GOVARD_ENV=upgrade-test govard upgrade --version 2.4.8-p4What govard upgrade does for Magento 2:
- Resolves correct PHP/MariaDB/Search versions for the target
- Smart Composer merge (preserves your modules and custom repos)
- Automatically relaxes version constraints for dev tools (
phpunit,phpmd) - Handles
composer update,setup:upgrade, and static content compilation
Multi-Website / Multi-Store Setup
framework: "magento2"
domain: "primary.test"
store_domains:
store-a.test:
code: base
type: website
store-b.test:
code: store_b
type: storegovard domain add store-a.test
govard domain add store-b.test
govard config auto
govard tool magento cache:flushWhat Govard handles automatically:
- Routes all domains through the shared proxy with HTTPS
- Sets global base URL from
domain - Runs scoped
bin/magento config:setfor eachstore_domainsentry - Emits
MAGE_RUN_CODE/MAGE_RUN_TYPEhost mappings (object form with explicittype)
What you still need to do:
- Create websites, stores, and store views in Magento admin
- Clear config/cache after changing store mappings
🛒 Magento 1 / OpenMage
govard tool magerun [command]Default runtime: PHP 8.1 + MariaDB 10.11. No optional cache/search/queue services forced.
Native Upgrade Pipeline
govard upgrade --version <version>Handles: Composer sync, cache purge (var/cache, var/session, etc.), compiler maintenance, and DB migration via n98-magerun.
Multi-Store with Typed Routing
framework: "magento1"
domain: "primary.test"
store_domains:
store-a.test:
code: base
type: website
store-b.test:
code: store_b
type: store
store-c.test: store_c # scalar = legacy behavior (try both website + store code)Object form with explicit type causes Govard to inject host-based MAGE_RUN_CODE / MAGE_RUN_TYPE into nginx/Apache automatically — no manual .htaccess SetEnvIf rules needed.
🎨 Laravel
govard tool artisan [command]Defaults: web root /public, MariaDB 11.4, version-aware PHP.
Native Upgrade Pipeline
govard upgrade --version 12- Updates
composer.jsonframework constraint - Runs full
composer update - Runs
php artisan migrate --force
🌐 Drupal
govard tool drush [command]Defaults: web root /web, MariaDB 11.4, version-aware PHP.
⚡ Symfony
govard tool symfony [command]Defaults: web root /public, MariaDB 11.4, version-aware PHP.
Native Upgrade Pipeline
govard upgrade --version 7- Updates
symfony/framework-bundleconstraints - Runs
composer update - Runs
doctrine:migrations:migrate - Runs
cache:clear
🛍️ Shopware
govard tool shopware [command]Defaults: web root /public, MariaDB 11.4, PHP 8.4.
🍰 CakePHP
govard tool cake [command]Defaults: web root /webroot, MariaDB 11.4.
📰 WordPress
govard tool wp [command]Defaults: web root /, MariaDB 11.4, PHP 8.3.
Fresh Bootstrap
WordPress fresh bootstrap downloads core from wordpress.org and installs via PHP bootstrap scripts — wp-cli is not required for initial setup.
govard bootstrap --framework wordpress --freshNative Upgrade Pipeline
govard upgrade --version 6.7wp core update --version=<version>wp core update-dbwp cache flush
⚡ Next.js
govard shell # opens web container at /app
govard tool npm [command]
govard tool npx [command]Defaults: Node 24, no DB forced. Project-root web serving.
🔵 Emdash
Node-first local runtime: Node 22, no managed PHP/DB/cache/search/queue.
govard shell # web container at /app
govard tool pnpm [command]
govard open admin # opens /_emdash/adminFresh install:
govard bootstrap --framework emdash --fresh
govard env upPackage manager auto-detection: Govard reads package.json (packageManager field), pnpm-workspace.yaml, and lockfiles.
Current scope is local Node + SQLite + local uploads. Govard does not yet automate Cloudflare D1/R2 flows.
🔧 Custom Stack
govard init --framework customInteractive picker for:
- Web server (
nginx,apache,hybrid) - Database engine and version
- Cache service
- Search engine
- Queue service
- Optional Varnish