Skip to the content
Documentation
Help Start
Reading in:
  • German: 9,059 of 9,059 pages
About the help in other languages
All help pages

Software engineers: start here

Where software engineers start who evaluate, architect, operate, review or contribute to Exponential as a system. The system in one paragraph, your first hour, five engineering rules, and a map of every page for…

Download as PDF

Address: https://doc.exponential.earth/learninminutes/exphelp/viewer/help/software-engineers/software-engineers-start-here.md

On this page

Software engineers: start here

This section of the help is for software engineers, whatever language you usually write: people who evaluate Exponential for a project, design a system around it, run it in production, review changes to it or contribute code back. It explains the system as a system: its parts and their contracts, how a request travels through it, where data lives, which caches sit where, how it is served, tested, released and secured, and which documents are the source of truth for each of those.

These pages do not repeat the detailed guides. They give you the engineering view and link to the page that has the details, usually in doc/eng-us/standards/, doc/eng-us/bc/6.0/, doc/eng-us/features/6.0/ or the guides. Where the sources do not answer a question, the pages say so instead of guessing.

Contents

  1. Exponential in one paragraph
  2. Your first hour
  3. Five engineering rules
  4. Map of the software engineering pages
  5. Pages from other audiences you will use
  6. Finding these pages again

Exponential in one paragraph

Exponential is a free and open source PHP content management system and application framework, licensed under the GNU GPL, version 2 or later. Its README calls it "a professional PHP application framework with advanced CMS (content management system) functionality", whose most notable feature is "its fully customizable and extendable content model". The kernel (kernel/, lib/) runs on PHP 8.0 to 8.5 (PHP 7.4 usable without support), stores content in SQLite 3 (the default), PostgreSQL, MongoDB, MariaDB, Oracle or MySQL, renders through its own template language, and is extended through extensions in extension/. Since 6.0.15 it ships its own application server, Exponential Velocity, next to Apache or nginx with PHP-FPM and FrankenPHP. The code base was developed from 1999, first under the name eZ Publish, a product its creator discontinued after almost 18 years; 7x leads the development today and the Exponential Foundation operates and funds the project (Who is 7x?, Who is the Exponential Foundation?).

Your first hour

  1. Get the shape of it (10 minutes): Exponential for software engineers and Architecture overview.
  2. Follow one request (10 minutes): The request lifecycle.
  3. Know where state lives (10 minutes): Databases: choosing and running one and Caching layers for engineers.
  4. Know how it runs (10 minutes): Application servers and Concurrency, statics and long-lived processes.
  5. Know how change is controlled (10 minutes): Testing strategy, CI gates and Release engineering.
  6. Know the security contract (10 minutes): Security engineering overview.

Five engineering rules

  1. Never edit kernel/, lib/ or another extension in place. An update replaces them. Use the extension points; a kernel class override is the last resort (Events, extension points and plugins).
  2. Assume a long-lived process. Under Velocity a worker serves many requests: no per-request data in statics without a reset, idempotent registrations (Concurrency, statics and long-lived processes).
  3. Write for every database. Go through eZDB::instance(), escape and cast, and ship schema changes for every driver (Writing portable SQL).
  4. A published tag never changes. A mistake in a release is fixed by the next version, never by moving a tag (Version numbers and immutable tags).
  5. Every break has upgrade notes. A change that needs an action from an installation gets a page in doc/eng-us/bc/6.0/ (Backward compatibility policy).

Map of the software engineering pages

Orientation

PageWhat it helps you do
Exponential for software engineersUnderstand the system, its stack and its constraints on one page
Reading path for software engineersRead the pages in a sensible order, by role
Evaluating ExponentialRun a structured technical evaluation
Glossary for software engineers, Software engineer FAQTerms and quick answers

Architecture

