Skip to main content

Installing a Concrete CMS theme

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.

File locations

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.

Install the package

From the Dashboard:

  1. Go to Extend Concrete.
  2. Find the package in the list of packages awaiting installation and click Install.

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

Activate the theme

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

If the theme does not show up

  • Check that packages/<handle>/controller.php exists at exactly that depth. A nested folder is invisible to Concrete.
  • Check the package's minimum core version. A theme built for 9.5 refuses to install on 9.2.
  • Clear the cache from the Dashboard, or run ./vendor/bin/concrete c5:clear-cache.

After activating

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.