Skip to main content

Cast

A free starter theme for Concrete CMS 9: Bootstrap 5 on Bedrock, a light skin and a dark skin, editable areas on every template, and documentation written for people still learning the CMS. MIT licensed. It makes no CDN calls and has no paid tier.

Download

Download Cast 1.0.0

cast-1.0.0.zip · 215 KB · MIT · Concrete CMS 9.5.0+


Features

  • Bedrock and Bootstrap 5, the same foundation the core uses, so core blocks lay out correctly on the grid.
  • Two skins. Form is the light skin, Cured is the dark one. Both compile from one stylesheet and a different set of variables, so they cannot drift apart. Switch them under Pages & ThemesThemesCustomize.
  • Self-hosted type. Archivo and IBM Plex Mono ship inside the theme with their OFL licences, so a Cast page makes no request to a font CDN and visitor IP addresses stay out of third-party logs.
  • Measured contrast. Body text clears 13.8:1 on the light skin and 14.6:1 on the dark one, and every text colour the theme ships clears WCAG AA on its own ground.
  • Five page templates (Home, Default, Left Sidebar, Right Sidebar, Blank), registered on install, each with editable areas, plus global areas for the header navigation and footer.

Install it

Drop the cast folder into packages/, then install it under Extend Concrete in the Dashboard, or from the command line:

./vendor/bin/concrete c5:package:install cast
./vendor/bin/concrete concrete:theme:activate cast

Build it

The SCSS sources ship with the theme. Dart Sass is the only build dependency:

cd packages/cast
npm install
npm run build

The build resolves Bedrock and Bootstrap from the core install, so there is nothing to vendor. Compiled skins are committed too, because the theme has to work when someone unzips it into packages/ without Node installed.

Before you fork it

Variable order matters

The theme sets every base SCSS value before importing bootstrap/scss/variables, because Bootstrap derives container padding, component radii and input sizing at import time. Override a base value after that import and the derived ones stay stale. That is how you get a 2rem grid gutter against 1.5rem container padding and a page that scrolls sideways on a phone.

Claiming a theme feature turns off the core's fallback assets

Cast only claims features whose fallback is CSS-only. Features backed by fallback JavaScript are left unclaimed on purpose, so the core keeps shipping their behaviour and the theme restyles it. Claim one of those without bundling the equivalent JavaScript and the block stops working, with no error to say why.

Cast 1.0

  • Concrete CMS 9.5+
  • MIT licence
  • Bootstrap 5 / Bedrock
  • Two preset skins
  • Archivo & IBM Plex Mono, self-hosted

Elsewhere