Decouple component from Open Y as independent module project


In 2019 the Open Y team started decoupling major components to streamline the distribution and simplify support.

Communication started in the Community Board - Ejecting modules from OpenY distro as independent projects.

The decoupling process is ongoing. See the index of decoupled projects.

In 2021 the Open Y core team faced coupling blockers in the distribution during the upgrade from Drupal 8 to Drupal 9

To formalize the ongoing development and maintenance strategy, the Open Y core team shared its decoupling plan with the wider community in mid-2021.

This document elaborates on those processes.


  • Every new component or sub-project of Open Y should be developed in its own repository - either on GitHub or
  • The decoupled project could be
  • GitHub should be used when there is no strategy to make a component or project available for the wider Drupal community - that is, when it is tied to YMCA business and unlikely to be leveraged by somebody else.
  • should be used when the component could be useful to projects outside of Open Y.


for creating a new decoupled component

  1. Create a new GitHub/ repository.
  2. Work on getting an initial release with at least beta version stability.
  3. Create a composer.json file for the component in order to be able to start using it via composer. See Virtual Y for an example.
  4. Make it available for the public via or as a release. Ensure podarok is added as a co-maintainer to the respective system.
  5. Suggest adding to Open Y by opening an issue.
  6. If approved, create a Pull Request adding it as a dependency in composer.json.
  7. Ensure this component is enabled in any of the packages maintained in the Open Y profile installation
  8. Ask for review and release, according to the release plan.

for decoupling an existing component of Open Y

Follow the steps above, but:

  • After creating the repo, filter the selected component by running git filter-branch --subdirectory-filter ... from the latest development branch of the Open Y profile. This keeps credits of work done for this component as a part of the Code of Conduct.
  • After separating the code, ensure the ejected code is not duplicated in the Open Y profile. Remove duplicated code in the same Pull Request in which you add the new dependency.


How to update module on

  • Git filter-branch to get a history of changes.
  • Change git origin to project.
  • Create a new branch and push the code to
  • Create and push tag to Create a release on
  • Update composer.json in this distribution with a new tag.

How to decouple module from YN to

Example: paragraph_skins

git clone decouple
rm -rf decouple_copy && cp -a decouple decouple_copy
cd decouple_copy
git filter-branch --subdirectory-filter docroot/modules/contrib/paragraph_skins
git clean -dfx
git remote remove origin && git remote add origin
git pull origin 8.x-1.x --allow-unrelated-histories
# Resolve conflicts if applicable.
git push origin production:8.x-1.x
# Create tags and release on

How to decouple module from Open Y to Open Y Subprojects

Request a repository for the module. Example: shared_content_server

git clone decouple
rm -rf decouple_copy && cp -a decouple decouple_copy
cd decouple_copy
git filter-branch --subdirectory-filter docroot/profiles/contrib/openy/modules/custom/SOME_MODULE_HERE
git clean -dfx
git remote remove origin && git remote add origin
git push origin production
# Create composer.json on the decoupled repository. Example:
git clone yn-distribution
# Update composer json for distrubution. See below

Example for Activity Finder