muckiware / muckidrive
Muckidrive - Shopware 6.7 Core as an application framework, without shop context
Package info
github.com/muckiware/muckidrive
Language:Shell
Type:project
pkg:composer/muckiware/muckidrive
Requires
- composer-runtime-api: ^2.0
- muckiware/core: ^0.0.1
- muckiware/master: *
- shopware/conflicts: *
- shopware/core: ~v6.7.0
- symfony/flex: ~2
Requires (Dev)
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^9.5
Suggests
None
Provides
None
Conflicts
None
Replaces
None
This package is auto-updated.
Last update: 2026-11-09 17:18:58 UTC
README
Muckidrive is a foundation for building web services on top of the Shopware 6.7 Core framework. It is not a webshop. It uses Shopware as an application framework (DAL, DI, events, messaging, migrations, Admin API) and leaves out Checkout, Storefront and all commerce logic.
shopware/core ~v6.7.0 ← Base framework (DAL, DI, Events, Migrations)
muckiware/core ← Selective loader: only the required Shopware Core bundles
muckiware/master ← Customized administration (without shop UI)
custom/plugins/* ← Your web services, built as regular Shopware plugins
Requirements
| Tool | Version |
|---|---|
| PHP | 8.4 |
| MySQL | 8.4 |
| Composer | 2.x |
| Node.js / npm | for building the administration |
| DDEV | recommended local environment |
Getting started
Install via Composer
composer create-project muckiware/muckidrive my-project
This works out of the box once
muckiware/muckidriveis listed on Packagist. Until then, pass the GitHub repository explicitly:composer create-project muckiware/muckidrive my-project \ --repository='{"type":"vcs","url":"https://github.com/muckiware/muckidrive"}'
The created project is a ready platform checkout: dependencies installed, autoload dumped, vendor/muckiware/* symlinked to the vendored sources in custom/muckiware/*.
Or clone the repository
git clone https://github.com/muckiware/muckidrive.git my-project
cd my-project
composer install
First boot
-
Create the environment file and fill in your values:
cp .env.example .env
DATABASE_URL- MySQL 8 databaseAPP_SECRET/INSTANCE_ID- generate withopenssl rand -hex 32andopenssl rand -base64 24 | tr -d /+MUCKIWARE_ROOT- absolute project path (/var/www/htmlinside DDEV)
-
Install the database and the basic system setup:
bin/console system:install --create-database \ --shop-name "My project" --shop-email "admin@example.com" --shop-locale "en-GB" \ --skip-assets-install --skip-first-run-wizard --no-assign-theme
-
Create an admin user:
bin/console user:create --admin --password <password> --email admin@example.com \ --firstName Admin --lastName User admin
-
Build the administration UI:
bin/build-administration.sh
In DDEV, prefix the console with ddev exec (ddev exec bin/console ...) so PHP 8.4 from the container is used.
Architecture
Active bundles
The bundles are configured in config/bundles.php. Shopware\Core\Checkout\Checkout and the Storefront are deliberately disabled.
| Bundle | Purpose |
|---|---|
Muckiware\Core\Framework\Framework |
Framework services: API, Cache, Filesystem, Plugin, Script, Webhook |
Muckiware\Core\System\System |
System services: Country, CustomEntity, Locale, User, Integration, Tag |
Muckiware\Core\Content\Content |
Content services: Cookie, Media, CMS, MailTemplate, Flow |
Muckiware\Master\Administration |
Administration UI without shop modules |
Shopware\Core\Maintenance\Maintenance |
Shopware maintenance commands |
Shopware\Core\Profiling\Profiling |
Profiling |
Shopware\Core\Service\Service |
Shopware service layer |
muckiware/core
Namespace Muckiware\Core\. Each sub-bundle loads only the Shopware Core service definitions it needs, straight from vendor/shopware/core, not the whole Shopware stack. Helper::getFolderByClassName() finds the Shopware Core path at runtime.
muckiware/master
Namespace Muckiware\Master\. This is a customized version of the Shopware administration:
- Backend: controllers for the admin UI, search, tags, user config, notifications and system info
- Frontend: Vue 3 + Twig.js, Vite (
pentatrion/vite-bundle), Pinia, Vue Router, TypeScript, Jest
Development
Build the administration
bin/build-administration.sh # production build bin/watch-administration.sh # watch mode bin/build-js.sh # all JS assets
Inside custom/muckiware/master/Resources/app/administration/:
npm run build # production build npm run watch # development watch npm run unit # Jest unit tests npm run eslint # linting
Console
Run PHP commands inside the DDEV container so that PHP 8.4 is used:
ddev exec bin/console cache:clear ddev exec bin/console plugin:refresh
Writing plugins
Web services live in custom/plugins/ as standard Shopware plugins (they extend Shopware\Core\Framework\Plugin):
ddev exec bin/console plugin:refresh ddev exec bin/console plugin:install --activate YourPluginName
Plugins that depend on Checkout, Storefront, products, customers or sales channels will not run on Muckidrive, because those parts of Shopware are not loaded.
Example: MuckiLogPlugin (separate repository) is a Log4php-based logging plugin with a custom entity, a migration, a scheduled task and an exception subscriber.
Conventions
declare(strict_types=1);, PSR-12,finalby default- Namespace prefix
Muckiware\for core components - Services are defined in XML (
services.xml) - To extend Shopware Core services, use decorators (
XyzDecoratordecoratesXyz) - Code, comments, commits and docs are written in English
Releases & changelog
- Development happens on
main; every user-visible change gets an entry inchangelog/_unreleased/- one small markdown file per change. - A release version is created only by merging (or pushing)
maininto thereleasebranch. The release workflow then verifies the tree installs viacomposer create-project, computes the next version (patch bump of the latest tag - an explicit version can be given via Run workflow), moves the unreleased changelog entries intochangelog/release-<x-y-z>/(syncing the move back tomain), tags, publishes the GitHub release and triggers the MuckiSafe image build. - Pushing a Git tag alone does nothing - versions are created only through the
releasebranch.
The ready-to-run Docker distribution (MuckiSafe, ghcr.io/muckiware/muckisafe) lives in muckiware/MuckiSafe.
License
MIT © muckiware