Concrete CMS 9 · Updated 2026-09-03
Themes in Concrete CMS 9 are almost always distributed as packages. Installing one is two separate steps that people often conflate: installing the package, then activating the theme it contains.
A packaged theme is a single directory that belongs in your site's packages/ folder. On a Composer-managed install that is public/packages/; on a classic install it is packages/ next to concrete/. Inside, the theme itself lives at <package>/themes/<theme>/.
Unzip the download so you end up with packages/cast/, not packages/cast-1.0.0/cast/. A nested folder is the most common reason a theme does not appear in the Dashboard.
From the Dashboard:
From the command line, run this from your site root. The argument is the package handle, which is the folder name:
./vendor/bin/concrete c5:package:install cast
Installing the package registers the theme; it does not switch your site to it. Activate it under Pages & Themes, or from the command line:
./vendor/bin/concrete concrete:theme:activate cast
If the theme ships more than one skin, pick one at the same time:
./vendor/bin/concrete concrete:theme:activate-skin cured
packages/<handle>/controller.php exists at exactly that depth. A nested folder is invisible to Concrete../vendor/bin/concrete c5:clear-cache.A new theme brings its own page templates and its own area names. Existing pages keep their content, but blocks in areas the old theme had and the new one does not will stop appearing. The content is still there; it has nowhere to render. Check your key page types before you call the switch done.