Software engineering
Software engineering on Exponential: architecture, the request cycle, caching, testing and quality.
50 pages
- Concurrency, statics and long-lived processes How to write Exponential code that is correct when one PHP process serves many requests and many processes serve one site - static caches and singletons, idempotent registrations, exit and cleanExit, class_exists guards…
- Scaling and clustering How an Exponential site scales - up on one machine with Velocity and caches, and out to several web nodes - with what must be shared (database, files, sessions), what stays per node (caches, logs, workers), the DFS…
- Performance measurement and benchmarks How to measure Exponential's performance before and after a change - exp:benchmark in its http, kernel, micro and baseline modes, the micro benchmark CI runs on every push, the debug bar's timing and SQL figures…
- Observability: logs, debug bar and audit trail What an Exponential installation tells you about itself and where - the kernel logs and their rotation, the request logs 404.log and security.log, the log viewer and exp:logs, error references, the debug bar, the…
- Deploying a change How a PHP, settings, template or stylesheet change reaches every runtime that serves an Exponential site - the steps of exp:velocity deploy and why their order matters, PHP-FPM reloads and OPcache, Velocity restarts…
- Incident handling How engineers respond to an outage, a regression or a security incident on an Exponential site - triage, the tools for each symptom (maintenance mode, repair from the browser, error references, logs, audit trail…
- Multi-site installations How one Exponential installation serves several sites - siteaccesses per site and language, shared or separate content trees, per-site settings inside extensions, per-site logs, caches and INI caches, cross-site links…
- Internationalization and right to left The internationalization model of Exponential for engineers - locales from CLDR data, content languages stored as bits of a language mask with a limit of 62, translation catalogues in Qt Linguist format, fallbacks…
- Testing strategy How Exponential is tested and how to test your own changes - the layers from syntax checks and static analysis to DB-less PHPUnit suites, database tests, live-installation tests, design and quality tests, benchmarks and…
- DB-less tests and test suites How the PHPUnit configuration of Exponential is organized - the bootstrap, the suites in phpunit.xml, the excluded groups, the PHPUnit version per PHP version - and how to write and run tests that need no database, plus…
- Static analysis and code style How Exponential checks code without running it - PHPStan at level 1 against a baseline of inherited findings, PHP_CodeSniffer with the project's own style and sniffs (no PHP 7+ type declarations, PHP 8.0 compatibility)…
- CI gates The continuous integration of Exponential as a set of gates - the Quality, PHPUnit, Performance and CI health workflows, what blocks and what only warns, how pull requests are tested as merged into main, how to…
- Code review checklist A checklist for reviewing a change to the Exponential kernel or an extension - scope and history, layering and naming, compatibility with PHP 8.0 and every database and server, tests, caches and deploy, settings…
- Design review checklist A checklist and template for reviewing the technical design of a system built on Exponential - requirements and fit, product and stack, content model, data and database, runtime and caching, scaling and availability…
- Handling technical debt How technical debt is found, recorded and reduced in Exponential - the known gaps sections of the standards, the PHPStan baseline, checks that fail only on new problems, deprecations without removal dates, plain-file…
- Release engineering How releases of Exponential and its extensions are made - the main branch and its 6.0.x-dev alias, where the kernel version lives, the extension release procedure with ezinfo.php and extension.xml, the file manifest…
- Version numbers and immutable tags The two release rules every Exponential engineer must know - the last position of a version keeps counting (0.0.4.9 is followed by 0.0.4.10), and a published tag or release is never moved, deleted, re-cut or replaced…
- Changelogs and upgrade notes Where Exponential records what changed and what an installation has to do about it - the changelog pages per version and per extension, the Added, Updated, Removed and Renamed sections, the upgrade notes in…
- Dependency management with Composer How Exponential manages its dependencies with Composer - the root package and its type, extensions as se7enxweb packages with tilde constraints, no committed lock file, the branch alias for main, the development tools…
- Backward compatibility policy What counts as a breaking change in Exponential - settings, templates, PHP API, database, command line, behavior and files - the rules that come with one (upgrade notes, opt-in behavior, safe defaults, no renamed…
Documentation license
This documentation is free documentation, licensed under the GNU Free Documentation License 1.3 or later.
Exponential Copyright © 1998-2026 Exponential Foundation and 7x