Concrete CMS 9 · Updated 2026-09-04
Version 8 of concrete5 is end of life: no security patches, an aging PHP ceiling, and a marketplace that no longer lists v8 add-ons. If you run an 8.x site you care about, the upgrade to 9 is overdue. It is not a one-click affair, mostly because of what sits around the core: your theme, your add-ons, and your PHP version. This guide is the order of operations that avoids the common failures: audit first, then latest 8.5, then PHP, then latest 9, then the theme. One change at a time, on a copy.
The backup plan, the theme, and the add-ons decide how the upgrade goes, and all of them are cheaper to deal with before you touch the core.
There is no downgrade. Concrete's official documentation is blunt about this: the only way back is your backup. Take a database dump and a full file backup before every step below, and do the whole run on a staging copy first.
Your theme is the biggest job. Concrete 9's interface is built on Bootstrap 5; version 8 themes were built against Bootstrap 3. The site will run, but a legacy theme typically needs real rework, and if it was not namespaced under .ccm-page, its styles will fight the v9 editing interface. Budget more time for the theme than for the upgrade itself, and consider whether switching to a maintained 9.x theme is cheaper than porting.
Check every add-on now. The marketplace was relaunched in 2024 and v8-era add-ons were not carried over. For each installed package, find out whether a 9.x-compatible version exists, whether there is a replacement, or whether the site can live without it. An add-on with no v9 path is something you want to discover before the upgrade, while removing it cleanly is still easy.
Whatever your 8.x point release, go to the end of the 8.5 line first. The 8.5.x releases contain the migrations and compatibility work that the jump to 9 assumes. Use Dashboard → System & Settings → Update Concrete, or any of the manual methods from the official upgrade guide.
If the update fails partway with a migration error about character sets (migration 20190509205043 is the one most forum threads mention), your database has mixed collations, which is common on sites that have lived through several major versions. The fix is Concrete's own CLI command:
./concrete/bin/concrete5 c5:database:charset:set utf8mb4
Run it, then re-run the update. The command-line binary is concrete5 on version 8; version 9 ships it under both names, so the commands below work before and after the core swap.
Concrete 9 supports PHP 7.3 through 8.5, but your custom code and add-ons might not. Do not change the core version and the PHP version in the same move; when something breaks you will not know which change broke it. The sequence that works:
Requirements for the destination, for reference: MySQL 5.7 or later or MariaDB, InnoDB, and the usual PHP extensions (PDO MySQL, DOM, SimpleXML, mbstring, GD with FreeType, fileinfo, curl, zip, iconv).
Go straight to the newest 9.x; there is no need to walk through 9.0, 9.1, and so on. For a site of any size, use the command line rather than the browser, because big version jumps run many migrations and can exceed a web request's limits:
./concrete/bin/concrete5 c5:config -g set concrete.maintenance_mode trueconcrete directory with the one from the new release. Empty the updates/ directory and delete application/config/update.php if present../concrete/bin/concrete5 c5:update./concrete/bin/concrete5 c5:config -g set concrete.maintenance_mode falseIf you manage the site with Composer instead of the standard distribution, the mechanics differ (you update the core dependency and run the same migration step), but the sequencing in this guide applies unchanged.
With the core on 9:
.ccm-page if it was not.The failure you cannot diagnose is the one where three things changed at once. If you followed the staging order above, whatever broke is attributable to the last single step. Restore the backup you took before that step, fix the cause, and rerun. If a specific migration fails, search the exact migration ID; the forums have a decade of upgrade threads, and yours is rarely the first site to hit any given one.