CivicTheme is a component-based atomic design system and Drupal theme.
Resources:
- Official site
- Design system: Figma, Accessibility Compliance Assessment
- UI Kit: GitHub, Storybook
- Drupal theme: Monorepo, Admin module
- Documentation: Content authoring, Development, Repository
- Example sites: Default, Government, Higher Education, Corporate
- Case studies
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.
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.
- Make sure the core issue patch above has been applied *before* installing CivicTheme and then clear the cache
- Install theme code:
composer require drupal/civictheme - 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();" - Clear caches in UI or with Drush:
drush cr - Enable the theme in UI or with Drush:
drush then civictheme
Sub-theme
- 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 - Enable the theme in UI or with Drush:
drush theme:enable theme_machine_name - 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
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:
- Akhil Bhandari (Akhil@Salsa)
- Alan Cole (alan.cole)
- Alan Rako
- Alex Skrypnyk (alex.skrypnyk)
- Amey Mudras (ameymudras)
- Amit Singh
- Anand Toshniwal (anand.toshniwal93)
- Awang Setyawan (awset)
- AntoineOsanz
- Chris Darke (ChrisDarke)
- Daniel Grynenko (danielgry)
- Danielle Sheffler (DSheffler)
- Deepali Jangam (DeepaliJ)
- Feb Dao (febdao)
- Fiona Morrison (fionamorrison23)
- Govind Malu (govind.maloo)
- Ivan Zugec (ivan zugec)
- Jacob Deutsch
- John Cloys (jcloys)
- Joshua Fernandes (joshua1234511)
- Kristen Pol
- Lokender Singh2
- Nathania S (nathania.s)
- Nick Georgiou (nickgeorgiou)
- Nicolas Haase (NicolasH)
- Phillipa Martin (PhillipaMartin)
- Richard Gaunt (RichardGaunt)
- Roman Barbun (Barbun)
- Satyajit Das (Satyajit1990)
- Shivan Jaikaran (xamount)
- sonamchaturvedi (sonamchaturvedi)
- Sonny Kieu (sonnykt)
- Steve Worley (steveworley)
- Suchi Garg (gargsuchi)
- Thomas Peterson
- Tina Calabria