The default installation of Concrete5 is setup in the following manner. (The root directory in these examples corresponds to the root of your Concrete5 website. These examples also assume you are running one website, and not sharing the Concrete5 core amongst several sites.)
This is the application directory. It includes all items that are specific to this single website. In general, items in the application/ directory that also appear in the concrete directory override those in the concrete directory.
This is the concrete source directory. When a new version of Concrete5 is downloaded this is the directory that contains most of the core files.
This directory contains sub-directories in the Package format. These are either custom-built packages or (more likely) packages that have been downloaded from the concrete5.org marketplace.
This directory contains additional Concrete5 core directories. These may be downloaded using the built-in Concrete5 updater (found in the Dashboard), or they may have been put in this directory manually. If a file named update.php appears in application/config, its contents will determine which core from the updates/ directory to use to currently power the website.
Concrete5 Source Directories
This directory contains all the Attribute Types found in Concrete5 by default. These are activated in the database before they can be used. This happens during installation or upgrade.
This directory contains all the Authentication Types found in Concrete5 by default. These are installed during installation.
This directory contains all the Block Types found in Concrete5. These are activated in the database before they can be used. This happens during installation or upgrade.
This directory contains PHP procedures that are run during startup of Concrete5. Examples include bootstrap/autoload.php (which, when included sets up all PHP autoloaders), bootstrap/helpers.php (which creates some useful global functions like array_to_object(), h() and t()) and bootstrap/start.php, which starts the actual bootstrapping process.
This directory contains core configuration data. This data is read and saved by the Config library. Files in here contain the default configuration values for the various keys. The contents of each of these files is an associative array.
This directory contains PHP proxy classes generated by the built-in Doctrine ORM library. These are not something most developers need to worry about.
This directory contains the Starting Point Packages used as sample content, available during installation.
This directory contains controllers. In Concrete5, controllers can be run in three ways.
- As specified by routes to a specific URL.
- Automatically when a single page is rendered.
- Automatically when a page of a certain type is rendered.
All controllers in here are automatically loaded when a single page at the same path is loaded.
All controllers in here correspond to the handle of a specific page type. Whenever a page of that type is loaded, a controller will also be loaded and run, if it exists.
All other controllers in the controllers/ directory are used by specific administrative routes. You can see how these routes and controllers interact by looking at the routes section of concrete/config/app.php
This directory contains minified, compiled CSS used by Concrete5.
This directory contains unbuilt source LESS files, compiled by Concrete5 using Grunt during the build process. This happens prior to shipping a working Concrete5, and is not something end users have to understand or care about.
This is the main Concrete5 dispatcher file. It is included by the index.php file in the web root.
The elements directory contains snippets of PHP code reused by Concrete5.
This directory contains images used by Concrete5.
This directory contains PHP classes that correspond to installed Concrete5 Jobs. Each Job is a self-contained PHP class with certain required methods.
This directory contains mail templates. These are used by the Mail Service.
This directory contains single pages used by Concrete5. These are activated during installation.
This directory contains all PHP classes used by Concrete5, separated into directories based on function. Important Note: every file and directory up to this point has been named using Concrete5's lowercase handle format. Once in the src/ directory things change, and directories and classes are camelcased (with the first letter being uppercased).
This directory contains all themes that ship with Concrete5. A theme must be activated on installation in order for it to appear in the installed themes list.
This directory contains tools scripts that are used by certain user interface elements of Concrete5. These are officially deprecated in favor of views and controllers, but have not completely been phased out yet.
This directory contains third party libraries used by Concrete5. These libraries are installed during the build process of Concrete5 using Composer.
This directory contains views used by Concrete5's MVC layer. These views are specified by controllers in the controllers directory.
This directory contains attributes used just by this Concrete5 installation – or overrides of Concrete5 core attribute files.
This directory contains authentication types used just by this Concrete5 installation – or overrides of Concrete5 core authentication type files.
This directory contains block type code files used just by this Concrete5 installation – or overrides of Concrete5 core block type files.
This file is an optional file that developers can use to register events, rebind PHP classes, and more. This file is automatically loaded during the Concrete5 bootstrap routine.
This file is loaded during the Concrete5 bootstrap routine. It takes care of loading composer items (found in concrete/vendor/) and any custom autoloading necessary for the application.
This file is loaded during the Concrete5 bootstrap routine. This file enables environment detection and custom application environments.
This directory contains controllers used just by this Concrete5 installation – or overrides of Concrete5 core controller files.
This directory contains elements used just by this Concrete5 installation – or overrides of Concrete5 core elements.
This directory contains files uploaded to this Concrete5 installation. Concrete5's file importer class manages this directory.
This directory contains image thumbnails generated automatically for files uploaded to Concrete5. The file manager uses some of these thumbnails but new image thumbnail types will automatically place their generated thumbnails in this directory.
Files uploaded to this directory are available for import into the file manager in the Dashboard. This can be useful when attempting to upload large files is failing through a browser.
Internal Concrete5 cache files are written here. Generally, it is safe to delete this directory entirely if troubleshooting a problem in a Concrete5 installation.
This directory contains job classes used just by this Concrete5 installation – or overrides of Concrete5 core job classes.
This directory contains language files used by Concrete5. These are populated during the build of Concrete5.
This directory contains email templates used just by this Concrete5 installation – or overrides of Concrete5 email templates.
This directory contains single page views used just by this Concrete5 installation – or overrides of Concrete5 single page views.
This directory contains custom PHP classes used by this application, or (in some limited cases) overrides of core Concrete5 PHP classes. Note: this directory obeys the same casing rules as the concrete/src directory.
This directory contains custom themes used by this application, or overrides of core Concrete5 themes or components.
This directory contains tools used by this application. These are deprecated in favor of routes, controllers and views.
This directory contains custom views used by this application, or views that override core Concrete5 views.