The third-party and Dotkernel packages Dotkernel API depends on, with the version constraint and purpose of each, split into runtime requirements, packages that arrive as dependencies, and development-only tooling.
They cover Doctrine for persistence, Laminas components for configuration, hydration, validation and the service container, Mezzio for the PSR-15 pipeline with OAuth2, RBAC, CORS, HAL and problem details, the dotkernel/dot-* libraries, and zircote/swagger-php for API documentation.
The authoritative source is the require section of composer.json.
The constraints below mirror it exactly, with a short note on what each entry is for.
Composer refuses to install the project unless all of these are satisfied:
php:~8.3.0 || ~8.4.0 || ~8.5.0 - PHP 8.3, 8.4 or 8.5; see Server requirementsext-gd:* - the GD extension; must be enabled on the serverext-json:* - the JSON extension; ships enabled and cannot be disabled on any supported PHP versiondotkernel/dot-cache:^4.3 - Cache component extending symfony-cachedotkernel/dot-cli:^3.9.0 - Component for creating console applications based on laminas-clidotkernel/dot-data-fixtures:^1.4.0 - Provides a CLI interface for listing & executing doctrine data fixturesdotkernel/dot-dependency-injection:^1.2 - Dependency injection component using class attributesdotkernel/dot-errorhandler:^4.0.0 - Logging Error Handler for Middleware Applicationsdotkernel/dot-mail:^5.3.0 - Mail component based on Symfony Mailerdotkernel/dot-response-header:^3.5.0 - Middleware for setting custom response headersdotkernel/dot-router:^1.0.5 - Dotkernel component to build complex routes, based on mezzio/mezzio-fastroutelaminas/laminas-authentication:^2.18 - API for authentication and includes concrete authentication adapters for common use case scenarioslaminas/laminas-component-installer:^3.5.0 - Composer plugin for injecting modules and configuration providers into application configurationlaminas/laminas-config-aggregator:^1.18.0 - Lightweight library for collecting and merging configuration from different sourceslaminas/laminas-hydrator:^4.16.0 - Serialize objects to arrays, and vice versalaminas/laminas-inputfilter:^2.31.0 - Normalize and validate input sets from the web, APIs, the CLI, and more, including fileslaminas/laminas-stdlib:^3.20.0 - SPL extensions, array utilities, error handlers, and moremezzio/mezzio:^3.20.1 - PSR-15 Middleware Microframeworkmezzio/mezzio-authentication-oauth2:^3.0.1 - OAuth2 (server) authentication middleware for Mezzio and PSR-15 applicationsmezzio/mezzio-authorization-acl:^1.11.0 - laminas-permissions-acl adapter for mezzio-authorizationmezzio/mezzio-authorization-rbac:^1.8.0 - mezzio authorization rbac adapter for laminas/laminas-permissions-rbacmezzio/mezzio-cors:^1.13.0 - CORS component for Mezzio and other PSR-15 middleware runnersmezzio/mezzio-fastroute:^3.12.0 - FastRoute integration for Mezziomezzio/mezzio-hal:^2.10.1 - Hypertext Application Language implementation for PHP and PSR-15mezzio/mezzio-helpers:^5.18 - Helper/Utility classes for Mezziomezzio/mezzio-problem-details:^1.15.0 - Problem Details for PSR-15 HTTP APIs, addressing the RFC 9457 standard (formerly RFC 7807)ramsey/uuid:^4.5.0 - A PHP library for generating and working with universally unique identifiers (UUIDs). 4.5.0 is the release that introduced Uuid::uuid7(), which this project uses for every entity identifierramsey/uuid-doctrine:^2.1.0 - Use ramsey/uuid as a Doctrine field typeroave/psr-container-doctrine:^5.2.2 || ^6.0.0 - Doctrine Factories for PSR-11 Containerssymfony/filesystem:^7.2.0 - Provides basic utilities for the filesystemsymfony/var-exporter:^6.4 || ^7.4 - Exports serializable PHP data structures as plain PHP code; required to keep Doctrine LazyGhost proxy supportzircote/swagger-php:^6.0.0 - Generate interactive documentation for your RESTful API using PHP attributes (preferred) or PHPDoc annotationsThese are used directly by the application but are not declared in composer.json.
They are resolved transitively through the packages listed above, so a normal install provides them — but the project pins no version of its own for them.
doctrine/orm - Object-Relational-Mapper for PHP; the persistence layer for every entity and repositorydoctrine/dbal - Database abstraction and schema layer that the ORM is built on; also where the migrations and the custom UUID type operatelaminas/laminas-servicemanager - Factory-driven PSR-11 container; config/container.php instantiates it directlyTo see which versions you actually have, run composer show doctrine/orm (or composer show --tree) rather than relying on a constraint, since there is none to read.
Declared under require-dev, installed unless you pass --no-dev:
dotkernel/dot-maker:^2.0.0 - Generates modules, handlers, services and input filters; see Creating a book module using DotMakerlaminas/laminas-coding-standard:^3.0.1 - Coding standard ruleset used by composer cs-check and composer cs-fixlaminas/laminas-development-mode:^3.13.0 - Toggles development mode; see Composerphpstan/phpstan:^2.1.11 - Static analysis, run by composer static-analysisphpstan/phpstan-doctrine:^2.0.2 - PHPStan extension that understands Doctrinephpstan/phpstan-phpunit:^2.0.6 - PHPStan extension that understands PHPUnitphpunit/phpunit:^12.5.23 - Test framework for the unit and functional suitesroave/security-advisories:dev-latest - Blocks installation of packages with known vulnerabilitiessymfony/var-dumper:^7.2.3 - Debug output helperQ: Is this list authoritative?
A: The authoritative source is the require section of the project's composer.json.
This page mirrors it with a short explanation of each entry.
Q: Which package provides the framework itself?
A: mezzio/mezzio, a PSR-15 middleware microframework.
See PSRs.
Q: Which packages handle authentication and authorization?
A: mezzio/mezzio-authentication-oauth2 for OAuth2 authentication, and mezzio/mezzio-authorization-rbac for role-based authorization.
See Authentication and Authorization.
Q: Why are both doctrine/dbal and doctrine/orm listed?
A: DBAL is the database abstraction and schema layer; ORM maps entities on top of it. The ORM requires DBAL underneath. See Doctrine ORM.
Q: Why do doctrine/orm, doctrine/dbal and laminas/laminas-servicemanager have no version constraint?
A: Because composer.json does not declare them.
The application uses all three directly — Doctrine throughout the entities, repositories and migrations, and the service manager in config/container.php — but they are installed transitively as dependencies of the declared packages.
Run composer show <package> to see the version you have.
Q: Why does ramsey/uuid require at least 4.5.0 specifically?
A: 4.5.0 is the release that added Uuid::uuid7().
Every entity identifier is a UUIDv7 generated in PHP, so an older release would not provide the method.
See Server requirements for the matching MariaDB requirement.
Q: Are the development packages needed in production?
A: No.
Deploy with composer install --no-dev and none of the require-dev entries are installed.
Q: What are the dotkernel/dot-* packages for?
A: They are Dotkernel's own components — CLI, cache, mail, router, error handler, dependency injection and data fixtures — reused across Dotkernel projects rather than duplicated in each one.
Q: Can I remove a package I don't use?
A: Some can be removed, but many are wired into the default configuration and pipeline. Remove the corresponding configuration and pipeline entries first, then verify the application and tests still run.
Q: Why are both the ACL and RBAC authorization adapters present?
A: RBAC is what Dotkernel API uses by default; the ACL adapter is available if your project needs access-control-list semantics instead.