CivicTheme is a component-based atomic design system and Drupal theme.

Resources:

Where to get support

Where to submit issues and PRs

Development of the entire CivicTheme ecosystem is managed in the GitHub civictheme organization.
This allows to develop the Drupal theme and modules at the same place and use advanced CI configuration for testing.
The code from the monorepo is automatically published to Drupal.org with all commit and author information preserved.

For Drupal theme: submit issues to the Drupal theme issue queue and submit PRs to the GitHub Drupal monorepo

For UI Kit: submit issues to the UI Kit GitHub repository and submit PRs to the UI Kit GitHub repository

If you do not know which part the issues relates to - submit an issue to the Drupal theme issue queue and it will be moved to the appropriate location by the CivicTheme maintainers.

Installation

IMPORTANT! Drupal core has a known issue and a patch would need to be installed on your site before installing CivicTheme to allow the CivicTheme installation complete successfully. Note, this patch is not required for production.

Get required core patch

Or, add this patch to your `composer.json`


"patches": {
"drupal/core": {
"Layout builder cannot recover on missing layout - https://www.drupal.org/project/drupal/issues/3204271#comment-15151776": "https://www.drupal.org/files/issues/2023-07-16/3204271-20-missing-layout-exception.patch"
}
}

Please do not submit issues if your installation finished with WSOD - this means that you are using CivicTheme that was not fully installed. Install a patch mentioned above and restart your installation from scratch.

  1. Make sure the core issue patch above has been applied *before* installing CivicTheme and then clear the cache
  2. Install theme code: composer require drupal/civictheme
  3. Enable required modules (Drupal allows themes to declare module dependencies, but does not yet allow those modules to be enabled automatically):
    drush ev "require_once dirname(\Drupal::getContainer()->get('theme_handler')->rebuildThemeData()['civictheme']->getPathname()) . '/theme-settings.provision.inc'; civictheme_enable_modules();"
  4. Clear caches in UI or with Drush: drush cr
  5. Enable the theme in UI or with Drush: drush then civictheme

Sub-theme

  1. Create a sub-theme using provided script (do not skip this step if you want to receive the full benefits of the tooling provided with a sub-theme starter kit) :
    php civictheme_create_subtheme.php
    "Human theme name" "Human theme description" /path/to/theme_machine_name
  2. Enable the theme in UI or with Drush: drush theme:enable theme_machine_name
  3. Compile front-end assets (NodeJS version >=18.14 is required):
    nvm use
    npm ci
    npm run build

Known issue in version 1.11

Remove examples from civictheme_starter_kit

CivicTheme 1.11 saw the upgrade to SDCs which came with a namespace change.

The existing example components need to be removed so that civictheme sub-themes built with this tool work correctly.

We will address this issue in code soon. As a workaround, please delete the following directories from your new sub-theme manually (unless you have added some code changes):

  • /components/01-atoms/demo-button
  • /components/01-atoms/demo-button
  • /components/03-organisms/header

See the issue.

Credit

As of June 2025, Salsa Digital has contributed over 10,000 hours to CivicTheme!

The following people have contributed to CivicTheme as of June 2025:

Supporting organizations
Design, development, accessibility and ongoing maintenance