Where each part of a Dotkernel Light installation lives, from the root files down to the module and template folders.
Dotkernel Light follows the PSR-4 standards.
It is a good practice to standardize the file structure of projects.
When using Dotkernel Light, the following structure is installed by default:

.github - contains the GitHub Actions workflow filesThese files sit at the root of the repository:
.gitattributes - normalises line endings, and marks which files Git treats as binary or diffs as markdownCHANGELOG.md - the release historyLICENSE - the project licenceOSSMETADATA - declares the open source lifecycle state of the projectREADME.md - the project readmeSECURITY.md - the supported versions and the process for reporting a vulnerabilitycomposer.json - PHP dependencies, autoloading, and the composer scripts listed throughout this documentationpackage.json - front-end dependencies, and the npm run build and npm run watch scriptsphpcs.xml - PHP_CodeSniffer configuration, used by composer cs-check and composer cs-fixphpstan.neon - PHPStan configuration, used by composer static-analysisphpunit.xml - PHPUnit configuration, used by composer testrenovate.json - Renovate configuration for automated dependency updatesvite.config.js - the Vite build configuration; see Manage Assetsbin folderThis folder contents are
clear-config-cache.php - Removes the config cache file data/cache/config-cache.php; also available as composer clear-config-cachecomposer-post-install-script.php - Runs automatically on Composer's post-update-cmd hook, and copies the distributed local configuration template in config/autoload/ into place unless that file already existsconfig folderThis folder contains all application-related config files:
config.php - Registers ConfigProviders for installing packagescontainer.php - Main service container that provides access to all registered servicesdevelopment.config.php.dist - Activates debug mode; gets symlinked as development.config.php when enabling development modepipeline.php - Contains a list of middlewares, in the order of their executiontwig-cs-fixer.php - Configuration file for Twig code style checker/fixerconfig/autoload folderThis folder contains all service-related local and global config files:
app.global.php - Configures basic app variablesdependencies.global.php - Config file to set global dependencies that should be accessible by all modulesdevelopment.local.php.dist - Gets symlinked as development.local.php when enabling development mode; activates error handlerserror-handling.global.php - Configures and activates error logslocal.php.dist - Local config file where you can overwrite application name and URLmezzio.global.php - Mezzio core config filetemplates.global.php - mezzio/mezzio-twigrenderer config filedata/cache folderThis folder is a storage for service caches.
log folderThis folder stores daily log files.
When you access the application from the browser, (if not already created) a new log file gets created in the format specified in the config/autoload/error-handling.global.php config file under the stream array key.
public folderThis folder contains all publicly available assets and serves as the entry point of the application:
css and js - Contain the css and js file(s) built by Vite from the assets folderfonts and images - Contain the font and image file(s) copied by Vite from the assets folder.htaccess - server configuration file used by Apache web server; it enables the URL rewrite functionalityindex.php - the application's main entry pointrobots.txt.dist - a sample robots.txt file that allows/denies bot access to certain areas of your application; activate it by duplicating the file as robots.txt and comment out the lines that don't match your environmentsrc directoryThis folder contains a separate folder for each Module.
These are the modules included by default:
App - Core functionality, from rendering, to error reportingPage - Contains functionality for displaying a pagesrc/App/assets holds the front-end sources — js, scss, fonts and images — that Vite compiles and copies into the public folder.
Each Module folder, in turn, should contain the following folders, unless they are empty:
src/Factory - Factories which provide handler/service dependenciessrc/Handler - Request handlerssrc/Service - Service classesThe src folder in each Module folder normally also contains these files:
ConfigProvider.php - Configuration data for the moduleRoutesDelegator.php - Module specific route registrationstemplates directory for modulesThis directory contains the template files.
Twigis used as templating engine. All template files have the extension.html.twig.
test folderThis folder contains the application's test suite.
test/Unit holds the unit tests, which run with composer test.
Q: Where do I put a new service class for a module?
A: In that module's src/Service folder, wired up through its ConfigProvider.php.
Q: Which folders does the web server need to write to?
A: data/cache/ for the compiled Twig templates and config cache, and log/ for the daily error logs.
Q: Where does the front-end source code live, and where does it get built to?
A: The source is src/App/assets/ (js, scss, fonts, images); Vite builds and copies it into the public folder.