open-dxp / skeleton
Requires
- open-dxp/opendxp: ^1.5
- symfony/dotenv: ^7.4
- symfony/runtime: ^7.4
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.95
- open-dxp/mate-extension: ^1.0
- open-dxp/test-foundation: ^1.2.2
- phpstan/phpstan: ^2.1
- phpstan/phpstan-strict-rules: ^2.0
- phpstan/phpstan-symfony: ^2.0
- wikimedia/composer-merge-plugin: ^2.1
Suggests
- open-dxp/data-hub-bundle: Universal data interface for GraphQL, CSV and other formats
- symfony/ai-symfony-mate-extension: Gives AI agents container and profiler tools through Mate, see README.md
- symfony/amqp-messenger: Enables the optional RabbitMQ Messenger transport
Provides
None
Conflicts
None
Replaces
None
README
This skeleton should be used by experienced OpenDXP developers for starting a new project from the ground up.
Disclaimer
OpenDXP is a community-driven fork based on the Pimcore® Community Edition (GPLv3).
OpenDXP is independent and maintained by its community and contributors. It is not affiliated with, endorsed by, or sponsored by Pimcore GmbH.
Original credits: Pimcore GmbH
OpenDXP Skeleton is based on the Pimcore® Community Edition and remains licensed under GPLv3.
Getting started
Create the project. Docker is enough, you need no PHP on your machine:
docker run -u `id -u`:`id -g` --rm -v `pwd`:/var/www/html opendxp/opendxp:php8.3-latest composer create-project open-dxp/skeleton my-project cd my-project
With PHP and Composer on your machine, COMPOSER_MEMORY_LIMIT=-1 composer create-project open-dxp/skeleton my-project does the same.
The project runs with Docker Compose or with DDEV. Both run the same PHP version, database, workers and nginx rules. Choose wisely.
Docker
Your user must be allowed to run Docker and Docker Compose, and to change file permissions.
sed -i "s|#user: '1000:1000'|user: '$(id -u):$(id -g)'|g" docker-compose.yaml docker compose up -d docker compose exec php vendor/bin/opendxp-install
Open the frontend at http://localhost and the admin at http://localhost/admin.
DDEV
ddev config --project-name=my-project ddev start ddev exec vendor/bin/opendxp-install ddev restart # starts the messenger workers and the maintenance job, which need the installed application
Open the frontend at https://my-project.ddev.site and the admin at https://my-project.ddev.site/admin.
Installation notes
opendxp-installasks for the admin user and password. Choose them freely. The installation can take up to 20 minutes.- If you install the SimpleBackendSearchBundle, add
opendxp_search_backend_messageto the workers.- With Docker, add it to the
commandin.docker/supervisord.conf, likeopendxp_maintenance. - With DDEV, add it to the
messenger-consumedaemon in.ddev/config.yaml.
- With Docker, add it to the
- If you install the SimpleBackendSearchBundle, add
.docker/nginx.confand.ddev/nginx_full/nginx-site.confhold the same rules, see Nginx Configuration.
Your own web server
- Run
./vendor/bin/opendxp-install - Point your virtual host to
my-project/public - [Only for Apache] Create
my-project/public/.htaccessaccording to Apache Configuration - [Only for Nginx] Configure the server according to Nginx Configuration
- Open https://your-host/admin in your browser
Note for first-time setup
To allow cache:clear and other commands to run without an active database connection, the default configuration sets:
doctrine: dbal: connections: default: server_version: '%env(string:default:default_database_server_version:DATABASE_SERVER_VERSION)%'
The default comes from the default_database_server_version parameter in config/services.yaml.
If you're using a different database version, change that parameter or override it in your .env or .env.local:
DATABASE_SERVER_VERSION=10.11.13-MariaDB
Tests and code style
Tests are written with Pest on top of open-dxp/test-foundation, see its README. They run against a database of their own. Testing a Project shows how a project tests its own code and the bundles it uses.
Docker
docker compose run --user=root --rm test-php chown -R $(id -u):$(id -g) var/ public/var/ # once docker compose run --rm test-php vendor/bin/opendxp-test install docker compose run --rm test-php vendor/bin/pest docker compose run --rm test-php vendor/bin/opendxp-test analyse . docker compose exec php vendor/bin/php-cs-fixer fix
DDEV
DDEV creates the opendxp_test database on start. It runs the application in dev, so the test commands set the test environment themselves:
ddev exec APP_ENV=test vendor/bin/opendxp-test install ddev exec APP_ENV=test vendor/bin/pest ddev exec APP_ENV=test vendor/bin/opendxp-test analyse . ddev exec vendor/bin/php-cs-fixer fix
The OpenDXP testkit runs the same tests in an isolated slot, if you use it.
AI agents
The project is prepared for coding agents with Symfony AI Mate and the OpenDXP Mate extension. The tools of the extension answer from the booted application. Its skills tell the agent which OpenDXP mechanism fits a task.
The extension is already installed. Set Mate up once with mate init, as the
installation of the Mate extension describes for Docker and
DDEV. In this project, the Docker service that runs PHP is called php. The installation also describes the optional
Symfony tools for the agent.
Upstream Origin & Version Transparency
This project is a fork of Pimcore Skeleton 2024.x, which is © Pimcore GmbH and licensed under GPLv3.
License
Licensed under the GNU General Public License v3.0 (GPLv3). For details, please see LICENSE.md.
Copyright
© Pimcore GmbH
© 2026 OpenDXP Contributors — GPLv3
Trademarks
Pimcore® is a registered trademark of Pimcore GmbH. Any use of the Pimcore® mark in this repository is purely descriptive to identify the original upstream project.
Contact
For inquiries, suggestions, or contributions, feel free to reach us at contact@opendxp.ch.
About
OpenDXP is a community-driven project initiated by DACHCOM.DIGITAL (Rheineck, Switzerland) and maintained by its community and contributors. OpenDXP is independent and not affiliated with Pimcore GmbH.
The project’s purpose is to preserve and maintain a GPLv3‑licensed codebase for community use.
It is not positioned as a competitor to products or services of Pimcore GmbH and does not purport to replace or supersede any Pimcore offering.