This repository is the working package for the Umami Drupal CMS site template, currently targeting Drupal CMS 2.1+ and Drupal core 11.3+. It is intentionally structured so the recipe can be installed and tested from a fresh Drupal CMS checkout before any Drupal.org project split happens.
Status: Public preview. This repository is ready to share and test from GitHub, but it is not an official Drupal.org release. Normal downstream use still depends on tagged
drupal/umami_nextanddrupal/umami_next_themereleases instead of the local path packages inpackages/.
.
├── composer.json
├── recipe.yml
├── config/
├── content/
├── docs/
└── packages/
├── umami_next/
└── umami_next_theme/
The root package is the site-template recipe (drupal/umami). The package
directories contain local Composer packages for the custom module and theme that
the exported recipe currently depends on.
Use the local DDEV helper to create or refresh a separate Drupal CMS tester,
mirror this source package into source/, require the local path repositories,
and reinstall the recipe:
make dev-test-installBy default this uses ../umami-site-template-test. Override TESTER_DIR and
TESTER_NAME if you need a different local tester:
make dev-test-install TESTER_DIR=../umami-release-smoke TESTER_NAME=umami-release-smokeManual equivalent:
mkdir umami-site-template-test
cd umami-site-template-test
ddev config --project-type=drupal11 --docroot=web --project-name=umami-site-template-test
ddev start
ddev composer create-project drupal/cms .
cp -R /path/to/umami-site-template-codex source
ddev composer config repositories.umami path source
ddev composer config repositories.umami_next path source/packages/umami_next
ddev composer config repositories.umami_next_theme path source/packages/umami_next_theme
ddev composer require drupal/umami:^1@dev drupal/umami_next:^1@dev drupal/umami_next_theme:^1@dev --with-all-dependencies
ddev drush site:install recipes/umami --site-name=Umami --account-name=admin --account-pass=admin -yAfter local source changes, refresh the tester copy before rerunning Composer or install checks:
make dev-sync-sourceThe acceptance gate is a fresh DDEV install that reaches the Umami site without manual UI changes.
The root package is a Drupal CMS site-template recipe, but the module and theme
under packages/ must be released as their own Composer packages before the
recipe can be published for normal downstream use.
Release order:
-
Tag and release
drupal/umami_next. -
Tag and release
drupal/umami_next_theme. -
Update this recipe's
composer.jsonto require tagged releases instead of local development constraints, for example:"drupal/umami_next": "^1.0@alpha", "drupal/umami_next_theme": "^1.0@alpha"
-
Run a clean install from packages.drupal.org with only:
ddev composer require drupal/umami:^1.0@alpha --with-all-dependencies ddev drush site:install recipes/umami --site-name=Umami --account-name=admin --account-pass=admin -y
The ^1@dev constraints and path repositories are local development mechanics
only. Do not ship a public release that depends on them.
The release archive excludes packages/, tests, CI configuration, and local
development install notes via .gitattributes. Public releases should depend on
tagged drupal/umami_next and drupal/umami_next_theme packages instead of
bundling those development path repositories.
Before publishing to Drupal.org, confirm the final project namespace and package
names. This source currently uses drupal/umami, but the Drupal.org umami
namespace has existing history and may require maintainer coordination.
The fast local install gate is:
make dev-test-installThe repository also ships PHPUnit coverage for recipe requirements, installability, public routes, Canvas component references, editorial workflow coverage, sitemap output, and homepage curation. Those tests should be run in a fresh Drupal CMS project with the local recipe, module, and theme required as path repositories before tagging a release.
This package is install-time source of truth for a new Drupal CMS site. Site
structure, sample content, Canvas templates, menus, and block placement are
owned by the recipe export in config/ and content/.
The recipe content intentionally keeps the original Drupal core Umami demo recipes and photography contributed by Drupal community members. Future content expansion should preserve that source and licensing pattern instead of replacing the community corpus with synthetic filler.
After installation, the downstream site owns normal Drupal configuration
management. A production site should set its own config sync directory outside
the web root and commit post-install site changes in that downstream project.
Do not treat sites/default/files/sync from a local DDEV install as release
source.
Environment-specific settings are intentionally not shipped in the recipe:
trusted_host_patternsmust be configured per environment. A permissive.*value is acceptable only in local DDEV-generated settings.file_private_pathshould point to a private directory outside the docroot for production and shared test environments, especially because Webform can collect uploads.- CAPTCHA keys and outbound mail settings must be supplied by the installing site, not committed to this package.
This package started from a drush site:export baseline from the working
Drupal CMS site. Several cleanup passes have already moved public discovery and
site services onto Drupal-native foundations: recipe and story archives are
Views, topics are taxonomy term pages with aliases, search uses the Drupal CMS
Search API/View, contact uses Webform and editable social menu links, and
metadata/sitemap discovery uses Metatag and Simple XML Sitemap.
The remaining cleanup passes should:
- Reduce the flattened recipe export toward Drupal CMS recipe dependencies where possible.
- Remove config inherited from the
drush site:exportbaseline when an upstream Drupal CMS/core/contrib recipe owns it. - Add per-bundle Schema.org JSON-LD mappings with Schema Metatag, especially for recipe structured data.
- Keep the custom module limited to code that cannot be expressed as recipe/config/theme.
- Continue moving presentation structure into fields, Views, menus, media, Canvas templates, and components instead of Twig/PHP hardcoding.
- Keep homepage recipe curation driven by Drupal's editable node flags:
promoteincludes recipes in homepage curation andstickypins the first row unless a future Canvas-native curation model replaces it. - Preserve installability evidence for every cleanup pass.
See docs/RECIPE_OWNERSHIP.md for the current recipe ownership matrix and
docs/VALIDATION.md for source-maintainer validation notes and upstream
findings discovered during clean-install intent testing.