PageWhat it helps you do
Architecture overviewSee the layers and their responsibilities
The request lifecycleFollow a request from index.php to the response
Kernel, lib and extensions: the layeringKnow which code may depend on which
Siteaccesses and configurationUnderstand the INI cascade and siteaccess matching
Modules, views and access controlUnderstand routing and the permission model
The content model for engineersUnderstand classes, objects, versions, nodes and datatypes
Persistence and the database layerUnderstand eZDB and eZPersistentObject
The template engine and the design chainUnderstand compiled templates, overrides and designs
Events, extension points and pluginsExtend without forking
Console, cronjobs and background workRun work outside a web request

Data

PageWhat it helps you do
Databases: choosing and running oneChoose among the six supported databases
Schema changes and migrationsShip a schema change that every installation can apply
Writing portable SQLWrite queries that work on every driver

Runtime, performance and scaling

PageWhat it helps you do
Caching layers for engineersKnow every cache and what it is keyed on
Cache invalidation and clearingInvalidate correctly after a change
Application serversChoose between Apache or nginx with PHP-FPM, Velocity and FrankenPHP
Velocity persistent workersUnderstand the worker pool and its reset model
Concurrency, statics and long-lived processesWrite code that is safe in a persistent worker
Scaling and clusteringPlan several web nodes and shared storage
Performance measurement and benchmarksMeasure before and after a change

Operations

PageWhat it helps you do
Observability: logs, debug bar and audit trailSee what the system is doing
Deploying a changeShip a PHP, settings or template change in the right order
Incident handlingRespond to an outage or a regression
Multi-site installationsRun several sites from one installation
Internationalization and right to leftHandle languages, locales and text direction

Quality

PageWhat it helps you do
Testing strategyKnow which kinds of tests exist and when each runs
DB-less tests and test suitesWrite and run tests without a database
Static analysis and code styleWork with PHPStan, the baseline and phpcs
CI gatesRead a red check and reproduce it
Code review checklist, Design review checklistReview a change or a design
Handling technical debtFind, record and pay down debt

Release engineering and compatibility

PageWhat it helps you do
Release engineeringCut a release of the kernel or an extension
Version numbers and immutable tagsChoose the next number and never move a tag
Changelogs and upgrade notesWrite the record of a change
Dependency management with ComposerPin, repin and resolve packages
Backward compatibility policyKnow what counts as a break and what must accompany it

Security

PageWhat it helps you do
Security engineering overviewKnow the security model, the defaults and the disclosure process
HTTP security: headers, CSP, request rules and proxiesConfigure the HTTP layer safely
Authentication, sessions and two-factor sign-inUnderstand sign-in and sessions
Security review checklistReview a change for security

Interfaces and collaboration

PageWhat it helps you do
API design: REST, ezjscore and headlessChoose and design an API
Git workflowWork with branches, commits and pull requests
Contributing upstreamSend a change to the kernel or an extension
Documentation as codeWrite and check help pages like code

Pages from other audiences you will use

PageWhy software engineers read it
Extension developmentThe full course from user to extension developer, with an API reference
Application creators: start hereBuilding applications on Exponential, with code
PHP developers: start hereThe PHP side in depth
Web framework developers: start hereExponential compared with other web frameworks
Hosting companies: start hereServers, panels, operations and runbooks
Database supportThe support statement for every database
Develop with Git, Update with GitWorking with clones of the kernel and extensions
Security hardeningThe attacker-oriented hardening guide
What Exponential isThe product family and what each product contains

Finding these pages again

  • In the help, filter by the audience Software Engineers, or open All pages and the folder software-engineers.
  • Each page has Edit on GitHub. If a statement here is wrong or out of date, correct it there; the pages are checked like code (Documentation as code).

Become an Exponential Partner

Partners share their information, provide funding, contribute back and develop the products with us, and that is how Exponential grows. A partner website and dashboard are planned for mid-2027: please become a partner today to speed up our growth rate and land new features faster.

Something wrong on this page? Report an error

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